USB封包中的数据域类型
不同的封包类型,含有不同数量与形态的数据域。以下依序介绍各种数据域的规范与结构。而通过不同形态的数据域的组成,即可构成所要的封包类型。
封包内所包含的信息数据位于1~3 074字节之间。第1个字节总是封包标识符(PID),用来定义其余的信息字节所要表达的意义。而封包的最后一部分,则是封包结束EOP(End-of-Packet)标识符。
但应注意,USB的串行传输是先送出最低位LSB,然后再依序送出,直到最高位MSB为止,如图1所示。而PID[0:3]与PID[0:3]的意义稍后会再加以解释。
图1 封包格式
首先,介绍第一个,也是每一种封包都含有的数据域:同步列数据域。
1.同步列(Synchronization Sequence,SYNC)数据域
SYNC字段由8位组成,作为每一个数据封包的前导,用来产生同步,将会起始PLL。因此,它的数值固定为:00000001。这个字段仅可以在闲置时,作传输之用。封包的起始是由总线从J状态转换成K状态的变化所产生设置的。大部分的传送过程是由传送器在下一个可用的位时间所驱动的,并用来产生一个SYNC序列。而另一端的接收器即可利用此序列,将其所接收到时钟与所接收到的数据传输过程,两者加以调和,如此即可确保封包的信息部分是可靠地接收到。这个SYNC序列以2个K状态来结束,且在下一个位时间,开始传递封包的信息。
此外,若针对高速传输,SYNC序列将会由PC主机所产生,且其中包含了09位的SYNC(KJ KJKJ…KJKK)。虽然这些SYNC序列将会由于集线器的阻隔而消耗若干信号,但在最后末端的设备至少可以收到12位SYNC序列。而这已足够去锁住接收的时钟,并用来产生PLL。但对低速/全速的设备来说,仅需使用8位SYNC序列。
2.封包标识符(Packet Identifier,PID)数据域
PID字段紧随在SYNC字段后面,用来表示数据封包的类型。PID字段由一个4位的标识符栏以及一个互为补码的检查栏组成。在表3,2中,列出了封包的类型,其可分为令牌、数据、握手或特殊等4种封包类型。这4种类型可由PID[0:1]2个位来定义。此外,在每一种的封包类型中,还可通过PID[2:3]2个位来定义出不同的封包格式。例如,在令牌封包中,又可细分为OUT、IN、SETUP与SOF等4种封包格式。如此,可推类至其余的封包类型。但在2.0规范中,新增了几个封包标识符,其中,数据封包类型新添了DATA2与DATA3两个封包标识符。
表 各种封包的类型与规范
续表
评论