USB调试笔记
+ -

USB键盘在Linux环境下一直返回NAK的输入端点和一直OUT数据的输出端点

2021-11-10 501 0

群里有同学反馈,自己做的USB键盘在Windows下正常,但在Linux下就失败,想让帮忙分析一下原因。
一个比较好的消息是他那边有USB总线分析仪,所以只需要抓包就可以进行分析了。
最好开他给的抓包截图是样子的:
断点HALT
从它的截图可以看到,USB键盘在获取了该键盘的HID报告描述符后,紧跟着一下发ReportId=2的中断输出数据,这个数据USB总线分仪仪也给出了解释,是用于同步键盘指示灯的,这说明主机端已经将设备的报告描述符分析成功。

这里使用了端点2进行键盘灯同步,即输出端点0x02,所以该键盘有一个中断输出端点。

紧跟着后面就是获取一次字符串描述符
紧跟着就是输入端点0x83和输出端点0x04进行CLEAR_FEATURE请求。
可以看到,对于端点,CLEAR_FEATURE是支持ENDPOINT_HALT的,可见端点挂了。

  • ENDPOINT_HALT:接收方是端点,其值为0,对于端点的停止特性。

后面跟着的就是使用端点2传输了0长度的字节,这里可以认为是结束包。
再后面就没有截图了…

后面它又给我抓了一个包,发现不停地在OUT2字节和IN 返回NAK.
这说明OUT数据是正常的,但设备端一直没有数据返回给主机。
OUT和IN的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 CLEAR_FEATURE传输及事务
USB2.0 CLEAR_FEATURE传输及事务,更多详见CLEAR_FEATURE标准请求......
USB2.0 IN/OUT事务NAK的数据翻转(DATA TOGGLE)
NAK由USB设备发送,用于表示设备当前无法接收数据或者无数据发送给主机。USB设备返回NAK握手包给主机后,USB主机会重传该事务,而对于高速OUT事务,会使用PING令牌来PING设备是否可以接收数据。USB主机不会发送NAK握手包给设备。IN事务DATA0/DATA1 NAK的数据翻转......
USB设备的端点停止(ENDPOINT_HALT)
USB设备在与主机进行通讯时,有时会出现端点停止问题,这时当主机与设备进行数据通讯时,设备会给主机返回STALL握手包,表示该端点已经停止即不能发或者接收数据。STALL握手包表示了该设备端点的当前状态,停止了的端点不能自行恢复,需要由主机发送CLEAR_FEATURE标准请求来恢复。USB端点的......
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......
STM32F407的USB类请求回调函数USBD_Class_cb_TypeDef
前面介绍了获取描述会和USB设备状态的回调函数,这里界绍USB在实际使用过程中的USB请求通讯。这里还是以STM32F407的U盘为示例来说明。STM32F407的USB类请求使用结构体USBD_Class_cb_TypeDef来整合回调函数。typedef struct _Device_cb......
UVC摄像头USB批量传输BULK数据传输方式的打开与关闭StreamOn StreamOff
USB的批量传输和中断传输是一样的简单,但经常发现有人在问批量传输的UVC摄像头的打开与半闭问题的边界问题,特别是摄像头关闭的判断。BULK摄像头的打开我们通过BUSHOUND抓包的内容如下:Device Length Phase Data ......
USB集线器ClearPortFeature
USB集线器CLEAR_PORT_FEATURE请求用于清除USB下游端口特性。如果集线器未被配置(SelectConfigure),USB集线器对此请求应返回未定义。bmRequestTypebRequestwValuewIndexwLengthData00100......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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