USB通信基础知识

举报
心跳包 发表于 2021/11/13 01:15:55 2021/11/13
【摘要】 1 USB系统组成   主机:提供USB接口和接口管理功能的硬件、软件、固件的复合体。PC机或OTG设备,一个USB系统只能有一个主机   设备:1.集线器HUB:扩展主机接口,设备可以通过其接入主机  2.功能设备   物理连接:即USB电缆,USB使用差分信号传输数据,全速/高速模式电缆...

1 USB系统组成

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

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

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

2 USB拓扑结构

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

3 USB系统程序

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

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

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

4 USB速度选择

 

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

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

5 USB信号描述

  

  差分信号: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在逻辑上被分为三层:信号层、协议层、数据传输层。

 

6.2 信号层

6.2.1设备速度的检测

6.2.2 信号的编码

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

数据状态 D+ D-
低速J状态 0 1
低速K状态 1 0

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

 

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

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

6.3 协议层

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

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

  

6.3.1 包标识符(PID)

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

                                                      (LSB)                                             (MSB)

PID0 PID1 PID2 PID3

   包标识符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 地址段

  

                              LSB                                  MSB

Addr0 Addr1 Addr2 Addr3 Addr4 Addr5 Addr6

                                                                                                                                                                                    设备地址

                                        LSB               MSB                 +

Endp0 Endp1 Endp2 Endp3

                                                                                                                                                                                    端点地址

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

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

6.3.3 数据段

    

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

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

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

  

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

6.3.4 CRC校验段

  

      令牌包(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类型

  

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

  

                               例子: 

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设备只有一个设备描述符。

  

  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 配置描述符

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

  

 

6.6.1.3 接口描述符

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

  

6.6.1.4 端点描述符

  

6.6.1.5 字符串描述符

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

  

6.7 EXAMPLE FOR DESCRIPTOR

  

 

文章来源: xintiaobao.blog.csdn.net,作者:心跳包,版权归原作者所有,如需转载,请联系作者。

原文链接:xintiaobao.blog.csdn.net/article/details/115457822

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。