Мне было поручено написать драйвер устройства для встроенного устройства, которое будет взаимодействовать с микроконтроллером через интерфейс SPI. В конце концов, интерфейс USB будет использоваться для внешней загрузки обновленного кода и использования на этапе проверки.
Мой вопрос: кто-нибудь знает хороший справочный проект или документацию или онлайн-учебник, который охватывает реализацию / проектирование стека протоколов USB / драйвера устройства во встроенной системе? Я только начинаю и читаю спецификацию USB v2.0 на 650 страниц на данный момент немного устрашает.
Микроконтроллер, которым я пользуюсь, - это как FYI, Freescale 9S12.
Mark
Основываясь на комментариях goldenmean (-AD), я хотел добавить следующую информацию:
1) Встраиваемое устройство использует пользовательский исполнитель и не использует COTS или RTOS.
2) Устройство будет использовать прерывания, чтобы указать, что данные готовы для получения с устройства.
3) Я прочитал некоторые документы по Linux, но, поскольку я совсем не знаком с Linux, в данный момент он не очень полезен (хотя я надеюсь, что это будет очень быстро).
4) Конструктивный подход, по крайней мере на данный момент, состоит в том, чтобы написать драйвер устройства для устройства USB, тогда уровень протокола USB (I / O) будет располагаться поверх драйвера устройства для интерпретации данных. Я бы предположил, что это будет лучшим подходом, хотя я могу ошибаться.
Редактировать - Год спустя
Я просто хотел поделиться несколькими вещами, прежде чем они исчезнут из моей памяти на случай, если я больше никогда не буду работать на USB-устройстве. Я столкнулся с несколькими препятствиями при разработке кода и его запуске и запуске в первую очередь.
Первая проблема, с которой я столкнулся, заключалась в том, что при подключении USB-устройства к хосту (в моем случае Windows) хост выдает запрос на сброс. Устройство USB сбрасывает и сбрасывает флаги разрешения прерываний. Я недостаточно читал литературу, чтобы понять, что это происходит, поэтому я никогда не получал прерывания запроса на установку. Мне понадобилось много времени, чтобы понять это.
Вторая проблема, с которой я столкнулся, заключалась в неправильной обработке запроса установки для Set_Configuration. Я обрабатывал его, но не правильно обрабатывал запрос, так как USB-устройство не отправляло ACK при поступлении этого запроса на настройку. В конце концов я выяснил это с помощью аппаратного анализатора протокола USB.
Были и другие проблемы, с которыми я столкнулся, но это были две самые большие проблемы, на которые мне потребовалось много времени, чтобы разобраться. Другая проблема, о которой мне пришлось беспокоиться, это формат с прямым порядком байтов и прямым порядком байтов, Freescale 9S12 и формат данных USB (Intel) соответственно.
В итоге я создал драйвер устройства USB, аналогичный драйверам устройств UART, которые я делал в прошлом. Я разместил код для этого по следующему адресу.
http://lordhog.wordpress.com/2010/12/13/usb-drive
Я часто использую структуры, поэтому людям они могут не нравиться, поскольку они не такие портальные, как #defines (например, MAX3420_SETUP_DATA_AVAIL_INT_REQR 0x20), но они мне нравятся, поскольку это делает код более читабельным для меня. Если у кого-то есть вопросы по этому поводу, пожалуйста, не стесняйтесь по электронной почте, и я могу попытаться дать некоторое представление об этом Книга «USB Complete: Руководство для разработчиков» была полезна, если вы знали, на каких сферах сосредоточиться. Это было простое приложение, в котором использовался только низкоскоростной USB.