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事务。
我们可以看到,其实从事务1191-1276的IN事务,由于设备没有数据或数据尚未准备好,USB设备给主机返回的是NAK握手包,这时USB主机会重传该事务,到了事务1277,USB设备有数据返回给主机,这时我们看到使用的数据包为DATA1,说明之前重传的数据包一直为DATA1,数据传输完成后,USB主机和USB设备的数据包变为DATA0.这我们从下一SETUP事务即可看到:
事务1191-1276的IN事务的重传
对于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令牌包进行设备是否接收数据侦察。
由于本人并未找到抓包示例,故在此并不做分析。
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936