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

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

22 голосов
/ 22 ноября 2010

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

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

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

П.С .: Я знаю:

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

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

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

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

  • ...

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

Ответы [ 10 ]

9 голосов
/ 23 ноября 2010

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

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

5 голосов
/ 23 ноября 2010

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

3 голосов
/ 28 января 2011

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

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

Информацию о вариантах libusb читайте this

3 голосов
/ 27 января 2011

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

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

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

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

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

1 голос
/ 23 мая 2011

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

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

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

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

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

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

0 голосов
/ 14 апреля 2017

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

  1. фреймворк гаджета в uboot
  2. HID specefication usb org
  3. средства отладки, такие как USB Protocol Analyzer
  4. libusb работает на хост-компьютере для отправки пакетов
0 голосов
/ 23 апреля 2015

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

0 голосов
/ 21 марта 2014

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

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

0 голосов
/ 22 ноября 2010

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

0 голосов
/ 22 ноября 2010

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

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

...