USB 事务处理是主机和设备之间数据传输的根本单位,由一系列具有特定格式的信息包组
成。因此,要了解完整的 USB 通信协议,必需从 USB 的信息传输单元包及其数据域谈起。
通过由下而上,从简洁至简洁的通信协议单位组成各种简洁的通信协议,进而构建出完整
的通信协议。
16.4.1
包
包〔Packet〕是 USB 系统中信息传输的根本单元,全部数据都是经过打包后在总线上传输
的。首先了解一下包的组成。
USB 包由五局部组成,即同步〔SYNC〕字段、包标识符〔PID〕字段、数据字段、循环冗
余校验〔CRC〕字段和包结尾〔EOP〕字段,包的根本格式如下:
同步字段〔SYNC〕 PID 字段 数据字段 CRC 字段 包结尾字段〔EOP〕
在 USB 的数据传输中,全部的传输包都起始于SYNC,接着是 PID,后面是包中所包含的
数据信息,接下来是用来检测包中数据错误的循环冗余校验信息,最终以包结尾作为完毕
标志。下面我们将一一介绍每个字段。
1.
同步〔SYNC〕字段
SYNC 字段由 8 位组成,作为每个数据信息包的前导。顾名思义,它是用来产生同步作用
的,目的是使 USB 设备与总线的包传输率同步,它的数值固定为00000001。
2.
包标识符〔PID〕字段
PID 字段是紧随在 SYNC 字段后面,用来表示数据信息包的类型。在USB 协议中,依据
PID 的不同,USB 包有着不同的类型,分别表示具有特定的意义。如下所示:
PID0 PID1 PID2 PID3
包标识符长度为一个字节〔8 个数据位〕,由 4 个位的包类型字段和 4 个位的校验字段构
成。PID 是 USB 包类型的唯一标志,USB 主机和 USB 设备在接收到包后,必需首先对包标
识符解码得到包的类型,并推断其意义从而做出下一个反响。包标识符中的校验字段是通
过对类型字段的每个位求反码产生的,它是用来对包类型字段进展错误检测用的,旨在保
证对包的标识符译码的牢靠性,假设4 个检验位不是它们各自的类型位的反码,则说明标
识符中的信息有错误。
表 16-2 中列出了信息包的类型,包括令牌、数据、握手或特别四种信息包类型。为简化对
USB 的生疏,有关高速传输的局部没有在表中列出。
3.
数据字段
在 USB 包中,数据字段是用来携带主机与设备之间要传递的信息,其内容和长度依据包标
识符、传输类型的不同而各不一样。并非全部的USB 包都必需有数据字段,例如握手包、
专用包和 SOF 令牌包就没有数据字段。在 USB 包中,数据字段可以包含设备地址、端点号
、帧序列号以及数据等内容。在总线传输中,总是首先传输字节的最低位,最终传输字 节
的最高位。
(1)
设备地址〔ADDR〕数据域
ADDR 数据域由 7 位组成,可用来寻址多达 127 个外围设备。
(2)
端点〔ENDP〕数据域
ENDP 数据域由 4 位组成。通过这 4 个位最多可寻址出 32 个端点。这个 ENDP 数据域仅用