USB: низкая задержка (<1 мс) с передачей прерываний и необработанным HID

У меня есть проект, который требует регулярного чтения данных внешнего гироскопа IMU и отправки данных на телефон Android.

Я использую плату Teensy 2.0 для запроса IMU через I2C и отправки его через USB с использованием необработанного HID. Я использую переменную RawHID, которая объявлена ​​в usb_api.h usb_rawhid teensyduino.

Я читал, что у высокоскоростного USB, использующего передачу прерывания, может быть максимальная задержка 1 мс, и я хотел бы достичь этой максимальной задержки 1 мс. Я не уверен, что искать для достижения этой максимальной задержки, и хотел бы знать о указателях. Моя конечная цель - получать данные гироскопа каждые 2 мс (500 Гц).

Я знаю несколько вещей, которые могут иметь значение:

1) Я изменил RAWHID_TX_SIZE на 6 байтов (мне нужно только 6 байтов для значения гироскопа), а RAWHID_TX_INTERVAL установлен на 1 мс (самый быстрый). Конечная точка OUT в настоящее время указывается в интерфейсе, который мне не нужен, я не уверен, что удаление может улучшить задержку.

2) Android распознает подростка как «устройство hiddev USB HID v1.11». Я не уверен, что это полный сырой HID или он пытается разобрать его. Teensy использует сырой HID, как указано выше.

3) В Android определенный поток пытается выполнить queue () в UsbRequest, а затем requestWait (). Обработка, когда данные поступают, очень быстрая (то есть: сохранить их в глобальной переменной), но я во власти планировщика потоков.

Так что это некоторые указатели, которые я знаю (и не совсем уверен, как они влияют на максимальную задержку). Я хотел бы услышать отзывы людей и, возможно, указать новые направления, как улучшить максимальную задержку USB. Поиск информации об уменьшении латентности USB при передаче прерываний пугает.

Ответы на вопрос(1)

Ваш ответ на вопрос