Как создать виртуальный COM-порт через USB на микроконтроллере. Какие проекты позволяют реализовать виртуальный COM-порт. Как настроить и использовать виртуальный COM-порт в Windows. Почему USB-порты иногда называют последовательными портами и COM.
Создание виртуального COM-порта на микроконтроллере
Виртуальный COM-порт позволяет обмениваться данными между компьютером и микроконтроллером через USB-интерфейс, эмулируя работу обычного последовательного порта. Рассмотрим два проекта для создания виртуального COM-порта на микроконтроллерах AVR:
Проект CDC-232
CDC-232 создает виртуальный COM-порт на компьютере и позволяет обмениваться данными по стандарту RS-232 с другим устройством, например, микроконтроллером. Основные особенности:
- Использует библиотеку V-USB для программной реализации USB
- Поддерживает микроконтроллеры ATtiny45/85, ATtiny2313, ATmega8/48/88
- Скорость передачи данных до 57600 бит/с (для ATmega)
- Не поддерживает сигналы управления потоком (DTR, DTS, RTS, CTS)
Проект CDC-IO
CDC-IO также создает виртуальный COM-порт, но предназначен для управления ресурсами самого микроконтроллера AVR. Возможности:
- Чтение и запись регистров специального назначения (SFR)
- Управление портами ввода-вывода
- Работа с таймерами, ШИМ, АЦП, EEPROM
- Поддержка текстовых команд для управления
Принципиальные схемы для реализации виртуального COM-порта
Для создания виртуального COM-порта через USB требуется простая схема на основе микроконтроллера AVR. Основные компоненты:
- Микроконтроллер AVR (ATtiny45/85, ATtiny2313, ATmega8/48/88)
- Кварцевый резонатор на 12 МГц или 16 МГц
- Резисторы и конденсаторы для обвязки
- Светодиод для индикации
- USB-разъем
Схемы незначительно отличаются в зависимости от используемого микроконтроллера. Важно использовать именно кварцевый резонатор для стабильной работы USB.
Настройка виртуального COM-порта в Windows
После подключения устройства с виртуальным COM-портом к компьютеру необходимо выполнить его настройку в Windows:
- Установить драйвер, если Windows не распознала устройство автоматически
- Открыть Диспетчер устройств
- Найти устройство в разделе «Порты (COM и LPT)»
- Изменить номер COM-порта, если требуется (рекомендуется использовать COM1-COM4)
- Настроить параметры порта (скорость, биты данных и т.д.)
После этого виртуальный COM-порт будет готов к использованию в приложениях.
Почему USB-порты иногда называют последовательными портами и COM?
Существует некоторая путаница в терминологии, связанной с последовательными портами. Разберемся в основных понятиях:
- UART — универсальный асинхронный приемопередатчик, формирующий последовательный протокол передачи данных
- RS-232, RS-422 — стандарты физического уровня (напряжения, разъемы)
- COM-порт — обозначение последовательного порта в Windows
- Последовательный порт — порт для передачи данных последовательным потоком битов
USB-порты могут эмулировать работу классических последовательных портов, отсюда и возникает путаница в терминологии. Виртуальный COM-порт через USB позволяет работать с USB-устройством так же, как с обычным последовательным портом.
Преимущества использования виртуального COM-порта
Создание виртуального COM-порта через USB имеет ряд преимуществ по сравнению с использованием физического последовательного интерфейса:
- Не требуется отдельный COM-порт на компьютере
- Питание устройства может осуществляться через USB
- Более высокая скорость передачи данных
- Возможность подключения нескольких устройств
- Простота реализации на современных микроконтроллерах
Это делает виртуальный COM-порт удобным решением для связи компьютера с микроконтроллерами и другими встраиваемыми системами.
Применение виртуального COM-порта в проектах
Виртуальный COM-порт через USB находит широкое применение в различных проектах:
- Отладка встраиваемых систем и микроконтроллеров
- Обмен данными между компьютером и электронными устройствами
- Управление роботами и автоматизированными системами
- Программирование микроконтроллеров
- Считывание показаний с датчиков и измерительных приборов
Простота реализации и совместимость со стандартными средствами работы с COM-портами делают это решение популярным среди разработчиков.
Особенности программирования для работы с виртуальным COM-портом
При разработке программного обеспечения для работы с виртуальным COM-портом следует учитывать некоторые особенности:
- Инициализация порта может отличаться от работы с физическим COM-портом
- Необходимо корректно обрабатывать отключение и переподключение USB-устройства
- Скорость передачи данных может быть выше, чем у стандартных COM-портов
- Возможно использование дополнительных функций, специфичных для конкретной реализации виртуального COM-порта
При соблюдении этих особенностей работа с виртуальным COM-портом будет максимально надежной и эффективной.
Создание виртуального порта — Windows drivers
- Статья
- Чтение занимает 5 мин
Виртуальный порт (впорт) — это объект данных, который представляет внутренний порт коммутатора сетевого адаптера, поддерживающего единую корневую виртуализацию ввода-вывода (SR-IOV). Каждый коммутатор сетевого адаптера имеет следующие порты для сетевого подключения:
Один внешний физический порт для подключения к внешней физической сети.
Одна или несколько внутренних Впортс, подключенных к физической функции PCI Express (PF) или виртуальным функциям (VFs).
Общая папка подключена к родительскому разделу Hyper-V и предоставляется в виде виртуального сетевого адаптера в операционной системе управления, работающей в этом разделе.
Клиент VF подключается к дочернему разделу Hyper-V и предоставляется в качестве виртуального сетевого адаптера в гостевой операционной системе, работающей в этом разделе.
Существует два типа Впортс:
Впорт по умолчанию
По умолчанию впорт обеспечивает сетевое подключение к сетевым компонентам, выполняемым в операционной системе управления. Впорт по умолчанию имеет идентификатор NDIS_DEFAULT_VPORT_ID.
Когда драйвер минипорта PF создает и настраивает коммутатор сетевого адаптера по умолчанию, драйвер неявно создает впорт по умолчанию и прикрепляет его к PF. Впорт по умолчанию нельзя подключить к VF.
Впорт по умолчанию всегда находится в активном состоянии и не может быть явно удален. Драйвер минипорта PF неявно удаляет впорт по умолчанию только при удалении коммутатора сетевого адаптера по умолчанию.
Дополнительные сведения о создании коммутатора сетевого адаптера и впорт по умолчанию для коммутатора см. в разделе Создание коммутатора сетевого адаптера.
Впорт не по умолчанию
Нестандартные Впортс не создаются неявно при создании коммутатора NIC. Драйвер с избыточностью, такой как стек виртуализации, явно создает эти порты, выдавая запросы метода OID OID_NIC_SWITCH_CREATE_VPORT. Нестандартные Впортс могут быть присоединены к PF или к VF и могут быть созданы только после создания коммутатора NIC.
Впорт, не используемый по умолчанию, подключенный к VF, обеспечивает сетевое подключение к сетевым компонентам, выполняемым в гостевой операционной системе. После создания и присоединения к VF впорт, не используемый по умолчанию, находится в состоянии activated.
Впорт, не используемый по умолчанию, подключенный к PF, предоставляет дополнительные возможности сетевой разгрузки для сетевых компонентов, работающих в операционной системе управления. Например, нестандартные Впортс в этой PF можно использовать для предоставления возможностей разгрузки, аналогичных интерфейсу очереди виртуальных машин (VMQ).
Примечание . Впортс не по умолчанию можно создать только после создания коммутатора сетевого адаптера.
Драйвер с ограниченным доступом выдает запрос метода идентификатора объекта (OID) OID_NIC_SWITCH_CREATE_VPORT для создания нестандартного впорт для указанного КОММУТАТОРА сетевого адаптера. Этот запрос OID также присоединяет созданный впорт к PF сетевого адаптера или ранее выделенному VF.
Элемент информатионбуффер структуры NDIS_OID_REQUEST содержит указатель на структуруNDIS_NIC_SWITCH_VPORT_PARAMETERS . После успешного возврата из запроса OID_NIC_SWITCH_CREATE_VPORT элемент впортид структуры NDIS_NIC_SWITCH_VPORT_PARAMETERS имеет идентификатор впорт, уникальный для впортс коммутатора сетевого адаптера.
Драйвер с ограниченными правами Инициализирует структуру NDIS_NIC_SWITCH_VPORT_PARAMETERS , используя сведения о конфигурации для создаваемого впорт не по умолчанию. Сведения о конфигурации включают в себя функцию PCIe, к которой прикрепляется впорт, не используемую по умолчанию, и число пар очередей для впорт, не используемого по умолчанию.
При инициализации структуры NDIS_NIC_SWITCH_VPORT_PARAMETERS драйвер с перестороной должен выполнять следующие действия:
Для члена свитчид необходимо задать идентификатор коммутатора сетевого адаптера, который ранее был создан на сетевом адаптере с помощью запроса метода OID OID_NIC_SWITCH_CREATE_SWITCH.
Примечание . начиная с Windows Server 2012 интерфейс SR-IOV поддерживает только один коммутатор NIC на сетевом адаптере. Этот параметр называется коммутатором сетевого адаптера по умолчанию. При создании впорт, не использующего по умолчанию, драйвер с ограниченным указанием должен задать для члена свитчид идентификатор NDIS_DEFAULT_SWITCH_ID.
Для элемента впортид необходимо задать значение NDIS_DEFAULT_VPORT_ID.
Элемент
Значение NDIS_PF_FUNCTION_ID указывает PF. В противном случае значение должно быть равно идентификатору VF, ресурсы которого были ранее выделены с помощью запроса метода OID OID_NIC_SWITCH_ALLOCATE_VF.
Примечание . Вложение впорт, не используемого по умолчанию, в VF или PF невозможно изменить после создания впорт, не используемого по умолчанию.
Драйвер с ограниченным использованием может также указывать количество пар очередей, назначенных впорт. Пара очередей — это очередь передачи и получения на сетевом адаптере, назначенном впорт. Если сетевой адаптер поддерживает асимметричные пары очередей для Впортс, не используемых по умолчанию, драйвер с вероятностью может указывать разное количество пар очередей для каждого впорт, создаваемого драйвером. Дополнительные сведения см. в разделе симметричное и асимметричное назначение пар очередей.
Драйвер с ограниченным расчетом вызывает ндисоидрекуест , чтобы выдать запрос OID_NIC_SWITCH_CREATE_VPORT к базовому драйверу минипорта PF. Прежде чем NDIS пересылает запрос метода OID в драйвер минипорта, он выполняет следующие действия:
NDIS проверяет параметры в структуре NDIS_NIC_SWITCH_VPORT_PARAMETERS . Если параметры имеют значение Error, то NDIS не выполняет запрос метода OID и не передает запрос драйверу минипорта PF.
NDIS назначает идентификатор для впорт, не используемого по умолчанию, в диапазоне от одного до (нумвпортс– 1), где Нумвпортс — число впортс, настроенных драйвером минипорта на сетевом адаптере. Драйвер задает этот номер в элементе нумвпортс структуры NDIS_NIC_SWITCH_INFO . Драйвер возвращает эту структуру с помощью запроса OID запроса OID_NIC_SWITCH_ENUM_SWITCHES.
Примечание . Идентификатор впорт NDIS_DEFAULT_VPORT_ID зарезервирован для впорт по умолчанию, который прикрепляется к PF на коммутаторе сетевого адаптера по умолчанию.
Назначенный идентификатор впорт однозначно определяет впорт, не используемый по умолчанию, на коммутаторе сетевого адаптера.
- NDIS задает элемент впортид структуры NDIS_NIC_SWITCH_VPORT_PARAMETERS с назначенным идентификатором впорт.
Когда драйвер минипорта PF выдает запрос OID, драйвер выделяет аппаратные и программные ресурсы, связанные с указанным впорт, не используемым по умолчанию. После успешного выделения всех ресурсов драйвер минипорта PF успешно завершает идентификатор объекта, возвращая NDIS_STATUS_SUCCESS из минипортоидрекуест.
Если запрос OID_NIC_SWITCH_CREATE_VPORT успешно выполнен, драйвер минипорта PF и драйвер с перестороной должны хранить значение впортид нестандартного впорт для последующих операций. Во время выполнения этих операций используется значение впортид :
NDIS и драйверы с ограниченными правами используют значение впортид для определения нестандартного впорт в последовательных запросах OID, связанных с этим впорт, например OID_NIC_SWITCH_VPORT_PARAMETERS и OID_NIC_SWITCH_DELETE_VPORT.
Во время операций отправки NDIS указывает значение впортид для указания впорт, из которого был отправлен пакет. Это значение задается во внешнем (OOB) NDIS_NET_BUFFER_LIST_FILTERING_INFO данных структуры NET_BUFFER_LIST .
Во время операций получения драйвер минипорта PF определяет значение впортид , на которое пересылается пакет. Это значение также указывается в данных NDIS_NET_BUFFER_LIST_FILTERING_INFO OOB структуры NET_BUFFER_LIST .
Следующие моменты применяются к созданию Впортс, не используемых по умолчанию:
Фильтры получения для управления доступом к носителю (MAC) и виртуальных локальных сетей (VLAN) настраиваются в впорт после ее создания. Драйверы с избыточными драйверами динамически устанавливают эти фильтры получения, выдавая запросы метода OID OID_RECEIVE_FILTER_SET_FILTER. Фильтры получения можно также перемещать из одного впорт в другой с помощью запросов Set OID OID_RECEIVE_FILTER_MOVE_FILTER.
Впорт, не используемый по умолчанию, присоединенный к VF, находится в активном состоянии при его создании. Впорт невозможно деактивировать, если он подключен к VF.
Нестандартный впорт, прикрепленный к PF, находится в деактивированном состоянии при ее создании. Драйвер с превышением доверия, такой как расширяемый модуль коммутатора Hyper-V, явно активирует нестандартный впорт, прикрепленный к записи PF после успешного создания впорт. Это делается путем отправки запроса метода OID OID_NIC_SWITCH_VPORT_PARAMETERS драйверу минипорта PF.
Когда драйвер с передающей стороной выдает этот запрос OID, он передает NDIS_NIC_SWITCH_VPORT_PARAMETERS структуру с набором элементов впортстате в ндисниксвитчвпортстатеактиватед.
После того как впорт, не используемый по умолчанию, находится в активном состоянии, драйвер минипорта PF может выделить общую память для впорт, вызвав ндисаллокатешаредмемори. Драйвер должен задать для элемента впортид в структуре NDIS_SHARED_MEMORY_PARAMETERS значение идентификатора впорт.
Примечание . Если впорт, не используемый по умолчанию, находится в активном состоянии, оно устанавливается в состояние деактивировано только при удалении с помощью запроса Set OID, OID_NIC_SWITCH_DELETE_VPORT.
AVR-CDC: виртуальный COM-порт через Low-Speed USB (используется библиотека V-USB) | avr-working-with-usb
В статье описывается 2 проекта, основанные на библиотеке V-USB — CDC-232 и CDC-IO. Автор — Osamu Tamura @ Recursion Co., Ltd.
Оба проекта представляют из себя простую схему на микроконтроллере AVR (ATtiny45/85, ATtiny461, ATtiny2313, ATmega8/48/88), которая при подключении к порту USB компьютера (далее просто PC) создает виртуальный COM-порт. В обоих проектах используется бесплатная библиотека V-USB, которая позволяет средствами firmware, прошитого в микроконтроллер AVR, поддержать работу интерфейса USB. Первый проект (CDC-232) создает на компьютере виртуальный COM-порт, через который можно обмениваться данными с каким-нибудь другим устройством, имеющим низковольтный RS-232C (например, с микроконтроллером AT89C51 Atmel). Второй проект (CDC-IO) тоже создает виртуальный COM-порт, но он предназначен для управления ресурсами микроконтроллера (регистрами внутреннего назначения). То есть посылкой простых текстовых команд в консольной программе Вы можете менять состояние ножек микроконтроллера AVR, читать их состояние, управлять таймерами — счетчиками, PWM, читать ADC и т. д.
[CDC-232]
CDC-232 создает виртуальный COM-порт на PC, даже если он не имеет реального порта RS-232C. Это позволяет производить обмен данными RS-232C (без сигналов управления) после подсоединения устройства и установки драйвера.
Виртуальный COM-порт, работающий через программную реализацию USB
[Применение CDC-232]
Запрограммируйте AVR, спаяйте схему и подключите устройство в порт USB компьютера. Установите драйвер (если у Вас операционная система Windows). Получите доступ к устройству через сгенерированный виртуальный COM-порт из программы терминала или написанную Вами программу (которая работает с COM-портом). Сигналы управления (DTR, DTS, RTS, CTS) не используются, поэтому настройте программу терминала в режим «no flow-control» (без контроля потока).
Windows запросит установку драйвера заново всякий раз, когда Вы подключите устройство в другой порт USB. Ранее установленный драйвер детектируется автоматически. Будет назначен другой номер COM-порта. Если Вы установите серийный номер в AVR (пересоберите исходный код с новым usbconfig.h), Вы можете получить тот же самый номер COM-порта на любом порте USB. Но в этом случае Вы не можете подключить сразу несколько устройств CDC с одним и тем же серийным номером.
Перед тем, как отсоединить устройство, закройте COM-порт в терминальной программе или в Вашем самописном приложении. В противном случае Вы не сможете подключить устройство снова из-за неверного дескриптора файла (broken file handle). В этом случае перезапустите программу терминала или Ваше приложение. Переключиться в режим быстрой передачи можно использованием «lowcdc.vbs», при этом можно получить скорость выше 9600 bps.
Loop-back тест на версии ATtiny45
[Принципиальные схемы CDC-232]
Эти схемы рассчитаны на ATtiny45/85, ATtiny2313/AT90S2313 и ATmega8/48/88/168. У всех этих микроконтроллеров firmware программируется через ISP. Красный LED понижает напряжение USB от 5V до 3.3V, и предоставляет его для AVR. Ток потребления около 10mA, и его мало для питания других узлов. Когда подключаетесь к другому MCU (микроконтроллеру), соедините Gnd и соедините TxD и RxD крест-накрест. R4 ограничивает обратный ток, когда внешний MCU питается от Vcc 5V (Вы можете R4 не ставить, если напряжение питания внешнего MCU равно 3.3V). R5 защищает ножку TxD, когда она замкнута на Gnd. Вы можете опустить и R4 и R5, если Вы соединяетесь через RS-232C драйвер наподобие MAX232. Используйте кварцевый резонатор. Несмотря на то, что керамический резонатор в большинстве случаев работает хорошо, но для данного применения он не подходит, поскольку уход частоты слишком большой, и поэтому устройство может работать нестабильно.
ATtiny45/85 использует внутренний RC-генератор и PLL. Он откалиброван на частоту 16.5 МГц по частоте сигнала SOF (Start Of Frame) порта USB, когда устройство подключено к PC. UART в этом случае реализован программно. Он не может поддерживать высокую скорость передачи данных. Если TxD и RxD проинвертированы (пересоберите проект с опцией -DINVERT), Вы можете напрямую подключиться к сигналам RS-232C. Формат настройки порта 300-4800bps, 8N1.
CDC-232 для ATtiny45-20
Пример на ATtiny45 с использованием коннектора mini-B
У микроконтроллера ATtiny2313/AT90S2313 всего лишь 2 KB памяти программ. Механизм установки терминала опущен (т. е. автодетекта скорости нет). Установите переключатель DIP для смены скорости.
CDC-232 для ATtiny2313-20
У микроконтроллеров ATmega8/48/88’s внутренний UART конфигурируется от PC автоматически. Формат настройки 1200-57600bps, данные 7/8, четность N/E/O, количество стоп-бит 1/2
CDC-232 для ATmega8/48/88-20
Подключение к физическим линиям RS-232C требует инверсии полярности TxD и RxD, а также соответствие уровней сигнала. Используйте специальную IC наподобие MAX232. Вы можете её заменить простыми схемами (см. далее).
Когда целевой MCU имеет другое питание Vcc (отличное от 3.3V), образуются обратные токи утечки через сигнальные линии. Это искажает сигнал, либо подпитывает MCU без источника питания. Эта схема не очень хороша, но достаточна для большинства случаев.
[CDC-IO]
CDC-IO управляет регистрами специального назначения (Special Function Registers, SFR) микроконтроллера AVR через виртуальный COM-порт на PC. Это позволяет свободно читать/записывать параллельные порты MCU (ножки микроконтроллера). Работают также операции с таймерами/счетчиками, PWM, ADC, EEPROM, что позволяет приложению на PC достичь очень глубокого управления микроконтроллером и разрабатываемым на нем устройством.
Внешний интерфейс с использованием программной реализации протокола USB
[Применение CDC-IO]
Инсталляция такая же, как и у CDC-232. Скорость COM-порта произвольна. Отправка текстовых команд происходит через программу терминала или из вашей программы на PC. Если Вы хотите получить более высокую скорость передачи, используйте «lowcdc.vbs» для переключения в bulk transfer mode.
Набор команд CDC-IO (Instruction Set)
Функция | Команда | Формат | Ответ |
Who | @ | @ | «cdc-io», CR-LF |
Get | ? | address ? | data, CR-LF |
Set | = | data address = | CR-LF |
AND & Set | & | data address & | CR-LF |
OR & Set | | | data address | | CR-LF |
EX-OR & Set | ^ | data address ^ | CR-LF |
Set Double | $ | data2 data1 address $ | CR-LF |
Версия с ATtiny2313 имеет только команды «Set», «Get», «Xor».
В таблице команд использованы следующие обозначения:
address: адрес регистра SFR, отображенный на память (memory mapped) в hex-формате
data: 8 бит данные в hex
разделитель: Tab, Space, CR, LF
predefined addr (предопределенные символические адреса, case-insensitive, НЕ поддерживаются ATtiny2313): PINB, DDRB, PORTB PINC, DDRC, PORTC PIND, DDRD, PORTD
Примеры (‘_’ означает разделитель):
DDRB_?_ Возвращает значение DDRB вместе с CR-LF.
12_34_=_ Запись 0x12 по адресу 0x34, в ответ возвращает CR-LF.
FB_PORTC_&_ Запись (PORTC & 0xFB) в PORTC, возвращает CR-LF.
(примеры для ATtiny2313)
36_?_ Возвращает величину PINB(0x36) вместе с CR-LF.
12_37_=_ Запись 0x12 по адресу DDRB(0x37), возвращает CR-LF. ‘ для модифицирования направления порта (вход или выход). Используйте PIN* для переключения бит в противоположное состояние (toggle), если порт назначен как выход (output).
Когда разрешены прерывания, сообщается номер вектора прерывания, когда оно вызывается.
Все регистры SFR доступны. См. даташит AVR для использования таймеров, ADC, EEPROM, и т. п.
[Принципиальные схемы CDC-IO]
Если напряжение питания Vcc целевой схемы равно 5V, и порты AVR сконфигурированы как входы, поставьте резисторы (3K3…10Kом) для предотвращения обратного тока. Используйте только кварцевый резонатор. Несмотря на то, что керамический резонатор в большинстве случаев работает хорошо, но для данного применения он не подходит, поскольку уход частоты слишком большой, и поэтому устройство может работать нестабильно.
ATtiny45/85 использует внутренний RC-генератор и PLL. Он откалиброван на частоту 16.5 МГц по частоте сигнала SOF (Start Of Frame) порта USB, когда устройство подключено к PC.
CDC-IO для ATtiny45-20
CDC-IO для ATtiny461-20
Для ATtiny2313 реализованы только команды «Set», «Get» и «Xor» из-за ограниченной памяти программ этого микроконтроллера. Эта версия также не имеет механизма interrupt-report.
CDC-IO для ATtiny2313-20
CDC-IO для ATmega8/48/88-20
[Пример программы]
Это экспериментальная схема и пример программы для ATmega8/48. Программа написана на C, VB, VC, VC++ и C#. Вы можете использовать другие языки (или макросы), если они могут работать с портом RS-232C.
На фото показан внешний вид экспериментальной схемы
Регулятор изменяет тон пищалки и маску мигания светодиодов.
[Пример управления без программы]
Операционные системы позволяют работать с COM-портами, как с обычными файлами. Вот так, например, под Windows Вы можете послать команду устройству, которое создает виртуальный COM-порт COM3 (в текстовом файле comands. txt записана последовательность команд):
c:\temp>copy comands.txt COM3
1 file(s) copied.
Что интересно — под Windows XP можно использовать только имена COM1..COM9. Имена COM10, COM11, COM12, COM13 и далее Windows не воспринимает как системные, и думает, что это не порт, а файл (даже если такой порт реально имеется в Диспетчере Устройств).
[Ссылки]
1. Исходные тексты программ и firmware, описанные в статье, документация, драйвер для w2k, XP, Vista.
2. Проект CDC-232, портированный на AVR-USB-MEGA16 (ATmega16 с кварцем на 16 МГц).
3. AVR-CDC — Virtual COM Port over Low-Speed USB site:recursion.jp — сайт AVR-CDC Osamu Tamura @ Recursion Co.
4. USB консоль для управления радиолюбительскими приборами.
Настройка виртуальных COM-портов Windows USB
Различные интерфейсные модули USB, производимые Technological Arts, основаны на популярном чипе FTDI FT232RL. Обычно Windows распознает их, когда вы подключаете их к USB-порту на вашем компьютере. Если этого не произойдет, вам потребуется загрузить и установить соответствующий драйвер с веб-сайта FTDI (www.ftdichip.com). Драйвера предоставляются для различных версий Windows. Загрузите и установите правильную версию для конфигурации вашего компьютера, прежде чем продолжить.
Теперь подключите USB-кабель к USB-порту вашего ПК и используемому интерфейсному модулю USB. Windows должна сообщить, что новое устройство найдено, и приступить к его инициализации. Чтобы определить, какому виртуальному COM-порту он назначен, щелкните правой кнопкой мыши значок MyComputer на рабочем столе Windows и выберите Properties во всплывающем меню. Затем щелкните вкладку Hardware и нажмите кнопку Device Manager .
Щелкните значок + рядом с Порты (COM и LPT) . Откроется список доступных портов. Вы увидите один из них под названием USB Serial Port с назначенным номером COM-порта, указанным в скобках.
Для работы с большинством инструментов, которые вы, вероятно, будете использовать с микроконтроллерами, COM-порт должен быть 1, 2, 3 или 4. Если он выше, чем COM4, вы, вероятно, захотите его изменить. . Сделайте это, щелкнув правой кнопкой мыши строку « USB Serial Port ” и выберите Properties во всплывающем меню
Щелкните вкладку Port Settings , а затем нажмите кнопку Advanced… .
В раскрывающемся списке Номер COM-порта выберите номер COM-порта 2, 3 или 4 (обычно COM1 уже используется).
Номер порта может быть указан как «используемый», но на данном этапе вы можете игнорировать это, если знаете, что в настоящее время он ничем не используется.
Нажмите OK , и если Windows предупредит вас о дублировании, проигнорируйте предупреждение и нажмите Да . Нажмите OK , а затем OK для настройки порта. Затем закройте окно диспетчера устройств . Если вы хотите подтвердить, что изменение порта действительно было сделано, снова нажмите Диспетчер устройств и проверьте перечисленные порты. Теперь закройте окно Свойства системы .
Теперь вы готовы использовать виртуальный COM-порт в любом приложении!
Обратите внимание, что если вы отсоедините USB-устройство и подключите его позже, Windows все равно запомнит назначение COM-порта, поэтому вам не нужно будет повторять эту процедуру снова. Однако существует известная проблема Windows, затрагивающая большинство приложений. Виртуальный COM-порт будет удален из диспетчера устройств при отключении USB-кабеля, даже если виртуальный COM-порт открыт в приложении. Виртуальный COM-порт будет недоступен даже после повторного подключения виртуального последовательного устройства, если виртуальный COM-порт не будет освобожден приложением до повторного подключения, что может потребовать предварительного закрытия приложения. Поэтому рекомендуется закрыть приложение перед отключением USB-устройства.
Почему порты USB иногда называют последовательными портами и COM?
Это очень запутанно, но вам не о чем беспокоиться. Во-первых, подумайте об UART, который сам по себе является общим термином, но подумайте о том, который создает протокол со стартовым битом, одним или двумя стоповыми битами, 7 или 8 обычно битами данных, а иногда и четностью, которая является четной или нечетной; это может варьироваться от этого, что делает его намного хуже.
UART находится на уровне TTL, что бы это ни значило. Раньше это было 5 В, а теперь 3,3 В, 1,8 В или что-то еще; возможно, TTL — неправильный термин. ТОГДА у вас был/есть RS-232, RS-422 и т.д. Это стандарты НАПРЯЖЕНИЯ И ПИН-кода, а не стандарты протокола. Неправильно смешивать термины и говорить RS-232, когда вы имеете в виду какой-то UART.
Когда-то ваш UART был на ваших материнских платах, и вы хотели какой-то разъем для внешнего мира с уровнями напряжения, которые в то время имели смысл, и какую-то стандартную распиновку/кабель. Таким образом, для различных периферийных устройств часто встречался популярный 25- и 9-контактный стандарт, и в мире ПК Wintel это называлось портом связи или иногда последовательным портом.
Конечно, порт, который передает последовательные данные, может и называется последовательным портом, SPI, I²C, MDIO, UART, HDLC, SDLC и т. д. и, возможно, даже USB и SCSI; с этим можно сойти с ума. Обычно последовательный порт означает, что некоторые контакты вы можете получить на UART.
Мир Unix/Linux говорит tty
вместо com
/ серийный
/ uart
, но это одно и то же.
Теперь есть РЕАЛИЗАЦИЯ. Вы можете купить микросхему UART с каким-то интерфейсом (да, у вас может быть SPI UART, который является последовательным на обоих концах, или I²C UART, или какая-то выделенная шина, или USB, и т. д.). Даже когда-то у UART была какая-то шина на одной стороне, через которую в конечном итоге взаимодействовал ЦП. Сегодня у нас есть FTDI и другие поставщики, которые делают хорошие решения USB UART, ничем не отличающиеся от некоторых слоев интерфейса между программным обеспечением и UART, а затем другая сторона UART имеет некоторый интерфейс, будь то уровень TTL/чипа или RS-232C или RS-422 и т. д.
В ранних версиях Arduino вы часто использовали плату FTDI USB-to-UART, которая также обеспечивала питание Arduino. У некоторых есть питание USB и последовательный/UART на самой плате Arduino, а затем он подключается через плату к UART на чипе AVR (то же самое относится к процессору с несколькими слоями шин, чтобы программное обеспечение могло взаимодействовать с UART, который имеет какой-то интерфейс с другой стороны, в данном случае контакты на краю AVR, на уровне напряжения микросхемы, TTL).
Поскольку функциональность UART не менялась десятилетиями, почему терминология программного обеспечения или даже программные приложения должны меняться на уровне приложений? Напишите приложение TTY для Linux/Unix 10-15 лет назад для чипа UART на вашей материнской плате, и есть большая вероятность, что оно все еще работает сегодня с уровнем USB на TTL или USB на уровень RS-232C или RS-422 или любой другой контакт / определение уровня. То же самое касается Windows, и у меня есть такой же старый код, который до сих пор работает на обоих. В мире Windows используется термин COM.
Я давно не использовал песочницу Arduino, а если бы и использовал, то был бы в Linux, но я не удивлюсь, если эта программа на Java, если я правильно помню, является универсальной и использует системное имя, поэтому ttyS2
в Linux и COM2 в Windows.
Перечитывая ваш вопрос, можно пойти гораздо дальше, воспользовавшись преимуществами уже существующего программного обеспечения, использующего эти вызовы API. Опять же, в течение десятилетий нет причин, по которым вы не можете создать виртуальный порт в программном обеспечении, которое переносит эти двунаправленные данные практически во все, что вы можете придумать. UART-Ethernet очень распространен, и в серверных, где серверы все еще очень часто используют порты COM/TTY/RS-232, вы можете иметь терминальный сервер, который имеет несколько интерфейсов, которые вы можете подключить к нескольким серверам, затем Ethernet с другой стороны, затем, если вы решите не использовать telnet, вы можете установить драйвер виртуального COM-порта.