Виртуальный порт usb это
Добрейшего времени суток!
Вопрос по сути простой, по факту (для меня сложный): возможна ли эмуляция USB и USB-HID устройств в Windows без фактического их подключения ?
Разновсяческая инфа, гуляющая по просторам сети, так или иначе сводится к созданию некого хардварного устройства, которое потом перепрошивается и выдает себя за то или иное устройство, которое и распознает Windows. Можно ли каким-либо образом заставить Windows "увидеть/видеть новое устройство" без фактического использования сторонней аппаратуры (чисто программным способом)?
На данный момент нужно сэмулировать четыре устройства:
USB клавиатуру
USB мышь
USB Web-камеру
USB микрофон
Таким образом, чтобы можно было им управлять из запущенного приложения в Windows.
Спасибо.
ЗЫ: Убедительная просьба - воздержаться оценок моральной стороны вопроса, моей недостаточной компетенции, политической ситуации в Гондурасе, и т.п.
Не тратте попусту электричество, это лишнее. Умоляю - давайте по-существу
Много не скажу, но: учитывая, что можно перебрасывать USB-утройства из "настоящей" машины в виртуальную (например, VmWare так умеет), то ответ "скорее всего, возможно".
За деталями можно попробовать сходить на RSDN, там есть ветка "Низкоуровневое программирование".
Много не скажу, но: учитывая, что можно перебрасывать USB-утройства из "настоящей" машины в виртуальную (например, VmWare так умеет), то ответ "скорее всего, возможно".
Перебрасывает существующие физически USB-устройства. А это существенно. Если бы ВмВарь могла бы присоединять виртуальный USB-HDD с реальным контейнером в виде файла, вопросов бы совсем не было. А так .
Если бы ВмВарь могла бы присоединять виртуальный USB-HDD с реальным контейнером в виде файла, вопросов бы совсем не было. А так .
А разве вообще есть вопросы ?
Что делает любой драйвер (или их совокупность) в конечном итоге?
Он виртуализирует некое физическое устройство и представляет его
как совокупность неких системных вызовов.
Программа, пишущая в файл или в COM-порт(как в файл), не знает, каким образом
реализован конкретный файл. Это устройство USB, плата в PCI или
дивайс чипсета материнской платы на шине процессора.
Это значит, можно написать драйвер, который прикинется стандартным
устройством. Клавиатурой, например.
А на самом деле будет принимать пакеты из сети.
Кстати, устройств ввода может быть несколько одинаковых
и все будут исправно функционировать одновременно, не мешая друг другу.
---
На эту тему лучше поговорить со специалистами по написанию драйверов.
Технологии виртуализации прочно вошли в современный IT мир. Сегодня невозможно найти компанию, которая бы не использовала решения для виртуализации (виртуальные сервера, виртуальные рабочие места, VDI) в своей работе. И все было бы отлично и безоблачно, но гипервизоры, основа инфраструктуры внесли и определенные ограничения на созданные и используемые виртуальные машины.
Одно из ограничений — это отсутствие USB портов на виртуальных машинах. Если раньше мы могли подключить необходимое USB устройство (например, ключ защиты ПО или смарт-карту с ключами шифрования) к физическому серверу, то теперь — поскольку сервера стали виртуальными – эта задача так просто не решается. Как решить эту проблему быстро и эффективно – я расскажу в этом обзоре.
Первое, и казалось бы наиболее очевидное решение — использовать программные эмуляторы портов, но такой подход имеет требует иметь постоянно включенный компьютер, на котором и будет работать ПО для эмуляции. Вывод: неудобное, ресурсоемкое и дорогостоящее решение.
Следущий выбор — програмно-аппартные устройства для решения задачи проброса (эмуляции) USB портов на удаленной машине. Простые, эффективные и недорогие устройства. Выбор остановился на решениях компании Digi International — AnywhereUSB
AnywhereUSB представляет собой компактное устройство USB hub – с дополнительным подключением Ethernet кабеля.
Модели AnywhereUSB
Для использования доступны 3 модели устройств, рассчитанных на разное количество USB портов:
1. AnywhereUSB /2 – 2 порта USB
2. AnywhereUSB/ 5 – 5 портов USB
3. AnywhereUSB /14 – 14 портов USB
Настройка и управление
Для настройки и управления устройством предусмотрено несколько интерфейсов:
• Web интерфейс для настройки, мониторинга и администрирования;
• AnywhereUSB утилита конфигурирования;
• Telnet Command-Line Interface;
• Simple Network Management Protocol (SNMP).
Для настройки устройства рассмотрим Web интерфейс — как наиболее удобный и простой вариант.
Управление IP адресом
Существует несколько вариантов присвоения IP адреса AnywhereUSB:
• Статический IP;
• Динамическое присвоение IP — Using Dynamic Host Configuration Protocol (DHCP);
• Auto Private IP Addressing (APIPA), наиболее известен как Auto-IP;
Сетевые сервисы легко конфигурируются через web интерфейс
Для желающих тонко настроить все параметры сетевого интерфейса доступны соответствующие инструменты
Web интерфейс имеет множество дополнтельных инструментов, позволяющих посмотреть активных подключения, статус и uptime устройства, настроить функции безопасности и.т.д
Текущие подключения:
Состояние устройства:
С настройкой устройства все просто и понятно, теперь перейдем к машине, на которую осуществляется проброс USB портов.
Настройка клиенткой машины
Настройка проста и интуитивно понятна.
Все, что необходимо для настройки:
1. Установить драйвера для AnywhereUSB;
2. Указать IP адрес устройства.
Устройство подключено, в окне доступна информация о состоянии устройства.
В случае необходимости получения детальной информации, о подключеном устройстве, свободных/занятых портах – можно воспользоваться утилитой детального просмотра.
Стоит отметить, что решение очень просто в развертывании и надежно в эксплутации. Весь процесс развертывания и настройки занимает не более 30 минут.
Примерная схема подключения устройства AnywhereUSB
Детальную информацию об устройствах AnywhereUSB, скачать драйвера и документацию можно найти сайте компании Digi International — AnywhereUSB
P.S. Данный обзор написал мой коллега, который, к сожалению, пока не является хабраюзером.
Подключение измерительного и контролирующего оборудования к компьютеру является неотъемлемым атрибутом любого современного физико-химического эксперимента. Виртуальный USB-порт – один из очень простых и эффективных способов решения такой задачи. В статье рассмотрены способы реализации таких портов на базе недорогих микроконтроллеров AVR, анализируются особенности аппаратного исполнения и программного обеспечения. Приводятся практические примеры решений нескольких типовых задач автоматизации эксперимента при помощи виртуальных USB-портов. В том числе - до сих пор еще актуальная задача замены бумажных самописцев в старых, морально устаревших, но еще функционирующих лабораторных приборах.
В настоящее время универсальные микроконтроллеры часто используются при разработке «интеллектуальных» датчиков, лабораторных приборов и контроллеров сбора данных. Такие микроконтроллеры обладают достаточно богатым арсеналом встроенных периферийных устройств, быстродействием и памятью, чтобы обеспечить управление, оцифровку, предварительную обработку и накопление информации с датчиков. Однако, все хорошо, пока пользовательский интерфейс ограничен лишь алфавитно-цифровой индикацией и несколькими кнопками управления. Как только требуется запрограммировать более сложный режим сбора информации или визуализировать большой массив данных, то без пользовательского интерфейса, реализованного на персональных компьютерах (PC), обойтись трудно. Поэтому задача эффективного обмена данными между микроконтроллером и PC до сих пор остается актуальной.
Большинство современных микроконтроллеров имеет набор последовательных интерфейсов для связи с внешним миром (например, USART). С другой стороны, последовательный интерфейс на основе стандарта RS-232 уже давно не удовлетворяет разработчиков по причине сравнительно низких скоростей передачи данных, невозможностью подключения устройств «на лету», недостаточным количеством (а часто просто отсутствием) соответствующих портов в современных ноутбуках и «нетбуках». Решением является использование интерфейса USB, свободного от перечисленных выше недостатков [1].
Возможные следующие варианты реализации USB для связи микроконтроллера с PC.
1. Применение отдельного специализированного контроллера шины USB, связанного с универсальным микроконтроллером по одному из доступных ему каналов.
2. Использование универсального микроконтроллера со встроенным USB-портом.
3. Эмуляция USB на обычных универсальных микроконтроллерах. При этом для физической связи с шиной USB используются две цифровые линии микроконтроллера (на одной должна быть возможность аппаратного прерывания), а сам USB-протокол реализуется программно на этом же микроконтроллере.
Недостаток первого подхода заключается в удорожании и усложнении аппаратной части устройства и необходимости организации внутреннего обмена данными между контроллером USB-шины и универсальным микроконтроллером. Слабым местом второго варианта является то, что микроконтроллеры со встроенным портом USB еще относительно дороги и дефицитны. Кроме этого, они часто имеют более ограниченный набор периферии, и поэтому приходится применять дополнительные микросхемы для ее расширения. Третий вариант интересен тем, что применим для широкого класса недорогих микроконтроллеров, обладающих необходимым быстродействием и программной памятью. Например, для микроконтроллеров AVR - это старшие модели MEGA и часть TINY с FLASH-памятью не менее 2K. Недостатком такого подхода является то, что быстродействие универсальных микроконтроллеров позволяет программно реализовать лишь низкоскоростной вариант стандарта USB-2 «Low speed», т.е. скорость - до 1.5 Мбит/сек. Необходимо также выделить около 1.6 Кбайт FLASH-памяти микроконтроллера для размещения драйвера шины. Тем не менее, для многих задач автоматизации лабораторных физико-химических экспериментов эта скорость оказывается вполне достаточной.
В первой части данной статьи кратко рассмотрены базовые схемы подключения и особенности программной реализации протокола USB на универсальных микроконтроллерах AVR, во второй - примеры устройств на основе такого подхода, которые разработаны и используются автором в лабораторных физико-химических экспериментах.
Технические детали реализации виртуальных портов USB на микроконтроллерах AVR достаточно подробно описаны на сайтах компаний Atmel [2] и Objective Development [3]. Виртуализация USB предполагает физическое подключение двух цифровых выводов микроконтроллера к сигнальным проводникам шины D+ и D- и программную реализацию самого протокола. Один из сигнальных проводников должен быть подключен к выводу, через который можно организовать аппаратное прерывание микроконтроллера, а второй может быть подключен к любому выводу этого же порта. Простейшая схема подключения (на примере микроконтроллера ATMega16) к шине USB показана на Риc.1. Для низкоскоростных устройств на линию D- необходимо подключить подтягивающий резистор R3, поскольку определение подключения/отключения USB устройства основано на контроле сопротивления линии.
Рис.1. Простейший вариант подключения микроконтроллера к шине USB.
Однако, не все контроллеры USB-шины будут работать с устройством, подключенным так, как показано на Рис.1, из-за несоответствия высоких уровней сигналов микроконтроллера стандарту USB. По стандарту USB высокий уровень сигнала должен составлять 3.0-3.6В, а высокий уровень сигналов микроконтроллера приближается к напряжению его питания. Например, для микроконтроллера ATMega16 рекомендованное напряжение питания составляет 4.5-5.5В. Существуют два подхода согласования уровней. Первый вариант – понижение напряжения питания микроконтроллера до такого значения, чтобы напряжение выходных сигналов микроконтроллера укладывалось в стандарт USB. Этот подход неудобен по двум причинам. Во-первых, кроме самого микроконтроллера в системе могут использоваться дополнительные микросхемы с 5-вольтовым питанием (например, дополнительные АЦП). Во-вторых, понижение напряжения питания микроконтроллера приводит к необходимости снижения тактовой частоты процессора, что часто нежелательно. Поэтому обычно используется другой вариант, а именно, непосредственное ограничение напряжения самих сигналов микроконтроллера, подаваемых на шину USB. Простейшее решение c использованием стабилитронов [4] показано на Рис.2.
Рис.2. Согласование уровней сигналов микроконтроллера с шиной USB.
Основной недостаток этой схемы - повышенный ток с соответствующих выходов порта микроконтроллера при высоких уровнях сигнала. Но это вполне компенсируется простотой и низкой стоимостью решения.
Для устранения ложных прерываний INT0 в схеме со стабилитронами рекомендуется включить также дополнительный резистор 1M между «землей» и сигналом D+.
Программная реализация протокола USB подробно описана в документе [2] и в исходных текстах программ, доступных на сайтах [2,3]. В связи с высокой скоростью передачи данных по шине USB требования к модулям программной реализации протокола USB очень жесткие. Поэтому разработчики драйверов были вынуждены пойти на некоторые упрощения, которые уменьшают помехозащищенность канала связи. В частности, упрощена проверка ошибок при передаче данных. Кроме этого, при приеме опрашивается только одна линия, т.е. используется недифференциальный приемник. Тем не менее, приблизительно годовая эксплуатация устройств с такими виртуальными USB портами в обычных лабораторных условиях показала их стабильную работу.
На указанных выше сайтах [2,3] свободно доступны исходные тексты драйверов для реализации нескольких классов USB-устройств. В частности, Custom class device, Standard HID class device, Custom HID class device и CDC class device. Также имеются многочисленные примеры радиолюбительских конструкций, построенных на основе виртуальных USB-портов.
Описанная выше реализация виртуального USB-порта является недорогим, но очень эффективным решением проблемы связи микроконтроллеров с персональным компьютером, особенно если ресурсы микроконтроллера не полностью загружены основной задачей. В данной работе это продемонстрировано на нескольких типовых задачах автоматизации эксперимента, часто возникающих в лабораториях физико-химического профиля.
Первая типовая задача это регистрация сравнительно медленных аналоговых или цифровых сигналов. Частота отсчетов здесь обычно не превышает сотен герц, а чаще всего она существенно меньше. Класс, приборов, для которых требуется такая регистрация, чрезвычайно широк – от современных цифровых датчиков до старых, вполне работоспособных, но морально устаревших приборов с самописцами в качестве регистраторов. Замена самописца на регистратор с виртуальным USB-портом на базе недорогого универсального микроконтроллера со встроенным АЦП придает этим приборам совсем другое качество. Задача упрощается еще больше, если в приборе предусмотрены средства для подключения цифрового регистратора. Несмотря на многообразие стандартов, сигналы с выхода разъема цифрового регистратора могут быть поданы непосредственно на цифровые порты микроконтроллера, программным способом легко приведены к современным стандартным представлениям и переданы по USB в персональный компьютер.
Первые два примера устройств, приведенные ниже, демонстрируют варианты таких регистраторов с виртуальным USB-портом. Первый вариант цифровой, а второй - аналоговый.
Вторая типовая задача, которая часто встречается в лабораторном физико-химическом эксперименте, в определенном смысле является обратной первой. Это - управление приводами, регулировка мощности нагревателей и манипулирование другими исполнительными устройствами. Недорогой универсальный микроконтроллер с виртуальным USB-портом, в сочетании с соответствующими модулями силовой электроники, дает очень гибкие варианты решения этих задач. Третий пример как раз иллюстрирует одно из таких решений.
Часто обе эти задачи встречаются вместе в том или другом сочетании. Последний, четвертый пример, иллюстрирует именно этот случай.
Устройства, описанные в этих примерах, разработаны и изготовлены автором для иллюстрации различных вариантов решения на базе виртуальных USB-портов. Тем не менее, они используются в реальной экспериментальной работе и могут быть легко модифицированы для других аналогичных задач. Поэтому подробные описания этих устройств, схемы и исходные тексты программ размещены в сети Интернет и свободно доступны по адресам 7.
Данный пример иллюстрирует простейший вариант использования микроконтроллера с виртуальным USB-портом в качестве регистратора цифровых сигналов. Такой регистратор подключен к старому, но еще вполне работоспособному отечественному жидкостному хроматографу Милихром (выпуска 1985 года). Общий вид прибора представлен на Рис.3. На задней стенке прибора (Рис.3, справа сверху) имеется разъем для подключения регистратора. На разъем выведены 15 двоичных разрядов сигнала ультрафиолетового детектора, знак сигнала, признак переполнения и два строба (конец преобразования АЦП и конец цикла развертки спектрометра). Кроме этого, на разъем выведено напряжение питания (+5В) и «земля». Уровни сигналов соответствуют TTL. Поэтому никаких проблем в физическом подключении и программном преобразовании данных не возникает.
Рис.3. Хроматограф Милихром. Цифровой регистратор на базе виртуального USB-порта.
В качестве контроллера USB-шины используется универсальный микроконтроллер ATMega16, включенный по схеме, приведенной на Рис.2. Плата с соответствующим разъемом представлена на Рис.3 внизу слева. Строб «Конец преобразования» вызывает аппаратное прерывание INT1, по которому данные, выставленные блоком управления «защелкиваются» в памяти микроконтроллера. После этого данные передаются в PC по виртуальному USB-порту. Частота отсчетов устанавливается блоком управления хроматографа.
Подробное описание этой разработки, схемы и исходные тексты программ приведены в [5].
Данный пример иллюстрирует комплексное использование ресурсов универсального микроконтроллера ATMega16. Здесь микроконтроллер выполняет следующие функции.
1. Контроллер шины USB для связи с персональным компьютером.
2. Контроллер шины 1-Wire для связи с датчиком температуры DS18B20. Т.е. фактически здесь микроконтроллер выступает как регистратор цифровых сигналов.
3. Аналого-цифровой преобразователь для оцифровки сигнала стеклянного электрода. Т.е. устройство используется в качестве регистратора аналоговых сигналов.
Общий вид устройства представлен на Рис.4. В качестве основы стенда использован стандартный штатив от портативного иономера И-102 со стеклянным электродом ЭСЛ-43-11 и электродом сравнения ЭВЛ-1М4. Для контроля температуры применен датчик температуры DS18B20, помещенный в стеклянную трубку соответствующего диаметра, заполненную маслом для улучшения теплового контакта датчика с раствором. Преобразование температуры в цифровой код происходит в самом датчике. Идентификация датчиков, запуск преобразования и считывание кода происходит по шине 1-Wire. В качестве виртуального контроллера этой шины выступает микроконтроллер ATMega16.
Рис.4. Регистрирующий pH-метр. Аналоговый и цифровой регистратор на базе виртуального USB-порта.
Для согласования высокого выходного сопротивления стеклянного электрода с АЦП микроконтроллера используется согласующий усилитель (Рис.4 вверху справа). На плате усилителя также находится реле, отключающее вход усилителя от стеклянного электрода в нерабочем состоянии, которое управляется по USB одной цифровой линией микроконтроллера ATMega16.
Программное обеспечение позволяет регистрировать изменение pH и температуры растворов в течение произвольного времени. Частота отсчетов – 1 Гц. Также предусмотрены средства для оперативной калибровки прибора по произвольному количеству буферных растворов и в различных температурных диапазонах.
Подробное описание этой разработки, схемы и исходные тексты программ приведены в [6].
В данном примере универсальный микроконтроллер ATMega16 используется для вывода данных из PC через виртуальный USB-порт, в частности, для управления шаговым двигателем. В качестве исполнительного устройства используется шприцевой насос от хроматографа. В насосе установлены шаговый двигатель ДШИ-200, концевой выключатель, срабатывающий при достижении поршнем нижнего предела, и датчик давления, выдающий логический сигнал при превышении заданного давления или достижении поршнем верхнего положения. На разъем насоса также подаются напряжения питания для датчика давления и «земля». В сочетании с универсальным микроконтроллером и небольшим силовым модулем этот насос легко превращается в микродозатор жидкостей, управляемый персональным компьютером через виртуальный USB-порт (Рис.5).
Рис.5. Макет микродозатора. Управление шаговым двигателем через виртуальный USB-порт.
Для управления шаговым двигателем насоса могут быть использованы любые четыре цифровых выхода микроконтроллера, которые не задействованы для шины USB. Сигналы с этих выводов подаются на базы составных транзисторов BD677 силового модуля и затем на обмотки двигателя. Для питания силового модуля используется отдельный блок питания (Рис.5, справа сверху). Сигналы с концевого выключателя и датчика давления подаются на две входных цифровых линии микроконтроллера и используются программой управления для блокировки шагов двигателя.
Таким образом, в данном примере универсальный микроконтроллер ATMega16 выполняет две основные функции, полностью заменяя соответствующие специализированные контроллеры.
1. Контроллер шины USB для связи с персональным компьютером.
2. Контроллер шагового двигателя.
Устройство позволяет дозировать жидкости в произвольных режимах, ограниченных только конструкцией насоса (максимальный разовый объем – 2.5 мл и максимальная скорость подачи – около 1 мл/мин). В данной версии программного обеспечения реализованы следующие режимы.
1. Подача жидкости с программируемой скоростью, в том числе и изменяющейся во времени.
2. Подача заданного объема жидкости с накоплением или без него. При этом скорость подачи тоже может контролироваться персональным компьютером.
Подробное описание этой разработки, схемы и исходные тексты программ приведены в [7].
Последний пример также иллюстрирует комплексное использование ресурсов универсального микроконтроллера для задач регистрации и контроля температуры. Здесь микроконтроллер ATMega16 выполняет следующие функции.
1. Контроллер шины USB для связи с персональным компьютером.
2. Контроллер шины 1-Wire для работы с датчиками температуры DS18B20.
3. Контроллер силового модуля регулировки мощности нагревателя.
Задача реализована в виде небольшого стенда, общий вид которого представлен на Рис.6. Он содержит макет водяной бани, состоящей из стакана с водой, нагревателя, датчика температуры DS18B20 и магнитной мешалки. Второй температурный датчик DS18B20 измеряет температуру окружающей среды и расположен непосредственно на плате микроконтроллера. Значение этой температуры необходимо для работы компенсатора тепловых потерь термостата в одном из алгоритмов регулирования температуры [8].
Еще один компонент стенда – силовой модуль. Он предназначен для регулировки мощности нагревателя. Принцип работы – регулирование количества полупериодов, пропущенных в нагрузку. Модуль выполнен на симисторе BT137-600 с оптической развязкой в виде оптосимистора MOC3061, который снабжен детектором перехода напряжения через ноль (Zero Crossing). Это существенно упрощает схему модуля и управление им.
Для управления силовым модулем используется ШИМ (широтно-импульсная модуляция) сигнал таймера TIMER1 микроконтроллера ATMega16, причем частоту следования импульсов и скважность можно программировать. Эти параметры определяют мощность нагревателя и могут быть установлены через виртуальный USB-порт из программы на PC. Через этот же USB порт в персональный компьютер поступают данные с двух температурных датчиков. Это дает возможность реализовать практически любой закон изменения температуры бани (естественно, в рамках динамических характеристик самой бани).
Подробное описание этой разработки, схемы и исходные тексты программ приведены в [8]. Там же приведены результаты экспериментов с различными алгоритмами регулирования температуры и примеры различных режимов нагрева/охлаждения бани.
В данной статье рассмотрена возможность использования виртуальных USB-портов для задач автоматизации лабораторного эксперимента. Приведенные примеры показывают, что реализация таких портов на основе универсальных микроконтроллеров дает недорогие, быстрые и, как правило, эффективные решения типовых экспериментальных задач. Применение этого подхода к устаревшим приборам (пример с Милихромом) или работоспособным узлам таких приборов (пример с pH-метром и микродозатором) способно дать «вторую жизнь» этому оборудования, причем, - совсем в другом, вполне современном качестве.
Доброго всем дня, сегодняшняя статья будет посвящена реализации виртуального COM-порта для микроконтроллеров STM32. Эта тема уже поднималась на нашем сайте, но, в отличие от всех предыдущих случаев, сегодня мы будем производить все настройки при помощи STM32CubeMx. Собственно, стартуем.
И начинаем с действий, ставших привычными - создаем новый проект в CubeMx. Я буду использовать отладочную плату STM32F4Discovery и, соответственно, выбираю контроллер STM32F407VG при создании проекта.
С этим никаких сложностей возникнуть не должно, все-таки мы уже много раз проделывали это в предыдущих статьях, посвященных STM32CubeMx (статьи про STM32CubeMx), поэтому давайте сформулируем задачу, которую будем сегодня решать.
А задача проста - реализуем поддержку USB Virtual Com Port и отправим тестовый набор данных с платы на ПК. Таким образом, мы должны добиться определения нашей отладочной платы в системе как виртуального COM-порта. А открыв этот порт в какой-нибудь терминальной программе мы должны будем увидеть правильно принятые данные. Просто и наглядно, приступаем к осуществлению.
Первым делом включим поддержку USB в проекте. Для этого посещаем вкладку "Pinout & Configuration":
Кроме того, задействуем внешний тактовый генератор (8 МГц), установленный на плате - ровно так же как мы делали в статье про тактирование:
Осталось выбрать режим работы USB для нашего устройства:
На этом первый этап настроек проекта закончен, переходим в окно настроек тактирования (вкладка "Clock Configuration"). Здесь нам необходимо обеспечить подачу ровно 48 Мгц для тактирования модуля USB, привожу полную схему с выставленными значениями:
Среди многочисленных настроек USB давайте поменяем только PRODUCT_STRING , исключительно теста ради, проверим, как это сработает. Остальное пока не трогаем:
В принципе, на этом все, можно смело переходить к генерации проекта и исходного кода.
Немного обождав, пока CubeMx завершит генерацию, получаем готовый проект, в котором выполнена вся необходимая инициализация. Давайте не будем вносить никаких изменений, а просто соберем проект и запрограммируем контроллер. После этого подключаем USB-кабель к плате и в диспетчере устройств видим новое устройство:
Если мы зайдем в свойства, то можем увидеть там значения VID и PID, которые были установлены в настройках STM32CubeMx, а кроме того измененную нами строку PRODUCT_STRING :
Никаких сомнений в правильной работе сгенерированного проекта не остается 👍 Но это только часть задачи, нужно реализовать отправку данных. А необходимые для этого функции находятся в файле usbd_cdc_if.c:
- CDC_Receive_FS() - для приема данных.
- CDC_Transmit_FS() - для передачи данных.
Итак, давайте в основном цикле нашей программы будем раз в секунду отправлять 8 тестовых байт. Кстати для реализации простейших временных задержек в HAL присутствует функция HAL_Delay() . В качестве аргумента мы должны передавать количество миллисекунд. В общем, получаем такой код:
Теперь остается только прошить контроллер, открыть терминал и убедиться, что данные принимаются верно. Так и делаем:
Все работает отлично, как и планировалось. Собственно, на этой мажорной ноте мы заканчиваем сегодняшнюю статью, а вместе с ней и обсуждение реализации USB Virtual COM Port при помощи STM32CubeMx. В следующих статьях мы будем работать уже с другими режимами USB, так что оставайтесь на связи 🤝
С развитием технологий развиваются и периферийные устройства. Все больше конечных устройств оставляют устаревшую RS-232 связь и переходят на новые USB коннекторы и стандарты. Процесс логичен и ведет к известным изменениям в использованной технологии обмена данных. Принципы новой технологии аналогичны, при наличии известных особенностей настройки устройства и выбора соответствующего COM порта.
Содержание
Выводы
Настройка новых устройств, работающие через COM порт не является сложной и требует установки дополнительных драйверов. После чего настройка следует стандартных принципов, без разницы с классическими параметрами. При каждом индивидуальном устройстве нужно просмотреть документацию и определить правильный драйвер. Практика показывает, что почти не существует компании, которая не поддерживает данный механизм для обмена данных, где реально это самый правильный способ для связи с периферийным устройством. Специалистам остается сконфигурировать систему правильно и настроить работу с виртуальным COM портом.
Исключения
Очень редко существуют исключения указанного принципа действий. При некоторых устройствах производитель решил, что нет необходимости, а соответственно и не существует эмуляция COM порта. В таком случае обмен происходит на уровне HID интерфейса USB порта. Если устройство данного типа, то его добавление в систему требует создания индивидуального драйвера для данного устройства и изменение программы. К счастью, такие устройства являются редкостью и не особо популярны у ведущих производителей.
Массовые USB-2-COM переходники
Частный случай виртуального COM порта является переходник с USB к COM. Переходник работает по такому же принципу, как описано в данной статье, но является отдельным устройством в собственном корпусе. Самые часто встречающиеся переходники:
- Серия Aten;
- Серия Prolific;
- Серия Manhattan.
Их настройка не отличается от настройки устройств со встроенным USB интерфейсом. Их задача привести USB коммуникацию к более старому COM порту и сделать возможной связь с новыми интерфейсами. Нужно обратить внимание, что переходники не всегда поддерживают все аппаратные сигналы (не все кабеля коннектора связаны), что иногда делает невозможной работу реального устройства через переходник. В таких случаях нужно использовать реальный COM порт.
Настройка софтвера
Реальная настройка софтвера ничем не отличается от настройки стандартного RS-232 устройства. Разница в том, что выбирается виртуальный COM порт, а не реальный. Программное обеспечение работает без того, чтобы определять вид COM порта. Особенность в том, что виртуальный COM существует только когда устройство включено, т.е если устройство отсутствует или выключено, его COM порт невидим для прикладной программы. Это очень важно, потому что если устройство настроено, после чего выключится и активируется настройка, она укажет на несуществующий COM порт и программ может вывести ошибку. Иногда получается, что виртуальный COM порт работает на произвольной скорости, т.е. нет значения какая скорость обмена выбрана в настройках продукта. Так как USB драйвер эмулирует передачу данных, то скорость обмена не имеет значение, и любая скорость подходящая.
Виртуальный COM порт
Виртуальный COM порт устанавливается через добавление соответствующего индивидуального драйвера в операционной системе. Данный COM порт существует только когда устройство включено и работает. Процедура создания виртуального COM порта следующая:
- Устройство подключается к компьютеру в первый раз;
- Операционная система его определяет и автоматически пытается установить подходящий драйвер;
- В зависимости от результата может потребовать указать на дополнительный драйвер для управления устройством. Драйвер должен быть предназначен для виртуального COM порта;
- При установки драйвера добавляется новый COM порт, который соответствует новому устройству.
После выполнении данной процедуры появится новый, виртуальный COM порт. Именно данный порт осуществляет связь между программным обеспечением и аппаратом. В редких случаях существуют несколько различных драйверов. Для использования данной технологии важно установить именно драйвер для виртуального COM.
Режим совместимости
Как уже упоминалось, USB устройство добавляет дополнительный COM порт в систему. В большинстве случаев это стандартное поведение на связь между операционной системой и USB устройством, но есть и исключения. Исключением являются специализированные устройства, которые могут работать по нескольким разным технологиям. В таком случае важно выбрать режим совместимости, при котором создается виртуальный COM порт. Именно данный режим является темой данной статьи. Другие режимы работы не стандартные и требуют специального программирования для каждого устройства. При таких режимах не создается COM порт, и настоящая технология не может быть использована.
Основы технологии
Основная часть новых устройств используют эмуляцию COM порта через стандартную USB связь. По отношению к железу это представляет собой соответствующий чип и драйвер, который управляет USB устройством через добавленный (виртуальный) COM порт. Для ПО это практически невидимо, потому как у нового COM порта такие же свойства как и у реального аппаратного COM порта. Драйвер транслирует информацию от виртуального COM порта к новому USB интерфейсу. Все это делает настройку легкой, быстрой и аналогичной стандартной настройке системы.
Читайте также: