USB研究(一)

来源:互联网 发布:php代码注入原理 编辑:程序博客网 时间:2024/06/03 11:14

 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、读取配置状态

原创粉丝点击