USB-устройство связи с несколькими последовательными портами, работающее на всех платформах

У нас есть встроенное устройство, которое подключается к ПК через USB, и оно имеет несколько виртуальных последовательных портов (CDC-ACM).

У нас это работает. в Windows. На встроенном устройстве у нас есть несколько интерфейсов CDC-ACM. Дескрипторы USB объявляют его как составное устройство (класс = 0xEF, подкласс = 2, протокол = 1), и он имеет «дескриптор ассоциации интерфейса» для каждого виртуального последовательного порта. В Windows мы используем файл INF, который устанавливает usbser. sys для каждого интерфейса управления CDC-ACM (MI_00, MI_02 и т. д.).

Однако, как мы обнаружили, этот метод не работает для Mac. Я обнаружил, что могу заставить его работать на Mac и Linux, изменив его на класс «Связь» (класс = 2, подкласс = 0, протокол = 0) и удалив IAD. (Для Linux при тестировании с Ubuntu я обнаружил, что это работает с ядром Ubuntu Linux 2.6.35-28 или новее. С более ранними ядрами работал только первый последовательный порт.) Но тогда этот метод не работает для Windows.

Какой метод можно использовать для создания USB-устройства с несколькими виртуальными последовательными портами, которое работает в Windows, Mac и Linux? Я думаю, что я бы предпочел решение, которое максимально использует стандарт CDC-ACM и в максимально возможной степени избегает опции write-your-own-drivers.

7
задан Craig McQueen 12 July 2012 в 02:00
поделиться