USB2.0令牌、事务及传输抓包分析
+ -

USB2.0包Packet的组成

2021-06-30 13330 35

USB包由SOP,SYNC,Packet内容和EOP组成.
USB包

SOP起始包

起始包SOP(Start Of Packet),通过将D +和D-线从空闲状态驱动到相反的逻辑电平(K状态),由始发端口发信号通知分组的开始(SOP)。 此开关级别表示SYNC字段的第一位。 当重新传输到小于±5 ns时,集线器必须限制SOP第一位宽度的变化。 通过将通过集线器的标称数据延迟与集线器的输出使能延迟相匹配,可以最小化失真。
SOP包

SYNC同步域

同步域(SYNC),这个域固定为 0000 0001,这个域通过 NRZI 编码之后,就是一串方波(NRZI 遇 0 翻转遇 1 不变),接受者可以用这个 SYNC 域来同步之后的数据信号。

因为在 USB 的 NRZI 编码下,逻辑 0 会造成电平翻转,所以接受者在接受数据的同时,根据接收到的翻转信号不断调整同步频率,保证数据传输正确。但是,这样还是会有一个问题,就是虽然接受者可以主动和发送者的频率匹配,但是两者之间总会有误差。假如数据信号是 1000 个逻辑 1,经过 USB的 NRZI 编码之后,就是很长一段没有变化的电平,在这种情况下,即使接受者的频率和发送者相差千分之一,就会造成把数据采样成 1001 个或者 999 个1 了。
USB 对这个问题的解决办法,就是强制插 0,也就是传说中的 bit-stuffing,如果要传输的数据中有 7 个连续的 1,发送前就会在第 6 个 1 后面强制插入一个 0,让发送的信号强制出现翻转,从而强制接受者进行频率调整。接受者只要删除 6 个连续 1 之后的 0,就可以恢复原始的数据了.

  • 低速或全速的同步域为00000001
  • 高速的同步域为31个0,后面为一个1。

EOP 结束包(End of Packet)

全速或低速设备的结束包:SE0状态用于发信号通知分组结束(EOP)。 通过将D +和D-驱动到SE0状态两位时间,然后将线路驱动到J状态一位时间来发信号通知EOP。 从SE0到J状态的转换定义了接收器处的分组的结束。 J状态被置位一个位时间,然后D +和D-输出驱动器都处于高阻态。 总线终端电阻将总线保持在空闲状态。
SE0的意思是D+和D-都表示为低电平。
全速或低速设备的结束包

高速设备的EOP:在高速信号中,以从EOP之前的最后一个符号到相反符号的转换开始。这个相反的符号是EOP模式中的第一个符号对于SOF以外的高速数据包。故意生成位填充错误以指示EOP。需要接收器将任何位错误解释为EOP。发送的EOP定界符必须是没有位填充的NRZ字节01111111。例如,如果EOP字段之前的最后一个符号是J,则这将导致EOP为KKKKKKKK。对于高速SOF,传输的EOP分隔符需要5个NRZ字节而不需要填充比特,由01111111 11111111 11111111 11111111 11111111组成。因此,如果EOP字段之前的最后一位是J,这将导致线路上有40个K状态,线路必须返回到高速空闲状态。额外的EOP长度对接收器没有意义,它用于断开检测。

Packet内容

包内容属于协议层,包括的内容大概为PID(包ID),地址,帧号,数据和CRC校验。
Packet内容

PID:
根据PID的内容,包可分为四大类:
Packet分四大类:

  • 命令 (Token) Packet
  • 帧首 (Start of Frame) Packet
  • 数据 (Data) Packet
  • 握手 (Handshake) Packet

地址:
地址包括设备地址和端点地址。其中设备地址占1字节,端点地址占4位。
地址

帧号:

  • 总共11位。主机每发出一个帧
  • 帧号都会自加1
  • 当帧号达到7FFH时,将归零重新开始计数
  • 仅在每个帧的帧首传输一次SOF

数据域
为USB传输的数据。对于不同的USB传输类型,数据域的数据长度从0到1024字节不等。
数据域

CRC校验域:
CRC校验域分为令牌校验域和数据校验域

  • 令牌Token CRC校验域
    计算地址域和帧号域的CRC:G(X) = X5 + X2 + 1

  • Data CRC
    计算数据域数据的CRC: G(X) = X16 + X15 + X2 + 1

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

