Usb serial adapter что это

Обновлено: 06.07.2024

Некоторое время назад мне в очередной раз потребовался USB-Serial адаптер. И не просто адаптер c RX/TX, а чтобы еще присутствовали управляющие сигналы. И не один UART, а несколько. И еще желательно, в виде одного композитного устройства, чтобы все это хозяйство не занимало больше одного USB-порта. Так и началась эта история.

Готовые устройства из тех, что можно приобрести в магазине, меня не вдохновили. Либо дорого и сложно найти в продаже, либо не подходят по одному или нескольким критериям выше. Композитных USB-Serial адаптеров в дешевом сегменте я и вовсе не смог найти. Зато на столе обнаружилась отладочная плата STM32 Blue Pill на микроконтроллере STM32F103C8T6. Сверившись с документацией, я убедился, что этот микроконтроллер содержит в себе все, что мне нужно для полного счастья. А именно: интерфейс USB 2.0 full-speed, три USART, семиканальный DMA контроллер и достаточное количество линий GPIO для реализации всех интересующих меня управляющих сигналов.

Осталось только раздобыть соответствующую прошивку, которая превратит безжизненный кусок железа в нужное и полезное устройство. И тут меня поджидало большое разочарование: оказывается, несмотря на бешеную популярность этого микроконтроллера и отладочной платы, никто до сих пор так и не сделал ничего подобного. Вернее, попытка была, но это скорее экспериментально-образовательный proof-of-concept, а не законченный продукт. Чего только стоит блокирующая передача данных по UART: один порт передает, остальные ждут. Нет, этот микроконтроллер определенно заслуживает большего! Пришлось засучить рукава и написать прошивку самому.

Что у меня получилось

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

Командный интерпретатор позволяет настраивать следующие параметры:

  • тип выхода: двухтактный, открытый сток;
  • тип подтяжки входных линий: вверх, вниз, плавающая;
  • инверсия для управляющих сигналов: активный высокий/низкий;

Командный интерпретатор активируется на первом CDC порту при подключении пина PB5 к земле, поддерживает часть управляющих последовательностей ANSI (стрелочки, backspace), и принимает вполне дружелюбные на вид команды:

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

Распиновка вышла следующей:

Signal Direction UART1 UART2 UART3
RX IN PA10 PA3 PB11
TX OUT PA9 PA2 PB10
RTS OUT N/A PA1 PB14
CTS IN N/A PA0 PB13
DSR IN PB7 PB4 PB6
DTR OUT PA4 PA5 PA6
DCD IN PB15 PB8 PB9
RI IN PB3 PB12 PA8
TXA OUT PB0 PB1 PA7

Пины, выделенные жирным шрифтом, являются толерантными к 5 В.

Сигнал TXA (TX Active) служит для управления микросхемами трансиверов RS-485 (DE, /RE). TXA активен во время передачи данных и переключается в неактивное состояние не более чем за 0.6 мкс после завершения передачи. Это соответствует спецификациям RS-485 на скоростях до 920 кБод c почти двукратным запасом по времени переключения.

К сожалению, реализовать RTS/CTS на UART1 не вышло из-за того, что соответсвующие пины заняты сигналами USB. Можно было вывести RTS на какой-нибудь другой пин, поскольку RTS управляется программно, в зависимости от степени заполнения кольцевых буферов на прием, но порт c RTS и без CTS мне показался странной штукой и я решил, что так делать не надо.

Проект написан на языке C, и подразумевает использование arm-none-eabi-gcc для сборки. Я использовал специфичный для GCC синтаксис атрибутов и расширения языка С. Совместимость проекта с проприетарными компиляторами меня не интересует, но если кто-то считает это важным, то я готов принять соответствующий пул-реквест.

В результате у меня получилось удобное и мощное устройство которое полностью закрывает все мои потребности в последовательных портах. STM32 Blue Pill можно использовать как самостоятельно, так и в составе схем обеспечивающих согласование уровней и развязку. Возможность настройки сигнальных линий позволяет упростить разработку таких схем.

Подробная документация, исходный код и собранная прошивка доступна в репозитории проекта на GitHub.

Дальнейшие планы

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

Обновления

Поддержка RI

Добавил поддержку сигнала RI на всех портах (спасибо plyatov), добавил в статью описание сигнала RI.

Устранил ошибку, приводящую к возможному повреждению данных на приеме

