我有一个项目需要定期读取外部 IMU 陀螺仪数据并将数据发送到 Android 手机。
我正在使用一个 teensy 2.0 板通过 I2C 查询 IMU,并使用原始 HID 通过 USB 发送它。我正在使用在 teensyduino 的 usb_rawhid 的 usb_api.h 中声明的 RawHID 变量。
我已经读到使用中断传输的全速 USB 可以有 1ms 的最大延迟,并且希望达到这个 1ms 的最大延迟。我不确定要寻找什么来实现这个最大延迟,并且想请教一下指针。我的最终目标是每 2 毫秒(500 赫兹)接收一次陀螺仪数据。
我知道的一些事情可能是一个问题:
1)我已将 RAWHID_TX_SIZE 更改为 6 个字节(陀螺仪值我只需要 6 个字节),并将 RAWHID_TX_INTERVAL 设置为 1 ms(最快)。当前在我不需要的接口中指定了一个 OUT 端点,我不确定删除它是否可以改善延迟。
2) Android 将 teensy 识别为“hiddev USB HID v1.11 设备”。我不确定这是否是完整的原始 HID 或者它是否正在尝试解析它。Teensy 使用上面指定的原始 HID。
3) 在 Android 中,一个特定的线程试图在 UsbRequest 上排队(),然后是 requestWait()。数据到达时的处理非常快(即:将其存储在全局变量中),但我受制于线程调度程序。
所以这些是我知道的一些指针(并且不完全确定它们如何影响最大延迟)。我很想听听人们的反馈,并可能指出如何改善我的最大 USB 延迟的新方向。寻找有关减少 USB 中断传输延迟的信息是很可怕的。