1 USB系统组成

  主机:提供USB接口和接口管理功能的硬件、软件、固件的复合体。PC机或OTG设备,一个USB系统只能有一个主机

  设备:1.集线器HUB:扩展主机接口,设备可以通过其接入主机  2.功能设备

  物理连接:即USB电缆,USB使用差分信号传输数据,全速/高速模式电缆必须外层屏蔽铜质传输线,且差分数据线双绞。一条USB的传输线分别由地线、电源线、D+、D-四条线构成,D+、D-是差分输入线,使用的是3.3V电压,而电源线与地线可向设备提供5V电压,最大电流500mA。

2 USB拓扑结构

USB通信基础知识_描述符

  每个系统只允许有一个HOST(主机)。允许的最大层数为6层(出去主机);每层的电缆最大长度为5米,电缆总长度为30米;每层最大允许接5个DEVICE(设备);

3 USB系统程序

  1. 应用程序:应用程序运行与USB设备所连接的主机上。部分应用程序会由操作系统的主机提供,大部分应用程序由USB设备供应商提供。

  2. 驱动程序:驱动程序服务于特定的操作系统,为USB设备提供支持。驱动程序通常由操作系统提供,独立于特定的应用程序和USB设备。

  3. 主机端控制程序:包括硬件和软件,使USB设备能够被主机识别。

4 USB速度选择

USB通信基础知识_数据_02


  全速模式是在D+线上上拉1.5K的电阻。

USB通信基础知识_差分_03

  低速模式是在D-线上上拉1.5K的电阻。

5 USB信号描述

  USB通信基础知识_描述符_04

  差分信号:1:D+ > Voh(2.8V) and D- < Vol(0.3V)

            0:D- > Voh and D+ < Vol

  J状态:   Low Speed  :Differential(差分信号) 0

            Full Speed :Differential(差分信号) 1

  K状态:   Low Speed  :Differential(差分信号) 1

            Full Speed :Differential(差分信号) 0

6 USB协议

6.1 USB基本规范

  USB在逻辑上被分为三层:信号层、协议层、数据传输层。

 USB通信基础知识_差分_05

6.2 信号层

6.2.1设备速度的检测

USB通信基础知识_描述符_06

USB通信基础知识_数据_07

6.2.2 信号的编码

  USB中的数据采用反向不归零编码方式(NRZI:none-return to zero inverted),并对D+和D-线所处的不同状态定义成J和K两种状态。

数据状态

D+

D-

低速J状态

0

1

低速K状态

1

0

 数据的编码/解码(反向不归零码)

 USB通信基础知识_数据_08

  说明:遇到0的边沿进行状态改变,如果是1保持原有状态

  注:在数据进行NRZI编码前,每6个连续的1信号之后都会插入一个0信号,以免丢失同步。

6.3 协议层

  包是USB系统中信息传输的基本单位,所有的数据都是经过打包后再总线上传输的。

  每个包由6部分组成:同步字段(SYNC)、包标识符(PID)、地址字段(ADDR)、数据字段(DATA,包括帧号)、检验字段(CRC)、包结束(EOP)。

  USB通信基础知识_描述符_09

6.3.1 包标识符(PID)

  在USB协议中,USB有很多不同类型的包,通过PID来区分,PID格式如下:

                                                      (LSB)                                             (MSB)

PID0

PID1

PID2

PID3

USB通信基础知识_差分_10

USB通信基础知识_数据_11

USB通信基础知识_数据_12

USB通信基础知识_数据_13

   包标识符PID是用来标识一个包的类型的。它总共有8位,其中USB协议使用的只有4位(PID0~PID3),另外4位(PID4~PID7)是PID0~PID3的取反,用来校验PID。

PID类型

PID名

PID[6:0]

描述


令牌包

(Token)



输出(out)

输入(in)

帧起始(SOF)

建立(setup)



0x87

0x5A

0xA5

0xB4



Hose To Device 包中有地址+端口号

Device To Hose 包中有地址+端口号

Hose To Device 帧开始标记和帧号

Hose To Device 建立一个控制管道的事务 包中有地址+端口号



数据包

(data)



数据(data)

数据1(data1)



0xC3

0xD2



偶数据包(PID)

奇数据包(PID)



握手

(handshake)



确认(ack)

不确认(nack)

停止(stall)



0x4B

0x5A

0x1E



接收器无错的接收数据包

接收设备忙不能接收数据

设备出错通信不上



专用包

(special)


前同步(PRE)

0x2C

主机发送的前同步字。用来区分低速和高速设备

 6.3.2 地址段

USB通信基础知识_描述符_14  

                              LSB                                  MSB

Addr0

Addr1

Addr2

Addr3

Addr4

Addr5

Addr6

                                                                                                                                                                                    设备地址

                                        LSB               MSB                 +

Endp0

Endp1

