Как-то раз, отлаживая одно из устройств на микроконтроллере, мне понадобилось логировать большие объёмы данных по линиям RX/TX UART интерфейса между микроконтроллером и периферийным устройством. Так как нужно было смотреть обе линии (RX и TX) одновременно, на первое время я взял два простеньких USB-UART адаптера на чипе PL2303. Отладка шла хорошо, но два UART-адаптера занимали 2 USB порта, и ещё 2 порта занимал отладчик с беспроводной мышью. И тут я подумал, что неплохо было бы обзавестись USB-UART адаптером, имеющим сразу несколько UART интерфейсов. Поиск в гугле привёл меня к замечательной статье от автора R2AXZ, который написал прошивку и реализовал USB-UART адаптер c тремя UART интерфейсами на основе "народной" отладочной платы "BluePill" с микроконтроллером STM32F103C8 на борту. Идея очень заинтересовала меня. Я прошил имеющуюся у меня плату "BluePill", и в одно мгновение получил 3 UART интерфейса, работающих через 1 USB порт.
Адаптер оказался настолько удобным, что я решил развести под него плату и оформить в виде законченного устройства, чтобы иметь такой полезный девайс у себя в лаборатории. Разумеется, ни одно устройство, которое я не делаю, не обходится без доработок, поэтому добавив немного обвязки, получилась вот такая схема:
Из доработок я добавил ESD-стабилитроны для защиты от статики, удобный USB разъём, светодиодную индикацию работы всех трёх линий UART, возможность выбора напряжения логических уровней UART. Напряжение выбирается при помощи джампера, доступны фиксированные напряжения: 1,8В; 3,3В; 5В. Также предусмотрена установка произвольного напряжения в диапазоне 1,65В - 5В, при этом джампер выбора напряжения необходимо снять, а напряжение с отлаживаемого устройства подать на UART адаптер для питания согласующих буферов. В устройстве задействованы только линии RX и TX, поэтому используется программное управление потоком.
Внешний вид платы в процессе разработки:
Платы после монтажа компонентов, промываем от остатков флюса в ультразвуковой ванне:
После промывки плат необходимо прошить микроконтроллеры. Залить прошивку можно двумя способами. Первый способ - прошить через SWD интерфейс, используя внешний программатор-отладчик "ST-Link" либо "J-Link". Для подключения программатора на плате предусмотрен разъём XP3. Второй способ - прошить через внешний UART-адаптер, используя аппаратный загрузчик STM32. Для этого необходимо установить перемычку между пинами 3-4 разъёма XP4, затем отключить/подключить питание платы, при этом микроконтроллер перейдёт в режим загрузчика. Далее необходимо выбрать напряжение логических уровней UART при помощи джампера на разъёме XP1, подключить внешний UART-адаптер к интерфейсу UART1 на разъёме XP1, и залить прошивку через программу "FlashMagic". После заливки прошивки, микроконтроллер продолжает находиться в режиме загрузчика. Чтобы вернуть его в рабочий режим, необходимо снять перемычку между пинами 3-4 разъёма XP4, и снова отключить/подключить питание платы. Актуальную версию прошивки можно найти на странице автора.
В процессе изготовления устройства больше всего времени ушло на подбор подходящего корпуса. Хотелось, чтобы конструкция была удобной в использовании, имела надёжные (а не одноразовые Micro-USB) разъёмы, и т.д. В качестве корпуса я использовал модель "BOX-G025" от производителя "Мастеркит". Корпус вмещает разъём IDC-20 в ширину и разъём USB-B в высоту, при этом внутри остаётся достаточно места для размещения платы с множеством компонентов.
После изготовления плат выяснилось, что я забыл сделать вырезы по углам, необходимые для корректной установки платы в корпус. Пришлось сделать вырезы при помощи напильника. Для желающих повторить конструкцию, в конце статьи будут прикреплены все необходимые файлы, включая архив с gerber-файлами для заказа плат и BOM-файл для заказа компонентов. В последней версии платы вырезы по углам на плате уже добавлены.
Печатная плата адаптера, вид сверху:
Вид снизу:
Печатная плата имеет "нестандартную" толщину 1,2 мм. Это сделано для того, чтобы плата полностью погружалась в нижнюю половинку корпуса (и не выступала за её пределы), а интерфейсные разъёмы располагались ровно в верхней половинке корпуса.
Светодиоды применил не обычные 3-миллиметровые, а пафосные, диаметром 2 мм. Они имеют цилиндрическую форму и плоскую поверхность на кончике, при этом отлично смотрятся на плоскости корпуса. Чтобы ровно выставить светодиоды по высоте, я смонтировал их на пластиковых стойках.
Внешний вид адаптера после сборки корпуса:
Чтобы подписать распиновку разъёма и назначение светодиодных индикаторов, я напечатал стикеры на обычной бумаге, покрыв её слоем канцелярского скотча. Затем аккуратно вырезал стикеры по контуру и приклеил их к корпусу.
Справа расположен джампер для выбора напряжения логических уровней UART.
После подключения UART-адаптера к компьютеру, при использовании ОС Windows 7 и ниже, необходимо установить драйвера. При использовании ОС Windows 10 установка драйверов не требуется.
Адаптер получился надёжным и удобным в использовании.
Выражаю благодарность автору и разработчику прошивки - R2AXZ, спасибо!
Прикрепленные файлы:
- USB_to_3x_UART_converter_adapter_stickers.pdf (1464 Кб)
- USB_to_3x_UART_converter_adapter_v0_2__Gerbers.zip (65 Кб)
- USB_to_3x_UART_converter_adapter_v0_2__PCB_3D.PDF (1603 Кб)
- USB_to_3x_UART_converter_adapter_v0_2__PCB_ASSEMBLY.PDF (693 Кб)
- USB_to_3x_UART_converter_adapter_v0_2__BOM_.xls (27 Кб)
- USB_to_3x_UART_converter_adapter_v0_2__SCH_.zip (682 Кб)
Комментарии (21)
|
Я собрал (0) |
Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
TX 2 МБод + RX 2 МБод = 4 МБод на один UART, умножить на 3 интерфейса.
Максимальный скорость порта (baud rate), которая для первого uart - 4.500000 MBaud, для остальных 2.25 MBaud, и это связано с ограничениями самой stm32f103. В документации для простоты указано: “Supports all baud rates up to 2 MBaud”
Кроме этого, есть понятие максимальной пропускной способности. Тут как раз включаются всякие бутылочные горлышки. Так вот она для каждого порта составляет примерно 1 - 1.5 Мбит, точнее вот прям сейчас не скажу. Зависит от разного, в том числе от хоста.
Может показаться, что это как-то немного, но если верить тестам тут, то это быстрее CH340, FT232RL, CP2102N плюс-минус одно и то же с CP2104, но помедленнее FT230X, CP2102 (не N).
Но дело совсем не в этом: эти данные ведь еще надо по USB принять/передать, переложить, там в usb packet memory, дождаться пока хост их заберет, вот это все. Поэтому в итоге пропускная способность меньше.
Понятие "обычно" - штука зыбкая: хорошо если обычно в пакетном режиме, но закладываться что так будет всегда было бы слишком оптимистично.
Фраза "В документации для простоты указано: “Supports all baud rates up to 2 MBaud" - это из доки на bluepill-serial-monster, а не из доки на stm32.
А вообще, на высоких скоростях обмена, следует все таки при возможности использовать аппаратный контроль потока: мало ли когда хост решит затупить... Это если потери критичны, конечно.
[Автор]
Хотя в реальной жизни мне пока не приходилось использовать скорости больше 460к.
[Автор]
UART - Universal Asynchronous Receiver Transmitter, слово "асинхронный" как бы намекает о том, что приём и передача могут происходить независимо друг от друга.
[Автор]
У FT как-то микру использовал она дает два порта и имеет два входа, до 2Мбит проверял работает, может и выше не проверял.
Девайс прикольный, но я бы пошел и купил usb-hub . PL2303 не очень люблю у меня они отваливаются почему-то при долгой работе, предпочитаю CP2102
[Автор]
[Автор]