Код не проверял готовность BULK IN endpoint перед отправкой CDC ZLP-пакетов. При определенных условиях это могло приводить к повреждению принимаемых данных. Очень странно, но эта ошибка в реальной жизни проявлялась существенно реже, чем можно было бы ожидать. Исправлено в версии 2.1.1.

Поддержка управления трансиверами RS-485

Добавил поддержку управления трансиверами RS-485 в версии 2.2.0, обновил статью, добавил описание сигнала TXA. Спасибо dernuss и остальным тем, кто просил сделать эту фичу.

Устройство представляет собой преобразователь USB-UART и позволяет микроконтроллерам взаимодействовать с компьютером. Для этого достаточно соединить выводы преобразователя TX и RX (уровень напряжения 5В) с соответствующими выводами Arduino Mini, Arduino Ethernet или другого микроконтроллера. Устройство построено на базе микроконтроллера ATmega8U2 (такой же используется в Arduino Uno), запрограммированного на работу в качестве USB-UART преобразователя. Прошивка ATmega8U2 взаимодействует со стандартными драйверами USB-COM, благодаря чему установка на компьютер дополнительных драйверов не требуется. Для корректной работы на Windows-системах требуется только .inf-файл.

Адаптер USB Serial содержит встроенный разъем mini-USB, а также разъем из 5 выводов: RX (для получения данных от компьютера), TX (для отправки данных), 5V, Ground (земля) и вывод Reset (для сброса микроконтроллера).

Светодиодные индикаторы показывают наличие питания, а также активность линий RX и TX.

Адаптер легко подключается к платам Arduino Ethernet, Mini, Mini Pro, LilyPad, LilyPad Simple и Fio.

Автоматический (программный) сброс

USB Serial адаптер спроектирован так, чтобы устройство, к которому он подсоединяется, можно было сбрасывать программно с подключенного компьютера. Внешний вывод RESET (отвечающий за сброс микроконтроллера) соединен с линией DTR виртуального COM-порта компьютера. Как правило, эта линия соединена с выводом RESET подключенного к адаптеру устройства через конденсатор номиналом 100 нФ. Такая схема позволяет автоматически сбрасывать микроконтроллер перед загрузкой в него новой программы.

Однако эта система может приводить и к другим последствиям. При подключении программируемого устройства к компьютерам, работающим на Mac OS X или Linux, его микроконтроллер будет сбрасываться при каждом соединении программного обеспечения с платой. Несмотря на то, что устройство запрограммировано игнорировать посторонние данные (т.е. все данные, не касающиеся процесса прошивки новой программы), оно может перехватить несколько первых байт данных из посылки, отправляемой плате сразу после установки соединения. Соответственно, если в программе, работающей на Ардуино, предусмотрено получение от компьютера каких-либо настроек или других данных при первом запуске, убедитесь, что программное обеспечение, с которым взаимодействует Ардуино, осуществляет отправку спустя секунду после установки соединения.

По расположению выводов разъем для программирования полностью совместим со стандартным разъемом FTDI (а также с адаптерами Adafruit и USB-UART преобразователями от Sparkfun).

Схема и исходный проект

Драйверы и настройка

Для корректной работы устройства на платформе Windows необходим специальный .inf-файл: Arduino_USBSerial.zip

Процесс установки на компьютер полностью аналогичен установке программного обеспечения Arduino UNO.

Подключение к Arduino Mini

Для подключения адаптера к Arduino Mini следуйте указаниям в руководстве по Arduino Mini.

USB Serial Adapter for Arduino
Arduino USB Serial adapter

Данная плата преобразует USB-подключение в последовательные 5-вольтовые сигналы TX и RX, которые можно подключить непосредственно к Arduino Mini, Arduino Ethernet или другим микроконтроллерам, позволяя им общаться с компьютером и загружать на них скетчи. Логика конвертора реализована на базе чипа Atmega8U2, запрограммированном как конвертер из USB в последовательный сигнал, такого же как на Arduino Uno. Прошивки 8U2 используют стандартные драйвера USB и COM, внешний драйвер не нужен. Однако для Windows требуется файл .inf.

USB-Serial адаптер имеет встроенный разъем мини-USB, также доступны 5 выводов, включая RX (для приема данных с компьютера), TX (для передачи данных), 5V, Ground (Земля) и Reset (Сброс).

Имеются светодиодные индикаторы питания и активности на линиях RX и TX.

Адаптер легко может подключаться к Arduino Mini, Mini Pro, Ethernet, LilyPad, LilyPad Simple и Fio.

