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

USB2.0 IN/OUT事务NAK的数据翻转(DATA TOGGLE)

2021-12-06 1680 0

NAK由USB设备发送,用于表示设备当前无法接收数据或者无数据发送给主机。
USB设备返回NAK握手包给主机后,USB主机会重传该事务,而对于高速OUT事务,会使用PING令牌来PING设备是否可以接收数据。

USB主机不会发送NAK握手包给设备。

IN事务DATA0/DATA1 NAK的数据翻转

如我们看到两个IN事务,1276和1277事务。
160900338295

我们可以看到,其实从事务1191-1276的IN事务,由于设备没有数据或数据尚未准备好,USB设备给主机返回的是NAK握手包,这时USB主机会重传该事务,到了事务1277,USB设备有数据返回给主机,这时我们看到使用的数据包为DATA1,说明之前重传的数据包一直为DATA1,数据传输完成后,USB主机和USB设备的数据包变为DATA0.这我们从下一SETUP事务即可看到:
SETUP事务

事务1191-1276的IN事务的重传
162153910568
对于1276事务,USB主机发送IN包给设备,当前主机和设备的数据包PID均为DATA1,由于USB设备无数据或数据未准备好,则USB设备向主机返回NAK包。USB主机收到NAK包后,重传该事务,并且设备和主机的PID不切换。
对于事务1277,则是一个成功的数据传输,USB数据返回给主机后,主机确认数据正确无误后切换其数据包PID从DATA1变为DATA0,并且向USB设备发送ACK包,USB设备收到ACK后,将其数据包PID从DATA1变为DATA0,实际数据包序列的同步。

OUT事务DATA0/DATA1 NAK的数据翻转

OUT事务DATA0/DATA1 NAK的数据翻转仅用于全速或低速,因为高速会切换PING令牌包进行设备是否接收数据侦察。
由于本人并未找到抓包示例,故在此并不做分析。
OUT事务DATA0/DATA1 NAK的数据翻转

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 NAK握手包
NAK 握手包一般由 USB 设备发出。对于IN数据传输,表示 USB 设备没有计划向 USB 主机发送数据;对于 OUT 数据传输,表示 USB 设备无法接收 USB 主机发送的数据。NAK包的PID的低4位为1010,故高4位的补码为0101,所以其包PID值为0x5a.PID含......
USB键盘在Linux环境下一直返回NAK的输入端点和一直OUT数据的输出端点
群里有同学反馈,自己做的USB键盘在Windows下正常,但在Linux下就失败,想让帮忙分析一下原因。一个比较好的消息是他那边有USB总线分析仪,所以只需要抓包就可以进行分析了。最好开他给的抓包截图是样子的:从它的截图可以看到,USB键盘在获取了该键盘的HID报告描述符后,紧跟着一下发Report......
USB2.0 IN/OUT事务ACK成功的数据翻转(DATA TOGGLE)
USB使用数据翻转(DATA TOGGLE)的同步机制,用来实现在USB主机和设备之间多个事务的数据传输同步。该同步机制原理是:USB主机和设备各自维护一个数据包PID,根据PID来发送数据包数据接收方根据接收到的数据包情况来改变自身数据包PID数据发送方根据接收方的握手包来改变自身的数据包PI......
USB2.0 IN/OUT事务NAK数据翻转(DATA TOGGLE)
NAK由USB设备发送,用于表示设备当前无法接收数据或者无数据发送给主机。USB设备返回NAK握手包给主机后,USB主机会重传该事务,而对于高速OUT事务,会使用PING令牌来PING设备是否可以接收数据。USB主机不会发送NAK握手包给设备。IN事务DATA0/DATA1 NAK数据翻转......
USB2.0 IN/OUT事务ACK错误或丢失的数据翻转(DATA TOGGLE)
前面一节我们讨论了当ACK成功发送并被接收时的数据包PID翻转,但在实际的数据传输过程中,也会出现ACK丢失或者错误的情况,这节我们来讨论这种情况。同样的,对于IN事务和OUT事务,我们分别进行讨论。IN事务ACK错误或丢失的数据翻转(DATA TOGGLE)IN事务ACK错误或丢失的数据翻转(......
HID协议SET_IDLE请求的解释说明
SET_IDLE请求会使HID设备相关的中断管道(端点)停止定时上报报告数据,直到有新的事件(有效数据)或直到的SET_IDLE时才继续上报报告数据。在SET_IDLE的时间周期内,如果没有变化的情况下,由设备周期性地返回NAK。关于SET_IDLE的功能讨论HID设备以中断的方向进行上报数据给方......
Windows HID设备SET_IDLE请求的寂寞操作
在HID规范中SET_IDLE请求用于节省USB带宽的,使用这个请求可以设置HID设备空闲速率。不过我们一般抓包的内容是这样的: CTL 21 0a 00 00 00 00 00 00 SET IDLE这样的 CTL 21 0......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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