USB2.0 数据包DATA0,DATA1,DATA2
数据包是用于传输数据的,由8位的包标识PID,数据字段和16位的循环冗余校验字段CRC组成。PID字段:用于指明不同的数据包类型。支持 4 种数据包,分别为: DATA0 、 DATA1 、DATA2 和MDATA。 在介绍的数据触发机制中,使用 DATA0 和 DATA1。SPLIT 令牌事......
USB2.0 SOF令牌
SOF令牌包是最广泛的令牌包,由主机发送。在实机的抓包工具过程,由于和NAK包大量存在,都会在软件配置中不显示。但这并不代表这个SOF令牌包不重要。SOF令牌不需要像其它令牌一样,具有握手包。因此发送给设备的SOF包并不能保证一定会收到。SOF数据流管理由USB主机发送一个SOF令牌包。SOF数据......
USB2.0 IN令牌
令牌IN用于主机接收从USB设备发出的数据,和OUT令牌的数据传输方向相反。IN令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的段点字段和5位的循环字段CRC共24位3字节组成。包标识字段PID:定义了数据传输方向为USB设备到USB主机。ADDR字段:指明了USB设备地址。......
USB2.0 OUT令牌
USB2.0 OUT令牌用于主机向设备发送数据,令牌后跟数据包,当数据发送完成后设备需返回ACK包。OUT令牌包格式OUT令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的段点字段和5位的循环字段CRC共24位3字节组成。包标识字段PID:定义了数据传输方向为USB主机到USB......
USB2.0 SETUP令牌
SETUP令牌包用于主机向USB设备发送配置信息SETUP令牌包结构SETUP令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的端点字段和5位的循环字段CRC共24位3字节组成。包标识字段PID:定义了数据传输方向为USB主机到USB设备。ADDR字段:指明了USB设备地址。E......
USB2.0 PING令牌
PING事务PING事务只有令牌包和握手包。PING事务是USB2.0高速模式特有的,全速模式和低速模式没有。PING事务作用:主机探测设备是否有空间接收数据。PING令牌PIDPING令牌的PID低4位为0100,高4位的补码为1011,故PING令牌的PID为0xB4.PING流程主机发送......
USB2.0包Packet的组成
USB包由SOP,SYNC,Packet内容和EOP组成.SOP起始包起始包SOP(Start Of Packet),通过将D +和D-线从空闲状态驱动到相反的逻辑电平(K状态),由始发端口发信号通知分组的开始(SOP)。 此开关级别表示SYNC字段的第一位。 当重新传输到小于±5 ns时,集线器......
USB数据长度为0的DATA/IN事务
前言使用BUSHOUND是抓不到这种包的。而且一些令牌包如SOF等这些是统计不到的。BUSHOUND是一个基本windows过滤驱动的,所以抓到的是数据已经传输的并且已经在主机方面的,所以USB总线上的一些状态是统计不到的。其实关于控制传输的0字节长度,可详见:USB2.0 控制传输数据包PID序......
USB2.0 令牌
令牌包全部由USB主机发出,其内容包括包标识PID,包目标地址ADDR,包目标地址(ENDP)和CRC5校验位域。令牌包指明了后续数据包的目标地址和端点。令牌包的PID有:PID含义说明0001令牌OUT主机发送数据到USB设备1001令牌IN主机接收从USB设备......
USB2.0 Setup事务
Setup事务是由SETUP令牌,数据包和握手包组成的。一个成功的Setup事务保证了Setup令牌和数据包传输的可靠传输。Setup事务是由主机到设备的,并且如果Setup事务含有数据包,必须使用DATA0包。有数据包的SETUP事务可见下图。此SETUP事务使用SETUP令牌包(0xB4)......
USB2.0 OUT事务
OUT事务和其它事务一样,也包含三个包,分别为OUT令牌包,数据包(输出)和握手包(成功时为ACK)。OUT事务用于由USB主机发送数据,所以在数据包之前发送为的OUT令牌包,如果USB设备确认数据正确无误的接收时,给主机返回ACK握手包。如果USB设备由于其自身资源不足(如内存)等自身原因无法......
USB2.0 SPLIT令牌
SPLIT令牌用于从高速模式到低速和全速模式的转换。对于如下图所示设备连接图:当低速或者全速设备连接到高速HUB主机或者高速HUB上时,使用SPLIT令牌实现高速命令到低速或者全速命令的转换。SPLIT令牌分为SSplit(Start Split)令牌和CSplit(Complte Split)令......
USB2.0全速设备使用逻辑分析仪抓取IN令牌包分析SOP/SYNC/PID/EOP
发在B站上的录制的视频 2.USB2.0包Packet的组成-SOP SYNC EOP的解析其中下面有一条评论,询问 站长,也就是说SOP/SYNC/EOP是物理层的,用分析仪都抓不到是吧?这个我在下面也回答了,是可以抓取到的,只不过对于我们进行包分析,意义不大,因为我们的关注点已经不在那里了。刚......
USB事务跨帧SOF的问题
USB中文网技术交流群有同学发了一个USB抓包截图,并提出了一个问题:控制传输的一个事务内的包不在一帧内传输会有问题吗, 比如我发一个setup包,下面会有一个IN package和一个OUT package,结果IN和OUT package不和SETUP package在一个帧内发送或者接收到,这......
IN令牌包的设备端事务响应流程
USB主机发送IN令牌给设备后,用于请求设备的数据包。USB设备端收到主机发送过来的PID为IN的令牌包后,需要对IN令牌包进行数据校验。如果IN令牌包中的设备地址和端点地址信息有效,并且端点缓冲区中有待发送的数据(端点状态为Valid状态),这时USB设备端的硬件自动使用DTAT0或DATA......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!