系列文章目录
USB简介之三
USB数据流
本部分讨论USB数据包。
一、USB数据包概述
数据包可以被认为是USB数据传输的最小单元。每个数据包以当前传输速率传输一段整数字节数的数据。在数据包之前和之后,总线处于空闲状态。
除非您在芯片级别进行设计,否则您无需担心同步、位填充和数据包结束条件的细节,因为串行接口引擎 (SIE) 将为您处理上述细节。您应该知道 SIE 可以识别数据包的开始和结束,并且数据包包含整数字节。
尽管如此,数据包通常期望数据字段跨越字节边界。要记住的重要规则是,所有 USB 字段都首先传输最低有效位LSB。因此,例如,如果一个字段由 2 个连续的字节定义,则第一个字节将是最低字节,而传输的第二个字节将是最高字节。
数据包以同步数据开头,以允许接收器位时钟与数据同步。紧随其后的是数据包的数据字节,并以数据包结束 (EOP) 信号结束。数据实际上是 NRZI 编码的,为了确保足够频繁的转换,在 6 个连续的 1 之后插入一个零(这称为位填充)。
二、USB数据包格式
每个数据包中的第一个字节是数据包标识符 (PID) 字节。SIE需要快速识别此字节,因此不包含在任何CRC检查中。因此,它有自己的有效性检查。PID 本身的长度为 4 位,这 4 位以反码形式重复。
定义了 17 个不同的 PID 值。这包括一个保留值,以及一个在两种不同情况下使用过两次且含义不同的值。
有四种不同的数据包格式,具体取决于数据包以哪个 PID 开头。
- 令牌数据包
用于 SETUP、OUT 和 IN 数据包。它们始终是事务中的第一个数据包,用于标识目标端点和事务的目的。
令牌数据包包含两个寻址元素:
ADDR(7bits) - 此设备地址最多可以寻址 127 个设备。地址 0 保留给尚未设置其地址的设备。
ENDP(4bits) - 设备中每个方向最多可以有 16 个可能的终结点。方向隐含在 PID 中。OUT 和 SETUP PID 将引用 OUT 端点,而 IN PID 将引用 IN 端点。