C ++ USB-программирование - PullRequest
19 голосов
/ 13 мая 2010

Я новичок в аппаратном программировании (особенно USB), поэтому, пожалуйста, ответьте на мои вопросы. Я использую C ++, и мне нужно отправить / получить некоторые данные (байтовый массив) в / из порта USB на плате микропроцессора.

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

Я знаю, что хочу использовать стандартные драйверы Microsoft и реализовать стандартные команды Windows IO для этого, поскольку я считаю, что для микропроцессорной платы нет драйверов, с которыми я мог бы взаимодействовать.

Если кто-то может указать мне правильное направление в отношении шагов, необходимых для «разговора» с USB-портом (открытие, настройка, ввод / вывод) с помощью стандартных команд ввода-вывода Windows, я был бы очень признателен за это. Большое вам спасибо !!

Ответы [ 5 ]

15 голосов
/ 13 мая 2010

USB в двух словах - отличное фоновое чтение.

Для общего USB-модуля попробуйте LibUSB , который включает в себя несколько примеров общения со стандартными устройствами. LibUSB-Win32 - это порт Windows этой библиотеки.

Вы правы, но нигде рядом с так просто, как с портом RS232.

Какой микропроцессор вы используете? Поставляется ли он с каким-либо USB-оборудованием или вы пытаетесь реализовать его все программно (не то, что я бы рекомендовал даже , созерцая !). Многие микропроцессоры поставляются с примерами кода, которые могут эмулировать простые устройства HID USB, такие как клавиатуры / мыши и т. Д., Которые вы можете использовать в качестве отправной точки. В противном случае возможно несколько готовых вариантов , которые избавят вас от многих головных болей: -)

3 голосов
/ 17 июня 2010

Узнайте, какой набор микросхем USB используется на плате микропроцессора, например, Ftdi, Cypress и т. Д. Эти производители поставляют драйверы, библиотеки и примеры программ для связи, это самый простой способ.

Не существует «стандартных» драйверов как таковых, если только ваша плата не настроена как устройство HID, однако, если вы используете Windows, Microsoft предоставляет общий драйвер WinUSB.sys , который может или может не соответствует вашим потребностям (не поддерживает изохронную передачу).

2 голосов
/ 21 ноября 2014

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

Возможно, уже есть драйверы для этого чипа, если это STM или может быть API, помогающий разработать драйверы для него. Вероятно, это будет пользовательское устройство, но вы должны просмотреть типы устройств, чтобы увидеть, существует ли существующий тип, который соответствует вашему устройству. Если это так, возможно, уже есть драйвер для него, который вы можете использовать. Информация о плате необходима.

НАПИШИТЕ СВОЕГО ВОДИТЕЛЯ Не вдаваясь в подробности, вы должны изучить модель драйверов Microsoft, разницу между драйверами пользовательского режима и режима ядра, то, что представляют собой узлы драйверов, иерархию драйверов и как они логически связывают себя, различные типы драйверов (фильтр, функция, шина) Как драйвер Kernel взаимодействует с пользовательским интерфейсом, библиотеками динамических ссылок, платформами и API, WDM framework / API, KMDF и UMDF API, и это всего лишь короткий список.

ИЛИ Вы можете использовать существующий драйвер.

ИСПОЛЬЗУЙТЕ ДРАЙВЕР, ПОСТАВЛЯЕМЫЙ USB-МИКРОКОНТРОЛЛЕРОМ Мы не знаем, какую прошивку использует микроконтроллер USB, если таковая имеется. Если нет никакой прошивки (если, скажем, микросхема вышла без нее или использует eprom для хранения, а не прошивки), то если мы знали, поддерживает ли микросхема загрузчик USB, вы можете прошить ее или загрузить ее через USB, и есть нет необходимости в JTAG или других периферийных устройствах. Скорее всего, только USB может поднять вас с земли и оттуда. Обычно такие вопросы возникают при рассмотрении платы без USB-микроконтроллера.

Вот ссылка на слегка связанный драйвер. Большинство USB-микроконтроллеров служат для переключения USB-связи на UART, так как большинство микроконтроллеров, которые на самом деле контролируют и управляют всем, не оснащены USB-входом / выходом, а вместо этого UART или другими выводами ввода-вывода, такими как I2C или SPI и т. *

https://www.silabs.com/products/mcu/Pages/USBXpress.aspx

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

2 голосов
/ 13 мая 2010

Под аппаратным программированием вы имеете в виду программирование микроконтроллера? Если это так, вы не сможете использовать «стандартные драйверы Windows» или что-то в этом роде

Стандарт USB очень толстый. Проверьте это здесь

Это очень сложная тема, и я рекомендую найти реализации USB, уже созданные для вашего микроконтроллера. (который мы сможем найти, если вы дадите нам больше информации)

1 голос
/ 13 мая 2010

Что за микропроцессор и какая плата?

Многие процессоры поставляются с поддержкой портов USB. Кроме того, некоторые аппаратные платы также оснащены контроллерами USB.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...