USB学习笔记

USB学习笔记 1 USB协议 1.1 概述 480Mbps(高速) 12Mbps(全速) 1.5Mbps(低速) 1.2 协议 PID(packet identifier)  Token IN  OUT  SOF  SETUP   Data DATA0  DATA1  DATA2  MDATA   Handshake ACK  NAK  NYET  STALL   Special PING  ...    包格式(packet format),有四种数据包格式: (1) Token packet format    8 7 4 5 PID:包类型,8bit。IN、OUT、SETUP、PING ADDR:USB设备地址,7bit ENDP:endpoint编号,4bit CRC:校验码,5bit  (2) SOF packet format    8 11 5 PID:包类型,8bit。SOF FrameNumber:帧号,11bit CRC:校验码,16bit  (3) Data packet format    8 0 ~ 8192 16 PID:包类型,8bit。DATA0、DATA一、DATA二、MDATA DATA:数据,0~8192 bit CRC:校验码,16bit  (4) Handshake packet format    8 PID:包类型,8bit。ACK、NAK、STALL、NYET   各字段位域表示 1 PID位域 lsb msb PID0 PID1 PID2 PID3 PID0 PID0 PID1 PID2 PID3 能够看出,PID自带校验(所以,CRC的计算对象都不包含PID)  2 ADDR位域 lsb msb ADDR0 ADDR1 ADDR2 ADDR3 ADDR4 ADDR5 ADDR6   3 ENDP位域 lsb msb ENDP0 ENDP1 ENDP2 ENDP3   4 DATA位域 lsb msb D7 D0 D1 D2 D3 D4 D5 D6 D7 D0 Byte N Byte N+1 Byte N+2     1.3 传输类型(Transfer Type) 1. 控制传输(Control Transfer),适用于USB链接时枚举设备 2. 批量传输(Bulk Transfer),适用于大容量数据传输,不容许有数据错误,有ACK。U盘 3. 中断传输(Interrupt Transfer),适用于延时要求小,数据量小的数据传输。鼠标、游戏柄等设备 4. 同步传输(Isochronous Transfer),适用于音视频数据传输,实时性要求高,容许有错包,无ACK。摄像头  一次传输(Transfer)由一到屡次的事务(transactions)组成。 1.4 事务(transactions)  事务由令牌(Token)、数据(Data)、握手(Handshake)包组成。 一次事务包括1个Token Packet、1个Data Packet、1个Handshake Packet,有的事务不含Data Packet,只有1个Token Packet和1个Handshake Packet。 1.4.1 Bulk Transactions 一次批量事务,由1个IN/OUT/PING packet、1个DATA0/DATA1 packet、1个ACK/NAK/STALL/NYET packet组成。  Bulk Transaction PING包机制 在全速/低速USB体系中,当发送OUT包时,若Device回复NAK,Host将等待一段时间再次发送OUT包,在此时间内host是被独占的。这样USB总线的带宽利用率很低。所以,在高速USB体系中,引入了PING机制。  每次OUT事务以前,Host向Device发送一个PING包,询问Device是否准备好足够的空间接收接下来的数据,Device有3种回复,ACK,表示ready;NAK,表示Device尚未足够空间;STALL,表示Device故障。若是host收到NAK,host将处理其余事物,过特定时间以后再次发送PING包。这样就提升了USB总线带宽的利用率。  1.4.2 Control Transfer 控制传输分为Setup Stage、Data Stage、Status Stage三部分。 1.1 Setup Stage Setup Stage由1个Setup Packet、1个DATA0 Packet、1个ACK packet组成  Setup Transaciton Setup Stage的DATA数据类型为DATA0 1.2 Data Stage Data Stage的数据传输方向是固定的,要么是IN,要么是OUT。数据方向(IN or OUT)和大小,是在Setup Stage中指定的。 Data Stage的IN或OUT数据传输与bulk transaction中的IN或OUT数据传输机制是一致的,Data Stage的DATA数据类型是由DATA0、DATA1交替组成。 1.3 STATUS stage Status Stage是控制传输的最后一个传输事务。它是一个DATA1传输事务,其方向与Data Stage的方向相反。若是没有DATA stage,它是一个IN方向的DATA1传输事务。           Control Transfer 1.4.3 Iterruput Transaction 中断事务和批量事务(Bulk Transaction)相似,不过它不包含PING packet。  Interrupt Transaciton 1.4.4 Isochronous Transaction 一次同步事务,由1个IN/OUT packet和1个DATA packet组成,没有Handshake packet。它的实时性要求最高,数据的正确性要求不高,所以没有握手回应包。  Isochronous Transaction  1.5 USB数据传输 一次USB传输(Transfer)由一到屡次USB事务(Transaction)组成,一次USB事务(Transaction)由2个或3个Packet组成,Packet是USB传输的最小单位。  传输过程当中,Packet中不容许被打断,一次事务(Transaction)也不容许被打断。(一次事务中的DATA、Handshake包中都没有ADDR和ENDP位域,若被打断,包由哪一个USB设备接收?)  一次USB事务(Transaction)必须在帧内传输,不容许跨镇。一次USB传输(Transfer)能够在多个帧内完成    1.6 设备(Device) 1. 设备状态(Device State) Detach、Attach、Suspend 2. USB枚举(USB enum) 控制传输、0端点、双向传输,具体过程: Host获取设备描述符,Get Descriptor Hos设置地址,Set Address Host从新获取设备描述符,Get Descriptor Host获取设备配置信息,Get Configuration 3. 标准请求  4. 类请求  5. 厂商请求   2 组合设备驱动实现简要说明 2.1 USB组合设备概述 USB组合设备(USB Composite Device),经过将不一样的Interface定义为不一样的类来实现多个功能的组合。 2.2 USB组合设备的枚举 USB组合设备与单一设备,在枚举时的主要区别体如今“设备描述符(Device Descriptor)”和“配置描述符(Configuration Descriptor)”。 2.2.1 设备描述符(Device Descriptor)  USB单一和组合设备的“设备描述符” USB规范定义,Class Code值为0时,表示配置描述符(Configuration Descriptor)中的每一个接口(Interface)指定了它本身的类别(Class),不一样接口(Interface)在功能上都是独立的(即组合设备)。规范规定,Class Code为0时,SubClass Code亦为0.。 2.2.2 配置描述符(Configuration Descriptor) 在配置描述符(Configuration Descriptor)中,指定了本配置描述符提供了几个接口(Interface),即此 USB设备可被枚举成多少个功能设备。 枚举的时候,配置描述符(Configuration Descriptor)后面紧跟的是接口(Interface Descriptor)描述符及其端点(Endpoint Descriptor)描述符。以下图所示:  配置描述符数据示意图 下图是一个可实现两个功能(USB网卡和USB串口)的USB组合设备的配置描述符数据示意图:  USB组合设备的配置描述符 2.3 USB组合设备的驱动程序 对比USB组合设备和单一设备的驱动程序,区别主要体如今设备信息文件(INF)中的device-id字段,以下图所示:  USB单、组合设备的INF文件主要区别 USB设备插入PC,枚举,获取设备、配置、字符串等描述符以后,开始为各Interface选择相应的驱动进行安装。例如: 对于1st Interface,在用户指定目录下,搜索包含USB\Vid_xxxx&Pid_yyyy&MI_00的INF文件,找到以后,再安装该INF文件中指定的驱动文件(后缀名为sys的文件)。以此类推,继续搜索其余Interface对应的INF文件并安装相应的驱动文件。 3 附录 3.1 Universal Serial Bus Specifications  3.2 INF文件编写  3.3 经常使用设备类型及其UID  3.4 USB设备驱动安装步骤及相关注册表