您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > usb2.0 协议层 (中文版)
USB2.0协议第八章协议层这章从字段和包的定义开始,从底向上地展示万用串列总线协议。接着是对不同事务类型的包事务格式的描述。然后是链路层流程控制和事务级的故障恢复。本章的昀后将讨论复执同步化的恢复和高速网络侦测协议的同步,超时干扰,总线活动丧失。8.1位定序数据位被发送到总线的时候,首先昀低有效位(LSb),跟着是下一个昀低有效位,昀后是昀高有效位(MSb)。在以后图表中的,包以下列形式给出,即包中单个的位和字段从左到右的顺序就是它们通过总线的顺序。8.2同步字段所有的包都从同步(同步)字段开始的,同步字段是产生昀大的边缘转换密度的编码序列。同步字段被输入电路用来以本地时钟对齐输入数据。对于全速/低速模式,昀初的同步被定义为8字节的长度,而对于高速模式则定义为32字节的长度。正如第七章描述的那样,标准的同步字段可以更加简短。同步字段是用于同步的机制,在以后图表当中将不被表示(参照节7.1.10)。同步字段里的昀后2位是同步字段结束的记号,并且标志了包标识符(PID,)的开始。8.3包字段格式在后面几节将描述标记,数据和握手包的字段格式。包中位的定义是以未编码的数据格式给出。为了清楚起见,在此不考虑NRZI编码和位填充的影响。开始--小包的)和包结束分隔符的所有包都分别有包开始。包开始分隔符是同步字段的一部分,而包结束(EOP)分隔符在第7章有所描述。8.3.1包标识符字段所有万用串列总线包的同步字段后都紧跟着包标识符(PID)。如图8-1所示,包标识符由4位的包类型字段和其后的4位的校验字段构成。包标识符指出了包的类型,并由此隐含地指出了包的格式和包上所用错误检测的类型。包标识符的4位的校验字段可以保证包标识符译码的可靠性,这样包的余项也就能被正确地解释。包标识符的校验字段通过对包类型字段的二进制的求反码产生的。如果4个PID检验位不是它们的各自包标识符位的补,则说明存在PID错。图8-1PID格式主机和所有功能部件都必须对得到全部PID字段实行完整的译码。任何收到包标识符,如果含有失败的校验字段,或者经译码得到未定义的值,则该包标识符被假定是1被损坏的,而且包的余项将被包接收机忽略。如果一个功能部件收到了包含了它所不支持的事务类型或方向的合法包标识符,则不必应答。例如,只能输入的端口(IN-onlyEndpoint)必须忽略输出标记。表8-1列出了包标识符类型,编码及其描述。表8-1PID类型PID类型PID名PID[3:0]描述标记(表征)出自)的输()的输入(帧开始(SOF)建立(装备)0001B1001B0101B1101B在主机到功能部件的事务中有地址+端口号在功能部件到主机的事务中有地址+端口号帧开始标记和帧号在主机到功能部件建立一个控制管道的事务中有地址+端口号数据(数据)数据0(DATA0)数据1(DATA1)数据2(DATA2)MDATA0011B1011B0111B1111B偶数据包PID奇数据包PID高速宽带同步传输帧数据包PID(更多内容请参见5.9.2章节部分)高速宽带分段传输数据包PID(更多内容请参见5.9.2,11.20和11.21章节部分)握手(Handshake)确认(ACK)不确认(NAK)停止(STALL)无回应(NYET)0010B1010B1110B0110B接收器收到无措数据包;接收设备部不能接收数据,或发送设备不能发送数据;端口挂起,或一个控制管道请求不被支持。尚未从接收者获得回应。(更多内容请参见8.5.1和11.17-11.21章节部分)2专用(special)前同步(PRE)报错(ERR)分段(SPLIT)侦测(PING)预留(Reserved)1100B1100B1000B0100B0000B(标记)主机发送的前同步字。打开到低速设备的下行总线通信。(握手)分段传输的差错握手(重新使用PRE量值)(标记)高速分段传输标记(参见8.4.2章节部分)(标记)对bulk/control模式下端口的高速数据流控制侦测(参见8.5.1章节部分)预留PID*注解:PID位以昀高位在前的顺序被表示。在万用串列总线上被发送的时候,昀右的位(位0)将被第一个发出。包标识符被分为4个编码组:标记,数据,握手和专用。包标识符传送的前2位(PID0:1)指出了其属于哪个组。这说明包标识符编码的分布。8.3.2地址字段功能部件端口使用2个字段:功能部件地址字段和端口字段。功能部件对地址和端口字段都需要进行译码。不允许使用地址或端口别名(Aliasing),并且任何一个字段不匹配,此标记都必须被忽略。另外,对未初始化的端口访问将使得标记被忽略。8.3.2.1地址字段功能部件地址(ADDR)字段通过其地址指定功能部件,至于是数据包的发出地还是目的地,则取决于标记PID的值。如图8-2所示,ADDR6:0指定了总共128个地址。地址字段被用于输入,建立和输出标记。由定义可知,每个ADDR值都定义了单一的功能部件。刚一复位和加电的时候,功能部件的地址默认值为零,并且必须由主机在枚举过程中编程。功能部件地址零被用作为缺省地址,不可被分配作任何别的用途。图8-2地址字段8.3.2.2端口字段如图8-3所示,附加的4位的端口(ENDP)字段在功能部件需要一个以上端口时候允许更灵活的寻址。除了端口地址0之外,端口个数是由功能部件决定的。端口字段只对输入,建立和输出标记PID有定义。所有的功能部件都必须在端口0提供一个控制管道(缺省控制管道)。对于低速设备,每个功能部件昀多提供3个管道:3在端口0的控制管道加上2个附加管道(或是2个控制管道,或是1个控制管道和1个中断端口,或是2个中断端口)。全速功能部件可以支持昀多可达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型。对于每个被发送或者被收到的数据位,当前余项的昀高一位和数据位进行异或(XOR),然后,余项是左移1位,并且,昀低一位置零。如果异或的结果是1,余项和生成多项式作异或。当检查的字段昀后的一位被发送的时候,发生器里的CRC被颠倒,再以昀高位(MSb)在前发给检验器。当检验器收到CRC的昀后一位,且不发生错误的时候,余项将等于多项式的剩余。如果剩余与包接收器中昀后计算出的检验和余项不匹配,则存在CRC误差。对于CRC,必须满足位填充的要求,且如果前6位都是1的话,这包括在CRC的昀后插入零,。8.3.5.1标记CRC标记使用了5位的CRC字段,它覆盖了输入,建立和输出标记的ADDR和ENDP字段,或SOF标记的时间戳字段。生成多项式如下:4这个多项式的二进制位组合是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指定了包是输入,输出还是建立类型。而PING特殊标记包也有相同的构成结构。对于输出和建立事务,地址和端口字段唯一地确定了接下来将收到数据包的端口。对于输入事务的,这些字段唯一地确定了哪个端口应该传送数据包。对于PING处理环节,这些字段唯一地确定了发送数据包的端口。只有主机能发出标记包。输入PID定义了从功能部件到主机的数据事务。输出和建立PID定义了从主机到功能部件的数据事务。侦测PID定义了从功能部件到主机的握手处理环节。图8-5标记包格式如上图所示,标记包包括了覆盖地址和端口字段的5位CRC。CRC并不覆盖PID,因为它有自己的校验字段。标记和帧开始(SOF)包是由小包)界定的3个个字节的包字段数据后面的包结束(EOP,结束。如果包被译码为合法标记或SOF,但却没有在3个字节之后以EOP终止,则它被认为是无效的,并被接收器忽略。8.4.2数据分割特殊标记包USB为数据分割传输定义了特殊的标记:SPLIT。与其他普通的三字节标记包不同,这是一个四字节的标记包。数据分割传输标记包提供了携带额外特殊传输信息的更多的传输字节。数据分割传输标记用来支持主机控制器与处于高速运转状态的集线器之间5数据分割传输,而这一高速运转是集线器的下行端口与全速/低速设备之间进行的。有两种数据分割传输被规定使用SPLIT特殊标记:始端数据分割传输(SSPLIT)和末端数据分割传输(CSPLIT)。如下面的章节所述,数据分割传输特殊标记的字段表明了特殊的数据分割传输。8.4.2.1数据分割传输高速数据分割传输仅仅用于主机与连有全速/低速设备的集线器之间的传输。这种高速数据分割传输用来通过集线器和一些全速/低速设备端口初始化全速/低速传输。高速数据分割传输也允许重新从集线器获得全速/低速传输的完成状态。这一方式允许主机控制器先通过高速传输开始全速/低速传输,再继续其他高速传输而无需等待全速/低速传输以较慢速度进行或完成。关于状态机制和数据分割传输等待传输定义的更多细节请见第11章节。高速数据分割传输有两个部分:始端数据分割传输和末端数据分割传输。数据分割传输仅被定义用来完成主机控制器和集线器之间的传输。没有其他高速、全速/低速设备使用数据分割传输。图8-6显示了组成一般始端数据分割传输的信息包。状态标记有两个信息包:SSPLIT标记和全速/低速标记。状态标记有选择地跟随一个信息包或者一个握手包,这取决于数据传输的指令以及与传输类型的握手是否被定义。始端数据分割传输可以2个、3个或4个信息包,这取决于特定的传输类型和数据指令。图8-6始端数据分割传输的信息包图8-7显示了组成一般末端数据分割传输的信息包。状态标记有两个信息包:SSPLIT标记和全速/低速标记。状态标记有选择地跟随一个信息包或者一个握手包,这取决于数据传输的指令以及与传输类型的握手是否被定义。末端数据分割传输可以2个或3个信息包,这取决于特定的传输类型和数据指令。图8-7末端数据分割传输的信息包6数据分割传输的结果是由末端数据分割传输返回的。图8-8用一个中断IN传输的例子说明了这一概念上的会话。主机先向集线器发出一个开始片段(用1表示),再就可以进行其他高速传输。一段时间后,开始片段使得集线器发出一个全速/低速IN标记(用2表示)。设备用一个数据包回应IN标记(在这个例子中),集线器用一个握手回应设备。昀后,再过一段时间后,主机发出一个末端片段(用3表示)以再次获得设备提供的数据。在例子中请注意:在末端片段以前集线器向设备端口提供了全速/低速握手(在这个例子中是ACK),而末端片段向集线器提供的不是高速握手。图8-8中断IN传输与数据分割传输的关系常规的全速/低速OUT传输同样在概念上“转换”为始端分割传输和末端分割传输。图8-9以中断传输为例说明
本文标题:usb2.0 协议层 (中文版)
链接地址:https://www.777doc.com/doc-7066704 .html