Встроенный полимерный (самовосстанавливающийся) предохранитель ограничивает ток до 500 мА и защищает хост-компьютер от коротких замыканий.

Для прошивок ATmega8U2 доступны исходные коды. ATmega8U2 инициализируется с помощью DFU-бутлоадера (программа загрузки прошивки, Device Firmware Update – обновление прошивки устройства), для вызова которой устанавливается паяная перемычка с обратной стороны платы, и затем выполняется сброс 8U2. После этого вы можете использовать программу FLIP от Atmel (в Windows) или DFU-программатор (в Mac OS X и Linux) для загрузки новой прошивки. Другой вариант – использование разъема для внутрисхемного программирования с помощью внешнего программатора (DFU бутлоадера).

Автоматический (программный) сброс

Адаптер USB-Serial разработан так, что позволяет сбрасывать присоединенную плату с помощью ПО, запущенного на подключенном компьютере. Линия внешнего сброса воспроизводит линию DTR виртуального последовательного устройства на компьютере. Обычно она соединяется с линией сброса подсоединенной платы (например, платы Arduino Ethernet) через конденсатор емкостью 100 нФ, позволяя сбрасывать плату по окончании загрузки.

Такая настройка имеет и другие последствия: когда плата подключена к компьютеру, на котором запущена Mac OS X или Linux, она сбрасывается после завершения каждого обращения к ней (через USB). Если она запрограммирована игнорировать неверно сформированные данные (т.е. что-либо кроме загрузки нового кода), она будет перехватывать первые несколько байт данных, посланных плате после открытия соединения. Если скетч, запускаемый на плате, принимает единовременную конфигурацию или другие данные при первом старте, убедитесь, что программа, с которой он общается, ждет секунду после открытия соединения и перед посылкой этих данных.

Цоколевка разъема совместима со стандартом разъема FTDI.

Рабочий драйвер для windows 7 - 10 .
(С форума скачивал - не завёлся .)

Порядок установки :
Разархивируйте , отключить всё от компьютера , запустить файл installer.exe под свою архитектуру .
После перезагрузить комп или ноут , воткнуть программатор и драйвер установится .CP210x-driver-windows7-10.zip ( 3.68 МБ )

Программатор не заводится пока не установлен драйвер .

Сперва не заметил pl2303 . Рабочий драйвер для вин 7-10 .
PL2303_Prolific_DriverInstaller_v1_9_0.zip ( 2.33 МБ )

Прикрепленное изображение

Вывод Описание
3V3 Питание 3.3В (выход)
GND Земля
5V Питание 5В (выход)
TXD Передача данных (Transmit Data)
RXD Прием данных (Receive Data)
DTR Готовность приемника данных (Data Terminal Ready)
DCD Наличие несущей (Carrier Detect)
DSR Готовность источника данных (Data Set Ready)
RTS Запрос на передачу (Request to Send)
CTS Готовность передачи (Clear to Send)
RTS Запрос на передачу (Request to Send)
RI Сигнал вызова (Ring Indicator)
SUS Приводится в высокий уровень, когда CP2102/9 входит в режим IDLE.
!SUS Приводится в низкий уровень, когда CP2102/9 входит в режим IDLE.

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Сперва не заметил pl2303 . Рабочий драйвер для вин 7-10 .

есть у меня шнурок на китайской 2303hx. после установки на win7 максимальная sp1 драйвера выдает

Не удается проверить цифровую подпись драйверов, необходимых для данного устройства. При последнем изменении оборудования или программного обеспечения могла быть произведена установка неправильно подписанного или поврежденного файла либо вредоносной программы неизвестного происхождения. (Код 52)

US7IGN, Добрый день. Где взяты драйвера? Пробовали их переустановить, или установить на другой ПК? попробуйте отключить проверку . Может и в sp1 чего то не хватает .
У меня встали без проблем .

Всем спасибо за советы, задачу решил, а проблему нет.

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

Нужная программа для работы с радио, которое я хотел запрограммировать, Kenwood MCP-F6 даже видит радио, но выдает ошибку communication timeout error

В одном месте прочитал версию, что со шнурка на радио идет уровень TTL 5 вольт, а нужно 3,3. Перепаял на плате шнурка нулевой резистор чтобы было 3,3, но ничего не изменилось.

Достал старый ноут с ХР, куда вместо Kenwood MCP-F6 сразу поставил сторонний аналог link700 (под вин 7 она устанавливаться отказалась) - все увиделось и заработало.

Читайте также: