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

USB2.0 数据包DATA0,DATA1,DATA2

2021-06-22 6133 0

数据包是用于传输数据的,由8位的包标识PID,数据字段和16位的循环冗余校验字段CRC组成。
数据包格式

  • PID字段:用于指明不同的数据包类型。支持 4 种数据包,分别为: DATA0 、 DATA1 、DATA2 和MDATA。 在介绍的数据触发机制中,使用 DATA0 和 DATA1。
    • SPLIT 令牌事务处理则使用DATA0,DATA1和MDATA。
    • 对于高速 USB 同步数据传输,一般需要使用全部。
  • 数据字段:其中包含了传输的数据。其数据的大小根据数据传输类吧和用户需要而定。
    • 根据 USB 协议的规定,对于低速 USB 数据传输, 最大长度为8字节
    • 对于全速USB 数据传输,其最大长度为 1023 字节;
    • 对于高速 USB 数据传输,数据最大长度为 1024 。
  • CR 字段:这里使用 16 位的循环冗余校验来对数据字段进行保护。

数据包标识PID

包标识PID由8位组成,低4位是类型字段,高4位为低四位的补码。

PID 含义 说明 十六进制
0011 数据DATA0 数据包偶数包 0xc3
1011 数据DATA1 数据为奇数据包 0xd2
0111 数据DATA2 此为作为一个高速同步事务的专用数据包 0xe1

数据包抓包示例

在USB高速同步传输过程中,通过抓包DATA0,DATA1,DATA2事务是交替进行数据传递的。
数据包

DATA的使用技术讨论

以下内容来自QQ USB技术交流群(733863085)的技术讨论,并且以下内容的转载得到了群主XToolbox的同意。

感谢USB技术交流群(733863085)各位大佬的技术分享。

qianfan 2021/8/26 8:35:23
XToolbox 大佬, 咨询个问题, bulk in传输的时候, 有要求相邻的两包的要切换DATA0和DATA1吗?

qianfan 2021/8/26 8:35:51
我现在有个芯片, IN一直使用DATA0发送, 主机这边只认第一包, 后续的就不认了

XToolbox 2021/8/26 9:51:35
主机遇到翻转错误会丢弃错误的这一包

XToolbox 2021/8/26 9:53:48
从机的in端点在收到主机的ack后,需要翻转标志。如果一直发data0,主机会认为从机没有收到ack

qianfan 2021/8/26 9:55:23
哈, 明白了, 我写从机程序搞错了, 意外的把从机的toggle标志清掉了, 导致每次in的时候都是用data0

spu 2021/8/26 9:56:28
从机是收到ack再翻转还是发送中断一到就翻转

XToolbox 2021/8/26 9:59:11
一般的从机内核会在收到主机的ack之后才触发发送完成中断。就算想在发送完就翻转也没有机会

spu 2021/8/26 9:59:30
Soga

XToolbox 2021/8/26 9:59:39
高速的从机内核会自动翻转

spu 2021/8/26 10:00:15
自动翻转会不会存在问题

XToolbox 2021/8/26 10:00:44
不会,自动翻转也是收到ack才翻

spu 2021/8/26 10:01:12
好的

XToolbox 2021/8/26 10:04:01
根据标准,有时候要重置翻转标志,所以从机内核还会提供一套手动翻转的接口。

qianfan 2021/8/26 10:26:04
好像是clear stall的时候需要重置

qianfan 2021/8/26 10:26:11
重置之后使用data0

XToolbox 2021/8/26 10:36:39
同步传输控制传输比较特殊,翻转标志起点是固定

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
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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