USB基础简介

一、USB2.0

Universal Serial Bus (通用串行总线) 
符合USB总线数据通信要求的通信协议

1、意义

1.易用(热插拔、即插即用)

2.易扩充(USBHub可同时操作127个设备、兼容USB1.1)

3.高速(相对)

2、分类(按传输速率)

1.USB2.0 LowSpeed(1.5Mbps,适用于交互设备)

2.USB2.0 FullSpeed(12Mbps,适用于电话、音频)

3.USB2.0 HighSpeed(480Mbps,适用于海量存储、视频)

备注:USB2.0 是取代 USB1.1 的,而 USB3.0 USB2.0 的补充协议

二、USB2.0总线布局
1、主机——设备
      1)、主机在一个USB系统中是唯一存在的
      2)、不支持主机——主机或设备——设备的连接
      3)、插头和插座(A型、B型、mini、micro )
      4)、电源线(红)、地线(黑)、D+(绿)、D-(白)
      5)、USBon-the-go技术(多一根ID选择线,接地为主,悬空为从)
2、有层次性的星型结构
      1)、网络集线器(Hub)
      2)、根集线器(Root Hub)


三、USB2.0总线逻辑拓扑结构



四、USB系统逻辑结构



五、USB2.0通信方式
1、差分信号与NRZI编码
       1)、SE0状态:D+与D-上均为低电平(signal-ended)
       2)、J状态(信号序列皆以J开始):D-高电平,D+低电平(LS)D+高电平,D-低电平(FS)
       3)、K状态:与J状态相反的电平
       4)、状态维持时间:位周期,即位传输速率对应的时间。2.8ns/83.3ns/667ns(这就是USB物理传输速率的本质含义)
       5)、NRZI编码:NonReturn Zero-Invert(非回零,反向编码)
       6)、位插入编码:每碰到六个连续1,则插入一个0
       7)、NRZI编码的意义在于尽量消除缆线上的误差和延时



2、高速设备的识别
      1)、低速和全速设备的高电平为大于2.8V,低电平为小于0.3V
      2)、高速设备的高电平为0.4V,低电平为0
                a.高速设备首先作为全速设备上电

                b.如果Hub支持2.0规范,则将上电设备的状态置为SE0

                c.如果设备是高速设备则会往D-线反向灌17.78mA的电流,在D-上形成一个800mV的电平(设备此时整体阻抗约45欧姆),称为Chirp K信号

                d.Hub如果支持高速设备,则通过交替向D+和D-线灌17.78mA电流的方式,形成3对维持60us左右的ChirpJ与Chirp K信号对,表明自己支持高速设备

                e.此时设备与Hub交换速率信息过程完毕。如果满足设备与Hub都是高速的条件,设备将在500us之内通过调节自身阻抗使系统整体阻抗降低到22.5欧姆

                f.设备恢复到J状态,此时由于整体阻抗的变化,D+信号线上的电平已经变成了400mV,系统进入高速通信状态




六 、USB2.0传输协议

1、端点(ENDP)
      1)、端点是可惟一识别的USB设备的一部分,一系列独立的端点构成了USB逻辑设备
      2)、每个逻辑设备有一个被主机分配的惟一地址;每个端点在设备内部有一个设备给定的端点号(端点方向+ 端点号)
      3)、每个端点都只能支持数据流入或流出(注意不是每个端点号)
      4)、每个端点在被设置前处于未知状态,不可被主机访问(端点0除外)
      5)、端点0为缺省控制端点,设备加电复位后即可访问
      6)、一个设备最多可以有16个端点(包括端点0)

2、包(Packet)
      1)、包是USB在传输过程中的最小逻辑单位
      2)、所有的包都以同步字段封包和包末尾(SYNC / EOP)开始和结束
      3)、所有的包都包含包标识符(PID)
      4)、PID用于表示包类型
      5)、包本身没有方向概念
