USB的一些术语
端点:位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据。每一个端点都有唯一的确定地址,有不同的传输特性。
域:是USB数据最小的单位,由若干位组成(至于是多少位由具体的域决定),域可分为七个类型:
1、同步域(SYNC),八位,值固定为0000 0001,用于本地时钟与输入同步
2、标识域(PID),由四位标识符+四位标识符反码构成,表明包的类型和格式
3、地址域(ADDR):七位地址,代表了设备在主机上的地址,
4、端点域(ENDP),四位,由此可知一个USB设备有的端点数量最大为16个。
5、帧号域(FRAM),11位,每一个帧都有一个特定的帧号,帧号域最大容量0x800,对于同步传输有重要意义。
6、数据域(DATA):长度为0~1023字节,在不同的传输类型中,数据域的长度各不相同,但必须为整数个字节的长度
7、校验域(CRC):对令牌包和数据包(对于包的分类请看下面)中非PID域进行校验的一种方法。
包:由域构成的包有四种类型,分别是令牌包、数据包、握手包和特殊包,前面三种是重要的包,不同的包的域结构不同:
1、令牌包:可分为输入包、输出包、设置包和帧起始包
其中输入包、输出包和设置包的格式都是一样的:
SYNC+PID+ADDR+ENDP+CRC5(五位的校验码)
帧起始包的格式:
SYNC+PID+11位FRAM+CRC5(五位的校验码)
2、数据包:分为DATA0包和DATA1包,当USB发送数据的时候,当一次发送的数据长度大于相应端点的容量时,就需要把数据包分为好几个包,分批发送,DATA0包和DATA1包交替发送,即如果第一个数据包是DATA0,那第二个数据包就是DATA1。但也有例外情况,在同步传输中(四类传输类型中之一),所有的数据包都是为DATA0,格式如下:
SYNC+PID+0~1023字节+CRC16
3、握手包:结构最为简单的包,格式如下
SYNC+PID
USB的一种传输模式——控制传输
可分三大阶段:1、建立(setup)阶段。2、数据(DATA)阶段。3、确认阶段
setup中主机发起一个setup的数据包,包含一些请求命令及一些数据,当为输入请求时,则DATA中为输入,输出命令则DATA为输出,注意不传送数据,也必须发送一个大小为0的数据包。确认阶段则相反,用来确认数据的正确传输。
USB设备枚举过程:
1、当设备与主机连接时,主机就会检测到一个连接条件,并开始进行总线复位。
2、主机会使用默认地址(0H)读取设备描述符,并发送一个0数据包作为应答。
3、地址分配,主机将发送一个设备地址的请求,并在后面跟着一个0长度的数据输出包,地址包含在建立包中。
4、主机从新的地址获取设备描述符。
5、主机读取配置描述符。
6、读取描述符合集,每个配置描述符的接口描述符和端点描述符的集合。
7、设备配置,使得设备从地址状态进入配置状态。
8、读取配置状态