USB通信协议深入理解

0. 基本概念一个【传输】(控制、批量、中断、等时):由多个【事务】组成;
一个【事务】(IN、OUT、SETUP):由一多个【Packet】组成 。
USB数据在【主机软件】与【USB设备特定的端点】间被传输 。【主机软件】与【USB设备特定的端点】间的关联叫做【pipes】 。一个USB设备可以有多个管道(pipes) 。
1. 包(Packet)包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的 。数据在 USB总线上的传输以包为单位,包只能在帧内传输 。高速USB 总线的帧周期为125us,全速以及低速 USB 总线的帧周期为 1ms 。帧的起始由一个特定的包(SOF 包)表示,帧尾为 EOF 。EOF不是一个包,而是一种电平状态,EOF期间不允许有数据传输 。
注意:虽然高速USB总线和全速/低速USB总线的帧周期不一样,但是SOF包中帧编号的增加速度是一样的,因为在高速USB系统中,SOF包中帧编号实际上取得是计数器的高11位,最低三位作为微帧编号没有使用,因此其帧编号的增加周期也为 1mS

  • USB总线上的情形是怎样的?

USB通信协议深入理解

文章插图
 
包是USB总线上数据传输的最小单位,不能被打断或干扰,否则会引发错误 。若干个数据包组成一次事务传输,一次事务传输也不能打断,属于一次事务传输的几个包必须连续,不能跨帧完成 。一次传输由一次到多次事务传输构成,可以跨帧完成 。
USB包由五部分组成,即同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP),包的基本格式如下图:
USB通信协议深入理解

文章插图
 
1.1 PID类型(即包类型)
USB通信协议深入理解

文章插图
 

USB通信协议深入理解

文章插图
 
1.2 Token Packets
USB通信协议深入理解

文章插图
 
此格式适用于IN、OUT、SETUP、PING 。
PID 数据传输方向
IN Device->Host
OUT Host->Device
SETUP Host->Device
PING Device->Host
1.3 Start-of-Frame(SOF) PacketsSOF包由Host发送给Device 。
  1. 对于full-speed总线,每隔1.00 ms ±0.0005 ms发送一次;
  2. 对于high-speed总线,每隔125 μs ±0.0625 μs发送一次;
SOF包构成如下图所示
USB通信协议深入理解

文章插图
 

USB通信协议深入理解

文章插图
 
1.4 Data Packets
USB通信协议深入理解

文章插图
 
有四种类类型的数据包:DATA0, DATA1, DATA2,and MDATA,且由PID来区分 。DATA0和DATA1被定义为支持数据切换同步(data toggle synchronization) 。
1.5 Handshake Packets
USB通信协议深入理解

文章插图
 
  • ACK: 对于IN事务,它将由host发出;对于OUT、SETUP和PING事务,它将由device发出 。
  • NAK: 在数据阶段,对于IN事务,它将由device发出;在握手阶段,对于OUT和PING事务,它也将由device发出;host从不发送NAK包 。
2. 事务(Transaction)在USB上数据信息的一次接收或发送的处理过程称为事务处理(Transaction)即:The delivery of service to an endpoint 。一个事务由一系统packet组成,具体由哪些packet组成,它取决于具体的事务 。可能由如下包组成:
  • 一个token packet
  • 可选的data pcket
  • 可选的handshake packet
  • 可选的special packet
2.1 输入(IN)事务处理输入事务处理:表示USB主机从总线上的某个USB设备接收一个数据包的过程 。
  • 【正常】的输入事务处理

USB通信协议深入理解

文章插图
 
  • 【设备忙】时的输入事务处理

USB通信协议深入理解

文章插图
 
  • 【设备出错】时的输入事务处理

USB通信协议深入理解

文章插图
 
2.2. 输出(OUT)事务处理输出事务处理:表示USB主机把一个数据包输出到总线上的某个USB设备接收的过程 。