3、同步字段
      1)、全速/低速设备的SYNC是3对KJ,然后两个K(00000001)
      2)、高速设备的SYNC是15对KJ,然后两个K
      3)、EOP为两个SE0,然后回到J
      4)、总线解析包格式的时候不会等待EOP,而是必须在包的格式要求的最后一个字段后紧接EOP,否则该包即使格式满足要求也会被放弃

注:此后提到“包”这个概念的时候,将不再包括SYNC和EOP

类型

子类型

PID值

描述

Token

OUT

0001

Out事务开始

IN

1001

In事务开始

SOF

0101

帧事务开始

SETUP

1101

建立事务开始

Data

DATA0

0011

偶同步位数据包

DATA1

1011

奇同步位数据包(两者总是交错的)

DATA2*

0111

用于高速设备微帧同步传输的数据包,MDATA为切分后的数据包

MDATA*

1111

Handshake

ACK

0010

确认包

NAK

1010

不确认,不能发送或不能接收

STALL

1110

端点挂起,或一个请求不被支持

NYET*

0110

设备接收无响应(实际已确认)

Special

PRE

1100

仅用于低速,启动低速设备数据传输

ERR*

1100

以高速总线传送全速或低速事务时切分事务出错的握手

SPLIT*

1000

以高速总线传送全速或低速事务时切分事务

PING*

0100

主机询问设备是否有空间接收数据


4、包格式



5、事务(Transaction)
   1)、以标记包开始完成一个单一动作的包的集合
   2)、USB上的数据传输由各种类型的事务组成
   3)、所有的事务均由主机发起,设备只能应答
   4)、事务通常由请求包开始,以握手包结束,但同步传输中没有握手包
   5)、根据请求包类型,事务也被分为帧、建立、IN、OUT四种大类型
   6)、在高速设备中还有PING事务(只包含一个PING包和一个握手包),在高速总线上使用低速传输时,一个事务可以被SPLIT包拆分

6、帧事务
   1)、一个帧事务只有一个SOF包
   2)、USB总线连接建立开始即由主机产生帧事务
   3)、帧事务以每1ms(FS)/125us(HS)一次的额定速率产生
   4)、一个SOF包中含有一个从USB总线连接建立起顺序递增的帧号
   5)、SOF事务不产生任何数据流传输和任何返回
   6)、SOF事务不保证设备可以接收到
   7)、SOF事务用于逻辑端点产生独立时间片


7、建立事务
   1)、一个建立事务由一个SETUP请求包,一个八字节长度DATA0包和一个握手包组成
   2)、建立事务只能以ACK握手
   3)、ACK握手后,进入空闲


8、IN事务
   1)、一个IN事务从IN请求包开始,表明主机要求设备产生数据
   2)、如果要求的IN事务中的数据包不止一个,则必须以DATA0包和DATA1包交替(奇校验位和偶校验位交替)
   3)、IN事务可以没有握手包,若是有握手,以NAK、或STALL握手则提前结束事务。
   4)、若以数据传送正确,则以ACK包握手
   5)、IN事务不能以NYET握手


9、OUT事务
   1)、一个OUT事务从OUT请求包开始,表明主机将要产生数据
   2)、如果要求的OUT事务中的数据包不止一个,则必须以DATA0包和DATA1包交替(奇校验位和偶校验位交替)
   3)、OUT事务可以没有握手包,若是有握手,以NAK、或STALL握手则提前结束事务。
   4)、若以数据正确,则以ACK包或NYET包握手,高速设备推荐以NYET握手


10、PING事务
    1)、一个PING事务从PING包开始,表明主机询问设备是否有应答
    2)、PING事务必须握手
    3)、若设备不能应答则以NAK握手,设备错误或端点挂起则以STALL握手,设备能应答则以ACK握手。

注:此讲义在此后将忽略PING事务,在高速USB传输中,OUT事务前一搬都会有不间断的PING事务,直到PING事务以ACK握手,OUT事务才产生



