协议层技术讲义字段Field和包Packet文档格式.docx
- 文档编号:12949484
- 上传时间:2022-10-01
- 格式:DOCX
- 页数:22
- 大小:140.48KB
协议层技术讲义字段Field和包Packet文档格式.docx
《协议层技术讲义字段Field和包Packet文档格式.docx》由会员分享,可在线阅读,更多相关《协议层技术讲义字段Field和包Packet文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
所有的包都分别有包开始(Start-of-Packet)和包结束(End-of-Packet)分隔符。
包开始(SOP)分隔符是同步字段的一部分,而包结束(EOP)分隔符在第7章有所描述。
8.3.1包标识符字段
所有USB包的同步字段后都紧跟着包标识符(PID)。
如图8-1所示,包标识符由4位的包类型字段和其后的4位的校验字段构成。
包标识符指出了包的类型,并由此隐含地指出了包的格式和包上所用错误检测的类型。
包标识符的4位的校验字段可以保证包标识符译码的可靠性,这样包的余项也就能被正确地解释。
包标识符的校验字段通过对包类型字段的二进制的求反码产生的。
如果4个PID检验位不是它们的各自的包标识符位的补,则说明存在PID错。
图8-1PID格式
主机和所有功能部件都必须对得到全部PID字段实行完整的译码。
任何收到包标识符,如果含有失败的校验字段,或者经译码得到未定义的值,则该包标识符被假定是被损坏的,而且包的余项将被包接收机忽略(Ignore)。
如果一个功能部件(Function)收到了包含了它所不支持的事务类型或方向的合法包标识符,则不必应答。
例如,只能输入的端口(IN-onlyEndpoint)必须忽略输出标记(Token)。
表8-1列出了包标识符类型,编码及其描述。
表8-1PID类型
PID类型
PID名
PID[3:
0]
描述
标记
(Token)
输出(OUT)
输入(IN)
帧开始(SOF)
建立(SETUP)
0001B
1001B
0101B
1101B
在主机到功能部件的事务中有地址+端口号
在功能部件到主机的事务中有地址+端口号
帧开始标记和帧号
在主机到功能部件建立一个控制管道的事务中有地址+端口号
数据
(DATA)
数据0(DATA0)
数据1(DATA1)
0011B
1011B
偶数据包PID
奇数据包PID
握手(Handshake)
确认(ACK)
不确认(NAK)
停止(STALL)
0010B
1010B
1110B
接收器收到无措数据包;
接收设备部不能接收数据,或发送设备不能发送数据;
端口挂起,或一个控制管道请求不被支持。
专用
(Special)
前同步(PRE)
1100B
主机发送的前同步字。
打开到低速设备的下行总线通信。
*注解:
PID位以最高位在前的顺序被表示。
在USB上被发送的时候,最右的位(位0)将被第一个发出。
包标识符被分为4个编码组:
标记,数据,握手和专用。
包标识符传送的前2位(PID<
0:
1>
)指出了其属于哪个组。
这说明包标识符编码的分布。
8.3.2地址字段
功能部件端口使用2个字段:
功能部件地址字段和端口字段。
功能部件对地址和端口字段都需要进行译码。
不允许使用地址或端口别名(Aliasing),并且任何一个字段不匹配,此标记都必须被忽略。
另外,对未初始化的端口的访问将使得标记被忽略。
8.3.2.1地址字段
功能部件地址(ADDR)字段通过其地址指定功能部件,至于是数据包的发出地还是目的地,则取决于标记PID的值。
如图8-2所示,ADDR<
6:
0>
指定了总共128个地址。
地址字段被用于输入,建立和输出标记。
由定义可知,每个ADDR值都定义了单一的功能部件。
刚一复位(Reset)和加电(Power-up)的时候,功能部件的地址默认值为零,并且必须由主机在枚举过程(EnumerationProcess)中编程。
功能部件地址零被用作为缺省地址,不可被分配作任何别的用途。
图8-2地址字段
8.3.2.2端口字段
如图8-3所示,附加的4位的端口(ENDP)字段在功能部件需要一个以上端口时候允许更灵活的寻址。
除了端口地址0之外,端口个数是由功能部件决定的。
端口字段只对输入,建立和输出标记PID有定义。
所有的功能部件都必须在端口0提供一个控制管道(缺省控制管道)。
对于低速(LowSpeed)设备,每个功能部件最多提供3个管道:
在端口0的控制管道加上2个附加管道(或是2个控制管道,或是1个控制管道和1个中断端口,或是2个中断端口)。
全速(FullSpeed)功能部件可以支持最多可达16个的任何类型的端口。
图8-3端口字段
8.3.3帧号字段
帧号字段是一个11位的字段,主机每过一帧就将其内容加一。
帧号字段达到其最大值7FFH时归零,且它仅每个帧最初时刻在SOF标记中被发送。
8.3.4数据字段
数据字段可以在0到1,023字节之间变动,但必须是整数个字节。
图8-4为多字节显示格式。
每个字节的范围内的数据位移出时都是最低位(LSb)在前。
图8-4数据字段格式
如同在第5章所描述的那样,数据包大小随着传送类型而变化。
8.3.5循环冗余校验
循环冗余校验(CRC)被用来在标记和数据包中保护所有的非PID字段。
在上下文中,这些字段被认为是保护字段。
PID不在含有CRC的包的CRC校验范围内。
在位填充之前,在发送器中所有的CRC都由它们的各自的字段产生。
同样地,在填充位被去除之后,CRC在接收器中被译码。
标记和数据包的CRC可100%判断单位错和双位错。
失败的CRC指出了保护字段中至少有一个字段被损坏,并导致接收器忽略那些字段,且在大部分情况下忽略整个包。
为了CRC的发生和校检,发生器和检验器里的移位寄存器置成为全1(All-ones)型。
对于每个被发送或者被收到的数据位,当前余项的最高一位和数据位进行异或(XOR),然后,余项是左移1位,并且,最低一位置零。
如果异或的结果是1,余项和生成多项式作异或。
当检查的字段的最后的一位被发送的时候,发生器里的CRC被颠倒,再以最高位(MSb)在前发给检验器。
当检验器收到CRC的最后的一位,且不发生错误的时候,余项将等于多项式的的剩余。
如果剩余与包接收器中最后计算出的检验和余项(Checksumremainder)不匹配,则存在CRC误差。
对于CRC,必须满足位填充的要求,且如果前6位都是1的话,这包括在CRC的最后插入零,。
8.3.5.1标记CRC
标记使用了5位的CRC字段,它覆盖了输入,建立和输出标记的ADDR和ENDP字段,或SOF标记的时间戳字段。
生成多项式如下:
这个多项式的二进制位组合是00101B。
如果所有的标记位都被准确无误地收到,接收机中的5位剩余将是01100B。
8.3.5.2数据CRC
数据CRC是作用于数据包的数据字段上的16位多项式。
产生的多项式是如下
这个多项式的二进制位组合是1000000000000101B。
如果全部的数据和CRC位被准确无误地收到,16位剩余将是1000000000001101B。
8.4包格式
这节展示标记,数据和握手包的包格式。
这些图将以位被挪动到总线上的顺序显示包内的字段。
8.4.1标记包
图8-5显示了标记包的字段格式。
标记由PID,ADDR和ENDP构成,其中PID指定了包是输入,输出还是建立类型。
对于输出和建立事务,地址和端口字段唯一地确定了接下来将收到数据包的端口。
对于输入事务的,这些字段唯一地确定了哪个端口应该传送数据包。
只有主机能发出标记包。
输入PID定义了从功能部件到主机的数据事务。
输出和建立PID定义了从主机到功能部件的数据事务。
图8-5标记包格式
如上图所示,标记包包括了覆盖地址和端口字段的5位CRC。
CRC并不覆盖PID,因为它有自己的校验字段。
标记和帧开始(SOF)包是由3个字节的包字段数据后面的包结束(EOP,EndofPacket)界定的。
如果包被译码为合法标记或SOF,但却没有在3个字节之后以EOP终止,则它被认为是无效的,并被接收器忽略。
8.4.2帧开始(SOF,Start-of-Frame)包
主机以每1.00ms±
0.0005ms一次的额定速率发出帧开始(SOF)包。
如图8-6中所示,SOF包是由指示包类型的PID和其后的11位的帧号字段构成。
图8-6帧开始包
SOF标记组成了仅有标记的(token-only)事务,它以相对于每帧的开始精确计算的时间间隔发送SOF记号(Marker)和伴随的帧数。
包括集线器的所有全速功能部件都可收到SOF包。
SOF标记不会使得接收功能部件产生返回包;
因此,不能保证向任何给定的功能部件发送的SOF都能被收到。
SOF包发送2个时间调配(Timing)信息。
当功能部件探测到SOF的PID的时候,它被告知发生SOF。
对帧时间敏感而不需要追踪帧数(例如集线器)的功能部件,仅需对SOF的PID译码;
可忽略帧数和其CRC。
如果功能部件需要追踪帧数,它必须对PID和时间戳都进行译码。
对总线时间调配信息的没有特别需要的全速设备可以忽略SOF包。
8.4.3数据包
如图8-7所示,数据包由PID,包括至少0个字节数据的数据区和CRC构成。
有2种类型的数据包,根据不同的PID:
DATA0和DATA1来识别。
2种数据包PID是为了支持数据切换同步(DataToggleSynchronization)(在第8.6节提到)而定义的。
图8-7数据包格式
数据必须以整数的字节数发出。
数据CRC仅通过对包中的数据字段计算而得到,而不包括PID,它有自己的校验字段。
8.4.4握手包
如图8-8所示,握手包仅由PID构成。
握手包用来报告数据事务的状态,能还在表示数据成功接收,命令的接收或拒绝,流控制(FlowControl)和停止(Halt)条件。
只有支持流控制的事务类型才能返回握手信号。
握手总是在事务的握手时相(Phase)中被返回,也可在数据时相代替数据被返回。
握手包由1个字节的包字段后的EOP确定界限。
如果包被解读为合法的的握手信号,但没有以1个字节后面的EOP终止,则它被认为是无效的,且被接收机忽略。
图8-8握手包
有3种类型的握手包:
●ACK表示数据包没有位填充或数据字段上的CRC错,并且数据PID被正确收到。
ACK在下列的情况下被发放,当时序位(SequenceBit)匹配且接收器能接受数据的时候,或者当时序位失配,但发送方和接收器互相之间必须再同步(Resynchronize)(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 协议层 技术讲义 字段Field和包Packet 协议 技术 讲义 字段 Field Packet
![提示](https://static.bdocx.com/images/bang_tan.gif)