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

USB2.0 OUT事务

2021-11-30 2260 20

OUT事务和其它事务一样,也包含三个包,分别为OUT令牌包,数据包(输出)和握手包(成功时为ACK)。
OUT事务用于由USB主机发送数据,所以在数据包之前发送为的OUT令牌包,

  • 如果USB设备确认数据正确无误的接收时,给主机返回ACK握手包。
  • 如果USB设备由于其自身资源不足(如内存)等自身原因无法接收该数据时,给主机返回NAK握手包。
  • 如果USB设备虽然收到了该数据,但是数据的端点已经被停止(HALT),则给主机返回STALL握手包。
  • 如果OUT令牌包或者数据包发生错误,USB设备不做任何握手包。
  • 高速模式下的设备在批量传输或者控制传输时,如果成功接收到了该包但无法接收下一个数据时,给主机返回NYET握手包。
  • 如果USB主机收不到USB设备返回的任何握手包,USB主机会等待一段时间直到超时,重传该OUT事务。
  • 如果设备工作在低速或者全速模式下,USB设备返回NAK握手包,USB主机会进行OUT事务重传,如果设备工作在高速模式下,USB主机会使用高速模式特有的PING事务。

  • OUT事务的数据长度不能大于端点所支持的最大包长度(超过时使用多事务传输)

OUT事务

OUT事务的处理机制

USB2.0 OUT事务的处理机制如图所示:
OUT事务的处理机制

  • 无论是OUT令牌或者是数据包在发向主机的传输过程中,如果出现发送错误或者超时,USB设备均不向主机返回任保握手包。
  • 当USB主机发送OUT令牌和数据包后,在规定的超时时间内并没有收到设备返回的握手ACK时,则重传该事务。、

握手包三种状态:

  • ACK:表示数据已经正确无误的收到
  • STALL:表示数据端点已经被停止(HALT)
  • NAK:表示当前数据包无法收到。高速模式下主机使用PING事务来判断是否可以继续接收数据,低速或全速则重传该事务。
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设备枚举-主机设置设备地址事务
USB主机在首次获取设备描述符后,知道了设备的默认端点大小。后续一个重要的操作是对设备分配地址。对USB设备分配地址是通过标准请求SetAddress来完成后。其具体的过程如下图所示:SetAddress包括2个事务。第一个事务是对主机设置地址,第二个事务是主机对设备返加一个0字节的数据包,用于确......
USB2.0 OUT令牌
USB2.0 OUT令牌用于主机向设备发送数据,令牌后跟数据包,当数据发送完成后设备需返回ACK包。OUT令牌包格式OUT令牌包格式由8位的包标识字段PID,7位的地址字段ADDR、4位的段点字段和5位的循环字段CRC共24位3字节组成。包标识字段PID:定义了数据传输方向为USB主机到USB......
USB2.0设备枚举-获取设备描述符事务
USB设备与主机进行数据传输或进行设备配置时,有一些常见的术语如事务令牌,包等。USB设备在枚举过程中有2次获取设备描述符的过程,这里分别标识为首次获取设备描述符和分配地址后的获取描述符。两次获取描述符的过程基本类似,惟一的区别是首次首次获取描述符由于设备尚未分配地址,故使用地址0与主机进行通......
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时,集线器......
HID主条目input item、output item和feature item详解
HID的main条目按数据相关性可分为两种:与数据相关的 input、output、featureinput item、output item和feature item描述由一个或多个物理控件提供的数据的信息。 应用程序可以使用此信息来解释设备提供的数据。 单个item中定义的所有数据字段共享......
Linux对hidraw设备output report大小的限制
做了个自定义HID设备,可以收发数据,用它来作固件升级。主要是host通过output report下发固件数据,所以output report的size设置的比较大,有4kb,这样升级速度会快一些。经过测试在Windows xp、win7,win10上都木有问题,在linux上出现问题了。设......
USB数据长度为0的DATA/IN事务
前言使用BUSHOUND是抓不到这种包的。而且一些令牌包如SOF等这些是统计不到的。BUSHOUND是一个基本windows过滤驱动的,所以抓到的是数据已经传输的并且已经在主机方面的,所以USB总线上的一些状态是统计不到的。其实关于控制传输的0字节长度,可详见:USB2.0 控制传输数据包PID序......
USB 高速设备微帧计算及事务构成
从USB2.0规范协议中可以知道,高速设备在1ms内会有8个微帧,所以每个微帧约125us,而一个微帧内可以有多个事务。一个微帧是由起始帧SOF开始的,到下一个起始帧SOF结束或该微帧内的结速帧EOF结束。对于一个微帧内的SOF,SYNC和EOF,此为数据链路层的,一般我们关注的是里面的包内容,协议......
USB键盘在Linux环境下一直返回NAK的输入端点和一直OUT数据的输出端点
群里有同学反馈,自己做的USB键盘在Windows下正常,但在Linux下就失败,想让帮忙分析一下原因。一个比较好的消息是他那边有USB总线分析仪,所以只需要抓包就可以进行分析了。最好开他给的抓包截图是样子的:从它的截图可以看到,USB键盘在获取了该键盘的HID报告描述符后,紧跟着一下发Report......
USB2.0 设备配置SET_CONFIGURATION传输及事务分析
USB2.0 设备配置SET_CONFIGURATION传输包含两个事务事务38由SETUP令牌,DATA0数据和ACK事务组成。可以看到该SETUP事务由主机发送给设备,设备返回ACK表示接收成功。对于事务39,有一个IN事务,分别为IN令牌,DATA1和ACK,用于对上一个事务的数据确认。......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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