11、传输(Transfer)
    1)、传输由各种事务构成,具有方向特性
    2)、每个端点的传输类型在端点设置时就被固定下来了
    3)、四种传输类型:控制、同步、中断、批量
    4)、控制传输
         a)、所有的USB设备都需要控制传输
         b)、某些型号的USB-KEY
    5)、同步传输
         USB话筒
    6)、中断传输
         USB鼠标、键盘
    7)、批量传输
         U盘

12、控制传输
    1)、控制传输至少有建立和状态两个阶段,并根据需要可能拥有数据阶段
    2)、建立事务中的数据内容决定是否有数据阶段,数据阶段为一个带握手的IN事务或OUT事务,一次控制传输中的数据阶段不能即有IN事务又有OUT事务
    3)、如果一次控制传输中数据阶段为IN事务则此次控制传输为上行,如果为OUT事务则为下行
    4)、状态阶段为一个和数据阶段相反的事务,若没有数据阶段则状态阶段为一个IN事务
    5)、状态阶段的DATA包数据长度为0,且必为DATA1包



13、同步传输
    1)、一次同步传输只有一个没有握手包的IN事务或OUT事务
    2)、IN事务同步传输为上行,OUT事务同步传输为下行
    3)、同步传输由帧事务决定时间片,但帧事务并不是同步传输的一部分
    4)、同步传输中的DATA包不用DATA0和DATA1交替,而是全以DATA0包传输。



14、中断传输
    1)、一次中断传输只有一个IN事务或OUT事务,该事务可以有握手也可以不握手
    2)、IN事务为上行,OUT事务为下行
    3)、中断条件生成则主机产生OUT或IN请求包



15、批量传输
    1)、一次批量传输可以有一个或多个IN事务或OUT事务
    2)、一次批量传输不能即有IN事务又有OUT事务
    3)、由IN事务组成的批量传输为上行,由OUT事务组成的批量传输为上行
    4)、在一个IN或OUT事务若以ACK握手则表示可以开始下一个事务,若以NAK握手则重传这次事务,若以STALL握手,则传输被停止,需要软件干预解除状态
    5)、若数据出错可以没有任何握手,主机会重新生成该次事务
    6)、批量传输的数据负载量由具体传输协议定义



16、批量传输与中断传输的差异
    1)、中断传输数据量小(一次一个事务),批量传输数据量大(一次多个事务)
    2)、中断传输有固定的数据长度,批量传输则是一个范围

17、同步传输与中断传输的异同
    1)、中断传输强调触发条件,同步传输强调实时(可以理解为帧数是唯一触发条件)
    2)、中断传输数据量小,同步传输数据量较大
    3)、中断传输和同步传输都有固定的数据长度,但中断传输的数据长度由端点配置决定,同步传输则完全固定
    4)、中断传输可以靠具体传输协议来处理数据错误及通道STALL的状态,而同步传输不行

18、USB设备状态


1)、设备连接
     USB协议不定义设备离开总线的行为
2)、设备加电
     USB设备即可自供电也可由总线供电,USB设备在自供电时不一定处于加电状态,必须由总线的VBUS供电时才是加电状态
3)、复位
     a、USB设备上电后必须收到主机的复位请求后才开始响应USB总线上的请求
     b、在复位后USB设备使用默认设备地址
4)、地址分配
     主机给USB分配一个地址后,设备将以分配的地址响应
5)、设备配置
     USB设备接收到配置请求后,按照设备、接口、端点描述符的信息配置设备功能
6)、设备挂起
     USB设备在一定周期内和总线没发生数据交换则进入挂起状态

19、USB总线枚举过程
1)、Hub通知主机有USB设备连接到USB总线上
2)、主机通过查询Hub获得设备信息(设备在哪个端口)
3)、主机等待100ms,待供电稳定后向设备发送复位请求
4)、主机通过设备端点0为设备分配一个地址(Set Address)
5)、主机通过设备端点0向设备依次发送获取设备、配置、字符串标准描述符请求(Get Descriptor)
6)、主机根据设备的配置信息向设备发送配置请求(Set Config)
7)、主机根据获得的设备类型调用适合的驱动开始与设备正常通信

