包(Packet)是USB系统中信息传输的基本单元,所有的数据都是经过打包后在总线上传输的。USB系统采用反向不归零(NRZI)编码方式,采用位填充方式(Bit-Stuff)避免同步漂移。 1 包的组成 USB包由5部分组成,即同步字段(Synchronization Sequence,简称SYNC)、包标识符(PID,Packet Identification)字段、数据字段、CRC校验字段和包结尾(End Of Packet,EOP)。任何类型的USB包都必须以同步字段作为起始,其编码为00000001,字段最后两位是同步字段结束的记号,标志着包标识符的开始;在USB协议中,根据包标识PID的不同,包类型也不同,是USB包的必须组成部分。PID包的长度为8位,其中低四位为包标识类型编码,高4位是对类型字段的每一位求反码产生的自校验码。数据字段用来携带主机与设备之间要传递的信息,其内容和长度根据包标识、传输类型的不同而各不相同,可以包含设备地址、端点号、帧序列号以及数据等内容。USB主机通过唯一的设备地址与总线上的USB设备进行数据传输,地址由bit0~bit6共7位组成,最多可以连接127个设备。USB设备的每个功能部件最多可以支持16个端点号,其中端点0必须被用作控制传输端点。当PID为SOF时,其数据字段必须为11位的帧序列号,帧序列号由USB主机产生,自动加一,最大数值为0x7FF。当PID为DATA0或者DATA1时,可发送0~1023之间任意长度数据。CRC校验字段对数据采用CRC16校验,对USB令牌包采用CRC5校验。 2 包的类型 这里详细介绍四种类型的包:令牌包、数据包、握手包和专用包。 令牌包:在USB系统中,所有的事务处理都起始于令牌包,它是由USB主机惟一的发送到总线上的。在数据传输的过程中,由USB主机发出令牌包,指明本次事务处理过程的含义,包括数据的传输方向、数据传输的设备地址和端点号。根据PID的不同,令牌包又分为起始令牌包(SOF)、输入令牌包(IN)、输出令牌包(OUT)和用于控制传输的设置令牌包(Setup)。对于SOF包,数据字段为11位序列号,对于IN/OUT/SETUP令牌包,数据字段由7位设备地址和4位端点号组成。 数据包:这种包有两种类型,即DATA0和DATA1,其中DATA0标示奇数包,DATA1标示偶数包,这是为了避免因出错而带来的数据重传问题。 握手包:握手包主要用来报告事务处理过程中接收方的状态,它没有数据字段和CRC字段,只有同步字段和标示符字段来表示传输状态。握手包分为ACK、NAK和STALL。其中ACK表示数据的接收方正确地接收到了数据包,对于输入事务处理,ACK由USB设备返回,而对于输出或者控制传输的设置阶段等事务处理过程,ACK由USB设备返回。NAK表示USB设备不能从USB主机接收数据,主要用于流量控制。这和网络中的NAK是不同的。这里的NAK不是表示出错。NAK智能由下游设备传向上游主机,主机只接收NAK。STALL表示由于USB设备内部问题不能发送或者接收数据,或者不支持某个控制命令。 前导包:是为了使系统区分全速传输和低速传输而产生的,它的目的是为了提醒USB集线器系统要传输的下一个包是一个低速包。USB1.1支持两种传输速率:12Mb/s和1.5Mb/s。 |
文章评论(0条评论)
登录后参与讨论