USB深入学习

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的间隔

猜你喜欢

转载自blog.csdn.net/yhl_sophia/article/details/81476534