20、枚举请求
1)、在总线枚举时,请求是主机通过设备的端点0以控制传输方式进行的
2)、USB总线标准请求的格式被封装在控制传输的建立事务的DATA0包中(通常我们所说的“SETUP包”,但是这个说法并不准确)
3)、一个请求格式包含6个字段共8个字节

偏移

字段

长度

值类型

作用

0

bmRequestType

1

位图

请求特征(方向、种类、对象)

1

bRequest

1

具体请求

2

wValue

2

值型参数

4

wIndex

2

索引

索引或偏移型参数

6

wLength

2

数据阶段长度


功能

bmRequestType

bRequest

wValue

wIndex

wLength

数据要求

分配地址

00H

05H

地址

0

0

获取设备描述符

80H

06H

01H

0

描述符长度

IN,设备描述符

获取配置描述符

80H

06H

02H

0

描述符长度

IN,配置描述符+接口描述符+端点描述符(可选)

获取字符串描述符

80H

06H

03H

指定的字符串索引

字符串描述符长度

IN,指定的字符串描述符

配置设备

00H

09H

配置值

0

0

设置设备特性

00H

03H

特性值

0

0

设置接口特性

01H

03H

特性值

接口号

0

设置端点特性

02H

03H

特性值

端点号

0



21、设备描述符
1)、设备描述符描述USB设备的一般信息
2)、一个物理意义上的USB设备只能有一个设备描述符
3)、设备描述符传递的关键信息包括
     a、设备的缺省控制传输通道的最大包长
     b、设备的类型
     c、设备使用的协议
     d、PID/VID
     e、其他用于描述设备的关键字符串的索引
4)、设备类型和协议可以不在设备描述符中指出,而在接口描述符中指出,对于可能由多个接口的设备,在接口描述符中指出设备类型和协议是更好的选择
5)、设备描述符包含14个字段,共18字节:

偏移

字段

长度

类型

描述

0

bLengh

1

常量

描述符自身的长度(12H)

1

bDescriptorType

1

常量

描述符类型(01H)

2

bcdUSB

2

BCD码

USB版本号(USB2.0取{00H,02H})

4

bDeviceClass

1

00H:接口指定

01H~FEH:标准定义的设备类型

FFH:厂商自定义设备类型

5

bDeviceSubClass

1

若设备类型为0,则此字段必须为0

6

bDevicePortocol

1

00H:接口指定

01H~FEH:标准定义的协议

FFH:厂商自定义协议

7

bMaxPacketSize0

1

缺省通道最大包长,即端点0最大包长(8、16、32、64)

8

idVendor

2

BCD码

VID(合法VID值必须由USB-IF授权)

10

idProduct

2

BCD码

PID(厂商自订)

12

bcdDevice

2

BCD码

设备发型号

14

iManufacturer

1

索引

描述厂商信息的字符串描述符索引

15

iProduct

1

索引

描述产品信息的字符串描述符索引

16

iSerialNumber

1

索引

产品序列号字符串描述符索引

17

bNumConfigurations

1

可能拥有的配置描述符数量


22、配置描述符
1)、一个设备可以有多种配置,配置描述符中的bConfiguration Value字段和配置设备请求中的相应字段匹配即可
2)、配置描述符必须和其后的接口描述符、端点描述符(如果有的话)合并在一起构成一个设备配置
3)、设备、配置、接口、端点四个概念有如下关系:
     a、一个设备有一个或多个配置
     b、每个配置有一个或多个接口
     c、每个接口有零个或多个端点
     d、在同一配置下,一个端点不会在多个接口间共享
     e、在两个配置下的端点可以复用
     f、一次枚举,设备只能按一个配置描述,可以通过软件或硬件手段在配置间切换后重新枚举
4)、配置描述符包含8个字段,共9个字节:

偏移

字段

长度

类型

描述

0

bLengh

1

常量

描述符自身的长度(09H)

