USB для встроенных устройств - разработка драйвера устройства / стека протоколов - PullRequest
8 голосов
/ 05 февраля 2009

Мне было поручено написать драйвер устройства для встроенного устройства, которое будет взаимодействовать с микроконтроллером через интерфейс 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.

Ответы [ 7 ]

5 голосов
/ 05 февраля 2009

При написании драйвера устройства для любого интерфейса (USB, параллельный порт и т. Д.) Код, который необходимо разработать, будет зависеть от того, есть ли какая-либо операционная система (ОС), RTOS, работающая на этом процессоре / микроконтроллере. например если это будет работать, скажем, WinCE - он будет иметь свой собственный комплект разработки драйверов и шаги, которые необходимо выполнить при разработке драйверов устройств. То же самое для любой другой ОС, такой как Linux, symbian.

Если это будет простой код прошивки (без ОС), который будет управлять процессором / микроконтроллером, то это совсем другая ситуация. Итак, основываясь на любой из вышеперечисленных ситуаций, в которых вы находитесь, нужно прочитать и понять: -

1.) Аппаратная спецификация платы разработки процессора / микроконтроллера - Регистрация файлов, портов, расположение памяти и т. Д.

2.) Спецификация USB

3.) Пару указателей я нашел быстро. Google должен быть твоим другом! http://www.lrr.in.tum.de/Par/arch/usb/usbdoc/ - Драйвер USB-устройства для Linux

http://www.microsoft.com/technet/archive/wce/support/usbce.mspx

-AD

3 голосов
/ 09 февраля 2009

Я использовал более раннюю версию USB Complete от Яна Аксельсона . Действительно очень полный.

Из редакционной рецензии:

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

1 голос
/ 13 марта 2009

Мне любопытно, почему вы выбрали 9S12? Я использовал его на предыдущей работе и не был доволен.

  • У него была паршивая поддержка gcc, поэтому мы использовали Metrowerks
    • , что, возможно, было хорошо для C, но часто генерировало глючное C ++
    • была паршивая IDE с бинарными файлами проекта!
  • 9s12 также был медленным, много инструкций выполнялось за 5 циклов.
  • Не очень энергоэффективно.
  • нет бочкообразного переключателя, замедлены операции, типичные для встроенного кода
  • не так дешево.

Единственное, что мне не нравится больше, это 8051. Я использую ARM CortexM3 на своей текущей работе, он лучше, чем 9S12 во всех отношениях (более быстрые часы, больше работы за такт, меньше энергопотребление, дешевле, хорошая поддержка gcc, 32-битные и 16-битные).

0 голосов
/ 09 декабря 2015

Я работаю над проектом с использованием Atmel V71. Процессор очень мощный, и среди множества высокопроизводительных подключений, предлагаемых на чипе, есть USB-движок, который будет работать в режимах устройства или хоста для 480 МГц или 48 МГц (не USB 3.0). Инструменты бесплатны и поставляются с несколькими примерами проектов хоста и устройства USB со всем кодом USB-стека. Он поддерживает 10 конечных точек, и все передачи выполняются через DMA, поэтому у вас есть большая часть мощности процессора, доступная для других задач. USB-стек Atmel работает без RTOS

0 голосов
/ 16 декабря 2010

Рассмотрите AVR для вашего следующего проекта MCU, потому что это замечательные библиотеки LUFA и V-USB .

0 голосов
/ 07 апреля 2009

Вот отличный сайт, поддерживаемый Джонатаном Вальвано, профессором Техасского университета. Там он преподает четыре курса (три бакалавриата, один выпускник), и все они посвящены использованию микроконтроллера 9S12. Его сайт содержит все лекционные заметки, лабораторные руководства и, что более важно, стартовые файлы, которые он использует для всех своих занятий.

Сайт выглядит так, как будто он из 90-х, но просто покопайтесь немного, и вы должны найти все, что вам нужно.

users.ece.utexas.edu / ~ valvano /

0 голосов
/ 09 февраля 2009

Я не знаю, какое оборудование вы планируете использовать, но, учитывая его гибкость, STMicro предлагает линейку микроконтроллеров с поддержкой USB / SPI и библиотеку C-кода, которую можно использовать с их частями. - Я годами пользовался их микрофонами серии ARM7 с большим успехом.

...