USB HID传输间隔太大是哪里限制的?
用默认配置做键盘模拟,感觉按键延迟明显,是不是上位机限速?你有没有调过Endpoint大小? HID默认就是慢,Interval值固定。 Win系统默认会限速传输,没办法。 是不是用了低速模式? 描述符里设置的polling interval看看。 建议用自定义HID协议会快点。 实测1ms周期也常常有抖动。 USB总线空闲时延迟会低些。 L072核心速度不高,响应慢。 用logic analyzer看传输间隔最清楚。 主机轮询机制,HID设备采用主机轮询方式通信,主机按固定间隔查询设备,此间隔由HID类规范及主机驱动决定,设备无法主动调整。
HID协议对传输间隔有默认限制,如HID报告间隔通常为1ms至几十ms,具体间隔由主机端HID驱动设置,设备端仅能响应查询
在USB描述符中,端点描述符的bInterval字段定义了中断端点的轮询间隔,该值影响主机查询频率。例如,bInterval设为10ms时,主机每10ms查询一次设备
最大包长度限制,HID设备单包最大传输64字节,若需传输大数据量,需分多包传输,间接影响传输效率,但不会直接导致间隔增大。
STM32L0作为低功耗MCU,若处理HID中断或数据拷贝耗时过长,可能无法及时响应主机查询,导致主机端感知的传输间隔增大
USB模块的中断优先级、缓冲区配置及双缓冲机制均可能影响传输效率。例如,未启用双缓冲时,数据处理不及时会导致主机重试,增加延迟。
保端点描述符中wMaxPacketSize设为64字节(HID最大值),避免因包大小不足导致多次传输。
启用双缓冲机制,通过交替使用两个缓冲区,确保USB模块与CPU可并行处理数据,减少数据拷贝时间对传输的影响
修改bInterval值以缩短轮询间隔(需符合HID规范及主机兼容性)。例如,将bInterval设为1ms可提升响应速度,但可能增加CPU负载
页:
[1]