您的位置 首页 基础

USB学习系列之四——USB包结构

1USB的数据传输以包为单位,一个包被分成不同的域。USB传输时使用的是LSB在前,MSB在后的方式。2不同的包所包含的域是不同的,但是都有共

1.USB的数据传输以包为单位,一个包被分红不同的域。USB传输时运用的是LSB在前,MSB在后的方法。

2.不同的包所包括的域是不同的,可是都有一起的特点是:以同步域开端,紧跟着一个包标识符PID,终究以包完毕符EOP完毕这个包。

3.同步域:高速USB串行接口引擎数据传输要开端了,一起也供给同步时钟。关于低速设备和全速设备,同步域运用的是0000 0001(二进制数);关于高速设备运用的是00000000 00000000 00000000 00000001。

留意:这个是对发送端的要求,接纳端解码时,0的个数可以少于这个数目。

4.包完毕符:包完毕符一共有8位,其间USB协议运用的只要4位(PID0~PID3),别的4位(PID4~PID7)是前四位的取反,用来校验PID。USB协议规则了四类包,分别是:令牌包(PID1~PID0为01)、数据包(PID1~PID0为11)、握手包(PID1~PID0为10)和特别包(PID1~PID0为00)。以下为USB2.0协议的包,带*的为USB1.1协议没有的:

5.令牌包:令牌包用来发动一次USB传输。主机发送一个令牌来告诉哪个设备进行呼应,怎么呼应。

输入令牌包:用来告诉设备即将输出一个数据包。

输出令牌包:用来告诉设备回来一个数据包。

树立令牌包:只用在操控传输中,告诉设备输出一个数据包,树立令牌包后只运用DATA0数据包,且只能发送到设备的操控端点,并且设备必需求接纳,而输出令牌包没有这些约束。

帧开始包:在每帧开端时发送,以播送的方式发送。USB全速设备没毫秒产生一个帧,高速设备每125微秒产生一个帧。USB主机会对当时的帧号进行计数,在每次帧开端时经过SOF包发送帧号(或许微帧开端时,每毫秒有八个微帧,这8个微帧的帧号是相同的)。SOF中的帧号是11位。
留意:在4个令牌包中,只要SOF令牌包之后不能跟数据传输,其他的都有数据传输。每个令牌包之后都有一个CRC5的校验,它只校验PID之后的数据,不包括PID自身,因为PID自身的后4位现已有取反的校验机制了。

因为SOF令牌包之后不跟从数据传递,所以SOF令牌包和其他三种包的结构不同,详细如下图所示:

SOF令牌包结构

IN、OUT、SETUP令牌包结构图

6.数据包

USB1.1中只要DATA0和DATA1两种数据包。

USB2.0中添加了DATA2和MDATA两种数据包,这两种数据包首要用在高速割裂事物和高速高带宽同步传输中。

数据包的共同结构:同步域 + 8位包标志PID + 整数字节数据 + CRC16校验 + EOP。

之所以有不同类型的数据包,是用在握手包犯错时纠错。详细解说如下:

主机和设备都会保护自己的一个数据包类型切换机制:当数据包成功发送或许接纳时,数据包类型切换。当检测到对方所运用的数据包类型不对时,USB体系以为这产生了一个过错,并企图从过错中康复。数据包类型不匹配首要产生在握手包被损坏的时分。当一端现已正确接纳到数据并且回来承认信号后,承认信号在传输进程中被损坏。这时另一端就无法知道方才发送的数据是否现已发送成功,这时只好持续坚持自己的数据包类型不变。假如对方下一次运用的数据包类型跟自己的不共同,则阐明它刚刚现已成功接纳到数据包;假如对方下一次运用的数据包跟自己的共同,则阐明对方没有切换数据包类型,也便是刚刚的数据包没有发送成功,这是上一次的重试操作。

7.握手包

握手包用来表明一个传输是否被对方承认。

握手包的结构:同步域 +包标识符PID + EOP。

握手包有ACK、NAK、STALL和NYET。

ACK:表明正确接纳数据,并且有满足的空间来包容数据。主机和设备都可以用ACK来承认,而NAK、STALL和NYET只要设备可以回来,主机不能运用这些握手包。

NAK:表明没有数据需求回来,或许数据正确接纳可是没有满足的空间来包容。当主机接纳到NAK时,知道设备还没有预备好,主机会在今后适宜的实践进行重试传输。

STALL:表明设备无法履行这个恳求,或许端点现已被挂起,它表明一种过错的状况,设备回来STALL之后,需求主机进行干涉才干免除这种STALL状况。

NYET:只要在USB2.0高速设备输出事物中运用,它表明设备本次数据成功接纳,可是没有满足的空间来接纳下一次数据。主机鄙人一次输出数据时,将先运用PING命令牌包来勘探设备是否有满足的空间接纳数据,一面不必要的带宽糟蹋。

留意:NAK并不表明数据犯错,当USB主机或许设备检测到数据犯错时,将什么都不回来,这时等候接纳握手包的一方就会收不到握手包然后等候超时。

8.特别包

特别包是在一些特别场合运用的包。总共有四种:PRE、ERR、SPLIT和PING。其间PRE、SPLIT、PING是令牌包,ERR是握手包。ERR、SPLIT、PING三个是在USB2.0协议中添加的。

(1)PRE:告诉集线器翻开其低速端口的一种前导包,PRE只能运用在全速形式中。一般情况下集线器不会将全速信号发送给低速设备,只要当接纳到PRE令牌包之后,才翻开其低速端口。

PRE令牌包结构:同步域 +PID +EOP。

当需求传送低速业务时,主机首要发送一个PRE令牌包(以全速形式发送)。关于全速设备,将会疏忽这个令牌包。集线器在接纳到这个令牌包之后,翻开其连接了低速设备的端口,接着主机就会以低速形式给低速设备发送令牌包和数据包等。

(2)PING:令牌包结构同OUT令牌包。可是PING令牌包后不发送数据,而是等候设备回来ACK或许NAK,以判别设备是否可以传送数据。在USB2.0中的高速环境中才会运用PING令牌包,且只被运用在批量传输和操控传输业务中。

(3)SPLIT:高速业务割裂令牌包,告诉集线器将高速数据包转化为全速或许低速数据包发送给其下面的端口。

(4)ERR:在割裂业务中表明过错运用。高速割裂业务的进程比较复杂,并且首要是由集线器完结,所以不详细阐明。

9.数据包的处理

一般的USB接口芯片都会完结如CRC校验、位填充、PID辨认、数据包切换、握手等协议的处理。当USB接口芯片正确接纳到数据时,入股偶有空间保存,则它将数据保存并回来ACK,一起,设置一个标志表明现已正确接纳到数据;假如没有空间保存数据,则会主动回来NAK。

收到输入恳求时,假如有数据需求发送,则发送数据,并等候接纳ACK。只要当数据成功发送出去之后,才设置标志位,表明数据现已成功发送;假如没有数据需求发送,则它主动回来NAK。

一般只需求根据芯片供给的一些标志,预备需求发送的数据到端点,或许从端点读取接纳到的数据即可。所要发送和接纳的数据指的是数据包中的数据,至于同步域、包标识、地址、端点、CRC等是看不到的,在BUSHound中抓到数据也是如此,仅是数据包;并且在BUSHound中只能看到成功传输的数据,即只要ACK承认过的数据包。因为操控传输比较特别,SETUP包也会有相应的标志供咱们运用。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/235103.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部