概念基础:
1、USB插入检测
在USB集线器的每个下游端口的D+和D-上分别接了一个15KΩ的下拉电阻到地,这样当悬空时为低电平。而USB设备端接了一个1.5KΩ的上拉电阻到3.3V(全速设备和高速设备上拉电阻在D+上,低速设备上拉电阻在D-上)。因此,当设备插入集线器时,经过两个电阻的分压,电平为3V,集线器检测到这个状态后,报告给USB主控制器,这样就检测到设备的插入了。集线器在根据检测到被拉高的数据线是D+还是D-来判断插入的是什么类型速度的设备。
2、描述符及关系
在主机获取描述符时,首先获取设备描述符,然后再获取配置描述符,然后根据配置描述符中配置集合的长度,一次性将配置描述符、接口描述符、类特殊描述符(如果有)、端点描述符一次读回。
设备描述符记录的主要信息有:设备所使用的USB协议版本号、设备类型、端点0的最大包大小、厂商ID(VD)、产品ID(PID)、设备版本号、厂商字符串索引、产品字符串索引、设备序列号索引、可能的配置数等。
配置描述符主要记录的信息有:配置所包含的接口数、配置的编号、供电方式、是都支持远程唤醒、电流需求量等。
接口描述符记录的信息有:接口的编号、接口的端点数、接口所使用的类、子类、协议等。
端点描述符记录的主要信息有“端点号及方向、端点的传输类型、最大包长度、查询时间间隔等。
字符串描述符主要是提供一些方便人们阅读的信息,它不是必须的。
3、设备的枚举过程
设备枚举过程全部使用控制传输。
控制传输分为3个过程:建立过程、可选的数据过程、状态过程。
a、USB主机检测到USB设备后,先对设备进行复位,设备地址变为0;
b、主机通过地址0端点0向设备发送获取描述符的请求,设备收到请求后,将描述符返回主机。
c、主机对设备又一次复位,进入设置地址过程;
d、主机使用新地址再次获取设备描述符
e、主机获取配置描述符或获取配置描述符集合。配置描述符集合包括配置描述符,接口描述符、类特殊描述符、端点描述符等。接口描述符、类特殊描述符、端点描述符是不能单独获取的,必须跟随配置描述符以一个集合的方式一并返回。
4、USB包结构及传输过程
(1)The Setup Packet
Step包数据格式
1. Setup Token |
Sync |
PID |
ADDR |
ENDP |
CRC5 |
EOP |
Address & Endpoint Number |
2. Data0 Packet |
Sync |
PID |
Data0 |
CRC16 |
EOP |
Device Descriptor Request |
|
3. Ack Handshake |
Sync |
PID |
EOP |
Device Ack. Setup Packet |
数据包格式
1. In Token |
Sync |
PID |
ADDR |
ENDP |
CRC5 |
EOP |
Address & Endpoint Number |
2. Data0 Packet |
Sync |
PID |
Data0 |
CRC16 |
EOP |
Last 4 bytes + Padding |
|
3. Ack Handshake |
Sync |
PID |
EOP |
|
Host Acknowledges Packet |
握手包格式
1. Out Token |
Sync |
PID |
ADDR |
ENDP< |