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两个封包标识符。
表 各种封包的类型与规范
续表
3.地址(Address,ADDR)数据域
ADDR数据域由7位组成,可用来寻址出达127个外围设各。当然每一个设各仅能对应一个唯一的地址,而每当新的外围设各刚连接至USB接口时,拥有预设的地址0,其后再赋予新的地址。也因此,27-1(预设地址)=127外围设备。
4.端点(Endpoint,EN!)P)数据域
ENDP数据域由4位组成,之前有提及过,端点是类似微管线的概念。通过这4位,可以定义出高达16个端点。但基本上,只使用15个端点。而通过端点描述符的设置,则最多可寻址出30个端点。这个ENDP数据域仅用在IN、OUT与SETUP令牌封包中。对于低速的设各可支持端点0以及端点1作为中断传输模式(如CY7C63O/iXX微控制器系列),而全速设各则可以拥有15个输人端点(IN)与15个输出端点(OUT)共30个端点。Cypress USB微控制器的CY7C64213与CY7C64313系列则最多可支持31个端点(另外包含一个端点0)。
5.循环冗余检验(Cycle Redundancy Checks,CRC)数据域
根据不同的封包类型,CRC数据域由不同数目的位组成。其中,最重要的数据封包采用CRC16的数据域(16位),而其余的封包类型则采用CRC5的数据域(5位)。其中的的循环冗余检验CRC,是一种用来做数据错误检测的技术。这是由于数据在做串行传输时,有时候会发生若干错误。因此,CRC可根据数据算出一个检验值,然后依此判断数据的正确性。
通过前面所介绍的5个数据域,即可构成了大部分的封包类型,而以下再介绍其余特殊的数据域。
6.数据(data)栏
仅存于Data封包内,而根据不同的传输类型,拥有不同的字节大小,从0~1 024字节(仅能在等时传输时设置
- 基于引言DSP平台的USB接口设计(11-30)
- 低成本USB接口密钥的设计方法(12-21)
- USB接口类型(12-15)
- C#实现USB接口的程序代码(12-14)
- USB接口的基础理论知识(12-14)
- USB接口标准及常用USB接口(12-13)