Endp2

Endp3

                                                                                                                                                                                    端点地址

  低速设备最多支持3个端点

  全速和高速设备最多支持16个IN和OUT端点

6.3.3 数据段

  USB通信基础知识_数据_15  

    1 帧号有11位,主机每发出一个帧,帧号就会自加1;

    2 当帧号达到7FFH时,将归零重新开始计数;

    3 仅在每个SOF帧的帧首传输帧号

  USB通信基础知识_差分_16

    根据传输类型的不同,数据域的数据长度从0到1024字节不等

6.3.4 CRC校验段

  USB通信基础知识_数据_17

      令牌包(token CRC)

      计算SOF Token帧号域的CRC,IN、OUT、SETUP Token地址域的CRC:

              G(X) = X5 + X2 + 1

    DATA CRC

      所以数据域的CRC:

              G(X) = X16 + X15 + X2 +1

6.4 Packet类型

  USB通信基础知识_描述符_18

6.4.1 Token Packet

                                 LSB                            MSB

Field

PID

ADDR

ENDOP

CRC5

Bits

8

7

4

5

                          例子:

SYNC

SETUP

ADDR

ENDP

CRC5

EOP

00000001

0xB4

3

0

0x0A

250.000ns

6.4.2 SOP Packet

                                   LSB                         MSB

Field

PID

Frame number

CRC5

Bits

8

11

5

                                 例子:

SYNC

SOF

Frame #

CRC5

EOP

00000001

0xA5

1611

0x11

250.000ns

  6.4.3 Data Packet

                                 LSB                         MSB

Field

PID

DATA

CRC16

Bits

8

0~1024

16

                                               例子:

SYNC

PID

DATA

CRC16

EOP

00000001

0xC3

80 06 00 01 00 00 12 00

0x072F

250.00ns

6.4.4 Handshake Packet

  USB通信基础知识_数据_19

                               例子: 

SYNC

ACK

EOP

00000001

0x4B

233.330ns

6.5 数据传输层

  USB提供4中传输方式

  控制传输(control transfers):突发,非周期性,由主机发起,用于命令和状态的传输

  同步传输(isochronous transfers):周期性,持续性的传输,用于传输与时效相关的信息,并且在数据中保存时间戳的信息

  中断传输(interrput transfers):周期性,低频率,允许有限延迟的通信

  大容量数据传输(bulk transfers):非周期性,大容量突发数据的通信,数据可以占用任意带宽,并容忍延迟 

6.6 USB枚举过程

  当一个USB设备插入主机后,会有以下活动:

供电

复位

获取device descriptor

复位(可选)

分配地址

获取(device descriptor)

获取(configuration descriptor)

获取(string descriptor)(可选)

配置

6.6.1 USB描述符

  通过一套描述符,USB设备向USB主机描述自己的功能、属性、配置信息等

    标准描述符:

      设备描述符(device descriptor)、配置描述符(configuration descriptor)、接口描述符(interface descriptor)、端点描述符(endpoint descriptor)、字符串描述符(string descriptor)

6.6.1.1 设备描述符

  描述设备的类型、厂商信息、USB的协议类型、端点的包数据的最大长度等,每个USB设备只有一个设备描述符。

  USB通信基础知识_差分_20

  eg:

    Joystick_DeviceDescriptor[]=

    {

      0x12,          //整个descriptor的长度;18个字节

      0x01,          //descriptor类别

      0x00,0x02,     //设备所遵循的USB版本号 USB2.0

      0x00,          //设备所实现的类,由每个接口描述符描述所实现的类

      0x00,          //设备所实现的子类,由每个接口描述符描述

      0x00,          //设备所遵循的协议类别,由每个接口描述符描述

      0x40,          //端点0的最大数据包长度,64个字节

      0x83,0x04,     //供应商ID 0x0483

      0x10,0x57,     //产品ID 0x5710

      0x00,0x02;     //设备版本号 2.0

      1,             //用于描述生成厂商的字符描述符的索引号

      2,             //用于描述产品的字符描述符的索引号

      3,             //用于描述产品序列号的字符描述符的索引号

      0x01           //设备所支持的配置数目

    }

6.6.1.2 配置描述符

  每个配置描述符提供了设备特定的配置,描述了设备的接口和端点的性质、供电模式、设备的耗电

  USB通信基础知识_差分_21


6.6.1.3 接口描述符

  描述了设备不同接口的特性,例如一个设备有U盘的功能又有键盘的功能,用两个接口描述符分别描述两个功能

  USB通信基础知识_差分_22

6.6.1.4 端点描述符

  USB通信基础知识_数据_23

6.6.1.5 字符串描述符

  描述了设备制造商、设备名称、和序列号等信息

  USB通信基础知识_数据_24

6.7 EXAMPLE FOR DESCRIPTOR

  USB通信基础知识_数据_25