Проблемы с производительностью USB
Я пытаюсь передать данные через USB. Это пакеты не более 64 байтов, которые отправляются с частотой 4 кГц. Это дает скорость передачи около 2 Мбит / с.
Задача программного обеспечения, которая собирает эти данные, работает на частоте 2,5 кГц.
В идеале мы никогда не хотим, чтобы пакеты поступали медленнее, чем 2,5 кГц (поэтому 2 кГц не очень хорошо).
Кто-нибудь знает какие-либо общие ограничения на то, что может достичь USB?
Мы работаем на основной плате с 1,33 ГГц, работающей на QNX, и дочерней плате, которая представляет собой башенную систему TWR K60F120M с MQX.
Помимо деталей системы, следует ли использовать USB для передачи данных такого типа, то есть для высокочастотных и коротких пакетов?
Большое спасибо за помощь MG
1 ответ
USB, даже в самой медленной спецификации (1.1), может передавать данные со скоростью до 12 МБ / с, если вы используете правильный режим передачи. USB будет обрабатывать 1000 "кадров" в секунду. Кадры содержат информацию управления и данных, и различные части каждого кадра используются для различных целей, и, таким образом, весь информационный контент "мультиплексируется" среди этих конкурирующих требований.
Низкоскоростные устройства будут использовать всего несколько байтов в кадре для отправки или получения своих данных. Примерами являются модемы, мыши, клавиатуры и т. Д. Так называемые полноскоростные устройства (в USB 1.1) могут достигать скорости до 12 МБ / с, используя передачу в изохронном режиме, то есть они выделяют довольно большой кусок каждого кадра, и может посылать столько данных (фиксированный размер) каждый раз, когда появляется кадр. Это режим, который аудиоустройства используют для потоковой передачи, например, музыки с интенсивным объемом данных на динамики USB.
Если вам удастся выполнить небольшую локальную буферизацию, вы сможете использовать изохронный режим для передачи 64-байтовых данных, передаваемых с частотой 1 кГц, но с 2 или 3 периодами (при 2,5 кГц) данных на USB. передача кадра. Вы хотели бы зарезервировать 64 x 3 = 192 байта данных (плюс, может быть, несколько дополнительных байтов для управляющей информации, такой как количество чанков: 2 или 3?). Затем, когда появляются фреймы USB, вы помещаете свои 2 порции или 3 порции данных в провод, и принимающая сторона затем получает эти данные, хотя и более быстрым способом, чем просто плавно с точной частотой 2,5 кГц., Тем не менее, этот способ передачи данных будет более чем поддерживать, даже с USB 1.1, и по-прежнему использовать только часть общей доступной пропускной способности USB.
Проблема, на мой взгляд, заключается в том, может ли ваша системная система выдерживать "бурную" скорость доставки данных… другими словами, вместо получения 64 байтов с частотой 2,5 кГц вы получите в среднем) 160 байт с частотой 1 кГц. Вы действительно получите что-то вроде этого:
Итак, я думаю, что с USB это будет лучшим, что вы можете сделать - получить несколько пакетную доставку либо 2, либо 3 пакетов данных вашего устройства на 1 мсек.
Я не специалист по USB, но я проделал некоторую работу с ним, включая отладку протокола туннелирования между устройствами, который использовал USB-прерывания, поэтому я видел такую реализацию в других системах, чтобы решить проблему соответствия частоты кадров USB со скоростью передачи данных устройства.