"35.172.217.40 - 35.172.217.40"

USB для встроенных устройств - разработка драйвера/стека драйверов устройств

Мне поручено написать драйвер устройства для встроенного устройства, которое будет связываться с микроконтроллером через интерфейс SPI. В конце концов, интерфейс USB будет использоваться для загрузки обновленного кода извне и используется во время фазы проверки.

Мой вопрос: кто-нибудь знает хороший справочный дизайн или документацию или онлайн-учебник, который охватывает реализацию/дизайн драйвера стека/драйвера USB-устройства во встроенной системе? Я только начинаю, и чтение через 650 страниц спецификации USB v2.0 немного затруднительно на данный момент.

Как и FYI, микроконтроллер, который я использую, является Freescale 9S12.

Марк

На основе комментариев goldenmean (-AD) я хотел добавить следующую информацию:

1) Встраиваемое устройство использует пользовательский исполнитель и не использует COTS или RTOS.

2) Устройство будет использовать прерывания, чтобы указать, что данные готовы к извлечению с устройства.

3) Я прочитал некоторые из документов относительно Linux, но поскольку я совсем не знаком с Linux, на данный момент это не очень полезно (хотя я надеюсь, что это будет очень быстро).

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

Изменить - через год

Я просто хотел поделиться несколькими вещами, прежде чем они исчезнут из моего ума, если я никогда больше не работаю на USB-устройстве. Я столкнулся с несколькими препятствиями при разработке кода и его запуске и запуске для первого.

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

Вторая проблема, с которой я столкнулся, - это неправильно обрабатывать запрос настройки для Set_Configuration. Я работал с ним, но я не обрабатывал запрос правильно, так как USB-устройство не отправляло ACK, когда пришел этот запрос настройки. В конце концов я нашел это, используя аппаратный анализатор протоколов USB.

Были и другие проблемы, с которыми я столкнулся, но это были две самые большие из них, которые потребовали от меня довольно много времени, чтобы разобраться. Другая проблема, о которой я должен был беспокоиться, - это бюджетный и малоформатный формат Freescale 9S12 по сравнению с USB-данными (соответственно).

В итоге я создал драйвер USB-устройства, подобный драйверам устройств UART, которые я делал в прошлом. Я разместил код для этого по следующему URL-адресу.

http://lordhog.wordpress.com/2010/12/13/usb-drive

Я очень часто использую структуры, поэтому людям может не нравиться их, поскольку они не являются порталами, как использование #defines (например, MAX3420_SETUP_DATA_AVAIL_INT_REQR 0x20), но мне они нравятся, так как он делает код более удобочитаемым для меня. Если у кого-то есть вопросы по этому поводу, не стесняйтесь писать по электронной почте, и я могу попытаться дать ему некоторое представление. Книга "USB Complete: Руководство для разработчиков" была полезна, если вы знали, в каких областях сосредоточиться. Это было простое приложение, и он использовал только низкоскоростной USB.

+8
источник поделиться
7 ответов

Я использовал более раннюю версию USB Complete by Jan Axelson. Действительно, очень полно.

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

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

+3
источник

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

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

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

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

3.) Несколько указателей, которые я нашел быстро. Google shud be ur friend! http://www.lrr.in.tum.de/Par/arch/usb/usbdoc/ - драйвер USB-устройства Linux

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

-AD

+5
источник

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

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

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

+1
источник

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

0
источник

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

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

users.ece.utexas.edu/~valvano/

0
источник

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

0
источник

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

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос