USB总线是基于分层的星状拓补结构,以Hub(可将一个USB接口扩展为多个接口的装置)为中心连接周围设备。
端点是主机最终的传输对象,信息包括端点号、传输类型、方向和数据包长度等。
USB采用NRZI(非归零码)对数据进行编码
供电方式分为两种:
1、自供电:使用外部电源供应
2、总线供电:通过VBUS进行供电
USB总线信号使用差分传输模式,数据线有D+和D-,低速总线上的状态:
J态: D+ =“0”,D- =“1”
K态: D+ =“1”,D- =“0”
SE0态(Reset):D+ =“0”,D- =“0”
空闲状态:J状态 恢复信号(Resume):K状态
SOP:从IDLE切换到K EOP:持续2位时间的SE0,后跟1位的J状态
SYNC:3个重复的KJ转换,后跟1位K状态
高速下的JK态和低速的相反,低速下空闲状态为“K”状态;全速下空闲状态为“J”状态;高速下空闲状态为“SE0”状态
主机对于设备断开和连接判断:
断开——D+和D-上的下拉电阻使得二者都在低电平,持续SE0状态
连接——主机检测到某一个数据线电平拉高并保持了一段时间,就认为有设备连接
Packet的组成:SOP、SYNC、Packet Content、EOP
Packet Content的内容有:PID、地址、帧号、数据、CRC,不同Packet的类型根据PID区分
PID的类型:
Token令牌——OUT/IN/SETUP
SOF Packet
DATA数据——DATA0/DATA1
HandShake握手——ACK/NAK/STALL
Special特殊——PRE/ERR/PING
地址:设备地址和端点地址
帧号:11位,达到7FFH时归零重计,每个帧的帧首传输一次SOF包
CRC:Token CRC、DATA CRC
Transaction(事物)
Setup transaction、DATA In、DATA Out(所有事物都是由主机发起)
Transfer(传输):Control、Bulk、Isochronous、Interrupt
每种传输方式分为Setup Stage、Data Stage、Status Stage
USB插入主机后的活动:
供电——复位——获取Device Descriptor前8字节——复位(可选)——分配地址——获取Device Descriptor——获取Configuration——获取String(可选)——配置
(Very Important)描述符类型:
Device、Configuration、String、Interface、Endpoint、Device_qualifier、DEBUGd.......
几种描述符的具体组成:
Device Descriptor
- bLength
- bDescripotor Type 1
- bcdUSB 设备遵循的USB协议版本号
- bDeviceClass
- bDeviceSubClass
- bDeviceProtocol 以上三个由USB-IF分配
- bMaxPacketSize0 EP0的最大包长
- idVendor USB-IF分配
- idProduct 厂家分配
- bcdDevice 设备自身的版本号
- iManufacturer
- iProduct
- iSeriaNumber
- bNumConfigurations 设备支持多少种Configuration
Configuration Descriptor
- bLength
- bDescriptor Type 2
- wTotallLength 包含所有描述符的长度(设备、配置、接口、端点等)
- bNumberInterfaces 该配置包含几个接口
- bConfigurationValue 传递给SetConfiguration()的参数
- iConfiguraion 在众多字符串描述符中的序号
- bmAtrributes D6:是否由总线供电 D5:是否支持远程唤醒
- bMaxPower 设备全速工作时需要从总线获取的电流
Interface Descriptor
- bLength
- bDescriptorType 4
- bInterfaceNumber 在该配置所支持的众多接口中的序号
- bNumEndpoints 该接口支持的非0EP的个数
- bInterfaceClass
- bInterfaceSubClass
- bInterfaceProtocol 由USB-IF分配
- interface 在众多字符串描述符中的序号
EndPoint Descriptor
- bLength
- bDescriptorType 5
- bEndpointAddress D7:0-OUT,1-IN D0~D3:端点号
- bmAttributes D0~D1:传输类型 D2~D3:同步类型
- wMaxPacketSize 该端点的最大包长
- bInterval 主机查询EP的间隔