USB-программирование

Я хочу запрограммировать микроконтроллер (AVR) для управления некоторыми светодиодами через USB. Это просто из интереса к тому, как создавать и программировать USB-устройства. Есть несколько микроконтроллеров AVR, которые поддерживают протокол USB, или я мог бы сам реализовать протокол USB в другом микроконтроллере, но мне интересно, что использовать для написания собственных драйверов на компьютере.

Мой уровень в системном программировании: полный нуб (отсюда и вопрос)

Итак, какую литературу вы могли бы посоветовать людям, чтобы получить хорошие знания о технологии USB и о том, как писать свои собственные драйверы и не только?

P.S.: Я знаю:

  • C (вероятно, он понадобится здесь)

  • Java (вероятно, здесь она не понадобится)

  • Python (надеюсь, можно использовать его здесь)

  • ассемблер (надеюсь, здесь он не понадобится XD).

  • ...

P.P.S: разработка драйверов для разных ОС отличается. Я использую Linux и Windows, поэтому приветствуются любые материалы, относящиеся к одной или обеим этим системам.


person EDWH    schedule 22.11.2010    source источник


Ответы (10)


Что ж, хотя вы можете разработать и написать собственный драйвер USB, прелесть USB в том, что вам не нужно писать собственный драйвер. Форум разработчиков USB определил спецификации классов для всех стандартных классов устройств. Если вы можете подогнать ваше устройство под стандартный класс устройств, драйвер уже написан для вас!

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

person J Edward Ellis    schedule 22.11.2010

Если вы используете фреймворк для микроконтроллеров AVR с аппаратным USB, загляните в LUFA, и если вы Если вы предпочитаете AVR с программным обеспечением USB, обратите внимание на V-USB. Они оба реализовали множество классов USB, поэтому вам не нужно делать это самостоятельно — просто используйте их.

person avra    schedule 23.11.2010
comment
Оба этих проекта очень помогают в пространстве avr usb. - person Peter Gibson; 19.12.2010

Это звучит как отличный проект! Я бы посоветовал начать с чего-нибудь попроще, так как вы, как вы говорите, "полный нуб". Я не уверен, какое аппаратное обеспечение у вас есть (или имеется в виду), но я бы посоветовал новичку STK500. Это плата для разработки, которая очень хорошо поддерживается как в Linux, так и в Windows и обеспечивает максимальную гибкость. Он поставляется со встроенными светодиодами и переключателями для ваших проектов, но вам потребуется микроконтроллер. И для этого я рекомендую ATMega32, отличный многоцелевой IC, который также хорошо поддерживается и имеет много документации в Интернете.

Как только вы их получите, я предлагаю вам заняться разработкой под Linux с помощью avr-gcc (не забудьте также установить avr-libc). Если вы используете Ubuntu, легко получить все необходимые пакеты:

% sudo apt-get install gcc-avr avr-libc avrdude

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

Этого достаточно, чтобы освоить микроконтроллеры AVR и средства разработки. Небо — это предел на тот момент, но, поскольку вы сказали, что хотите перейти на USB, я бы предложил использовать отличный V-USB, чтобы ваш ATMega32 работал как USB-устройство. После этого, как говорится, шаги по переворачиванию светодиодов раз плюнуть :).

person Devrin    schedule 27.01.2011
comment
хороший совет: v-usb - есть и хорошие схемы - легко сделать своими руками - person Bernd Ott; 28.01.2011

Интересно, что использовать для написания собственных драйверов на компьютере

  1. libusb (здесь, здесь и здесь)
  2. wdk
  3. WinDriver

Для информации о вариантах libusb прочитайте это

person avra    schedule 28.01.2011

Вы могли бы использовать libusb. Он мощный и кроссплатформенный.

Но то, что вы пытаетесь сделать, это довольно простой интерфейс управления. Я думаю, что вы можете обойти большую часть сложности, используя HIDAPI.

http://www.signal11.us/oss/hidapi/

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

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

HIDAPI даже рекомендуется для простого взаимодействия с HID-устройствами в FAQ по libusb, так как это немного сложнее сделать на разных платформах, использующих libusb.

person CptAJ    schedule 23.05.2011

Один из хороших способов — просто разработать HID-устройство, поскольку драйвер встроен в большинство операционных систем более высокого уровня и довольно гибкий для простого ввода-вывода, о котором вы говорите. Еще один хороший вариант — просто использовать устройство USB RS232 или программное обеспечение. Я использую PIC, у которых есть несколько хороших устройств с USB на борту.

person kenny    schedule 22.11.2010

Я построил свой собственный испытательный стенд на основе ARDUINO UNO, и я использовал программатор ionlabs типа usbasp, и он отлично работал, но не позволял преобразовать TTL обратно в Rs-232, и, следовательно, я не мог использовать функции. таких как serial.print(), и мне пришлось установить кабель ftdi, который позволил мне это сделать. Драйверы были libusb 1.xx, работающими просто отлично.

Если вы хотите запрограммировать AVR, вы можете использовать пакет программного обеспечения ARDUINO или stino для загрузки программ. Вам нужно знать c (только основы).

person lakshya_arora    schedule 21.03.2014

В прошлом году я создал адаптер USB-клавиатуры для своего замкового камня. Я не занимался программированием хоста, а использовал существующий код, который вы можете найти в Интернете. Но я запрограммировал сторону устройства, и для этого мне очень помог этот веб-сайт Teensy Посмотрите их "Библиотеку кода", в которой есть код для клавиатуры, мыши и других. Кроме того, руководство по протоколу USB всегда будет полезно, и вам всегда следует обращаться к нему, когда вы делаете что-то с USB.

person KuroNeko    schedule 23.04.2015

Интересно, действует ли ваш AVB как хост или устройство. Я предполагаю, что ваша плата представляет собой USB-устройство, и вам нужно зажечь светодиоды на вашей плате. Таким образом, это может быть хорошим способом инициализировать вашу плату как HID-устройство. Для достижения этой цели вам понадобится программный стек гаджетов HID, работающий на вашей плате. Ссылки следующим образом:

  1. каркас гаджета в uboot
  2. Спецификация HID usb org
  3. инструменты отладки, такие как анализатор протокола USB
  4. libusb работает на хост-компьютере для отправки пакетов
person Kai Qiu    schedule 14.04.2017

Область документации Microsoft WDK (Windows Development Kit) недавно стала доступна на MSDN. Существует раздел, посвященный USB, хотя вам лучше сначала прочитать более ранние разделы, в частности области «Начало работы». Они предполагают, что вы будете использовать C в качестве языка программирования для разработки драйверов.

В случае Linux веб-сайт Linux USB должен указать вам правильное направление. В частности, вам понадобится Руководство по программированию для Драйверы USB-устройств для Linux.

person Orbling    schedule 22.11.2010