1

bDescriptorType

1

常量

描述符类型(02H)

2

wTotalLength

2

配置信息总长度(包括配置、接口、端点、类描述符)

4

bNumberInterface

1

此配置支持的接口个数

5

bConfigurationValue

1

与设备配置请求中选定该配置的值相同

6

iConfiguration

1

索引

描述该配置的字符串描述符索引

7

bmAttributes

1

位图

配置特性:

可配置在此配置下的设备是否为自供电;是否可远程唤醒主机

8

MaxPower

1

该值乘以2的结果为在此配置下设备的耗电量。



23、接口描述符
1)、一个接口可能拥有多个可选的设置
2)、在同一个接口的不同设置下,端点可复用
3)、一个接口描述符可以通过SetInterface请求来切换其可选设置
4)、接口描述符中提到的端点个数,是指此接口用到的除了端点0以外的端点个数
5)、配置描述符包含9个字段,共9个字节:

偏移

字段

长度

类型

描述

0

bLengh

1

常量

描述符自身的长度(09H)

1

bDescriptorType

1

常量

描述符类型(04H)

2

iInterfaceNumber

1

索引

该接口在该配置中的索引(该配置中的第一个接口该值为0,该配置中的第二个接口该值为1…)

3

iAlternateSetting

1

索引

当前接口所使用的设置索引(当前接口若使用第一种设置该值为0;第二种设置该值为1…)

4

bNumberEndpoints

1

该接口所使用的非零端点数量

5

bInterfaceClass

1

该接口的类型

0:保留

1~254:USB定义的接口类型(8:MassStrorage、3:HID)

255:厂商自定义

6

bInterfaceSubClass

1

子类型

该值在不同的bInterfaceClass中有不同定义(6:SCSI、4:UFI)

7

bInterfaceProtocol

1

协议类型,该值在不同的bInterfaceClass中有不同定义(50H:Bulk Only、0:CBI)

8

iInterface

1

索引

描述此接口的字符串描述符索引值



24、端点描述符
1)、端点描述符用于描述接口中使用端点的类型及带宽需求
2)、端点0不需要描述
3)、一个接口描述符后面接着该接口需要的端点描述符,然后才是下一个接口的描述符
4)、端点描述符包含6个字段,共7个字节:

偏移

字段

长度

类型

描述

0

bLengh

1

常量

描述符自身的长度(07H)

1

bDescriptorType

1

常量

描述符类型(05H)

2

bmEndpointAddr

1

位图

Bit3~0:端点号(0~15)

Bit6~4:保留(0)

Bit7:方向(控制传输类型的端点此处忽略)

Out:0

In:1

3

bmAttributes

1

位图

Bit0、1表示传输类型:

00=控制传输

01=同步传输

10=批量传输

11=中断传输

其他位全保留

4

wMaxPacketSize

2

对于中断、控制、批量传输,该字段表述该端点下传输的最大数据包的大小;

对于同步传输该字段为每次传输的数据净负荷预留时间

6

bInterval

1

中断、同步传输:两次请求包的帧数间隔,同步必须为1,中断可取1~255

控制、批量传输:忽略



25、字符串描述符
1)、除索引0外,其他字符串描述符是可有可无的
2)、之前所提到的描述符中的某个字符串如果没有的话,将索引写0即可
3)、字符串描述符中的字符串必须采用UNICODE编码
4)、字符串描述符支持多国语言,索引号为0的字符串专门描述USB设备所支持的语言

偏移

字段

长度

类型

描述

0

bLengh

1

描述符自身的长度(2x + 2, x为支持的语言数)

1

bDescriptorType

1

常量

描述符类型(03H)

2

wLANGID[0]

2

语言ID

4

wLANGID[1]

2

语言ID

6

2x+ 2

wLANGID[x]

2

语言ID



有兴趣的朋友请登录 www.usb.org 下载最新版本协议,了解 USB 最新动态。
















原文地址:https://www.cnblogs.com/james1207/p/3313165.html