Что такое usb uart
Думаю, вряд ли кого-то стоит убеждать в необходимости и полезности USB-UART-преобразователей — COM- порт найти в современных компьютерах всё труднее. Для большей части практических задач, использующих обмен данными между компьютером и устройством — управления, отладки, передачи небольших объёмов данных — ничего проще и удобнее, чем преобразование USB-UART, придумать, пожалуй, невозможно.
Микроконтроллер общается с микросхемой по обычному UART, к компьютеру все это дело подключается по USB. Компьютер распознает подключенное устройство как COM-порт и работать с ним можно как с обычным ком-портом. Все очень удобно, не требует ни мощных микроконтроллеров с интерфейсом USB и специально подобранными кварцами, ни сложных программ.
Наиболее популярной микросхемой USB-UART является FT232RL от FTDI. Все в ней замечательно, кроме цены. А вот о CP2102 от SiLabs пишут значительно меньше. Стоит она значительно дешевле, чем FT232RL. Например ТУТ я ее купил за 45 руб.
Распиновка
Корпус у неё, конечно, страшноват, но к этому мы ещё вернёмся. 🙂
Структура микросхемы
Как можно заметить из схемы — CP2102 содержит встроенный генератор на 48 МГц, контроллер UART с поддержкой всех модемных сигналов, буфуры на прием и передачу, USB 2.0 (скорость до 12Мбит/сек) контроллер и EEPROM для хранения настроек. Микросхема требует минимальной обвязки — пара кондёров по питанию.
Настройка
Изменять все эти параметры можно с помощью фирменной программули от SiLabs. Называется она CP210x Set Ids.
Понять, как ей пользоваться, не составит никакого труда. Есть только один важный момент- программа находит устройства CP2102 основываясь на Vid и Pid. Если вы их измените программа перестанет видеть эту микросхему. Как с этим бороться я расскажу чуть позже.
Набор драйверов для CP2102
Существует 2 драйвера для CP2102
Вы можете создать собственный драйвер именно для вашего устройства с помощью программы CustomUSBDriverWizard. Он сам генерирует весь необходимый набор файлов для драйвера, даже включая графический инсталлятор.
Сначала, с помощью программы CP210x Set Ids настраиваете микросхему и меняете VID и PID. Потом запускаете CustomUSBDriverWizard, находите там свою микросхему и приступаете к созданию драйвера для нее. Тут можно указать название устройства, название драйвера, название вашей фирмы и другое. В результате программа сгенерирует набор файлов драйвера вашего устройства.
Теперь эти файлы можно прикладывать к вашему устройству на диске, флешке или еще как-нибудь.
Пользователь же, получив эти файлы, приступает к установке драйвера. Инсталлятор гордо показывает ваше название мега-устройства, название вашей крутейшей фирмы и т. д.
После установки в системе появляется новое устройство.
В данном случае это COM-порт, т. к. я выбрал этот тип драйвера в мастере.
Кстати после установки драйвера вашего устройства микросхема CP2102 снова начинает видиться программой CP210x Set Ids, которая переставала ее видеть после смены PID и VID.
Подключаем устройство и имеем счастье
Минусы CP2102
К сожалению, у всего есть недостатки. Включая божественную микросхему CP2102. В ее случае это ее корпус. Если FT232RL в корпусе TSSOP неудобна для пайки т.к. имеет мелкий шаг выводов, то CP2102 выводов не имеет вообще.
Но, если руки имеют относительно небольшую кривизну, то запаять ее можно. И даже проще, чем кажется. Феном запаять ее вообще не проблема. А в качестве доказательства того, что она вполне паябельна (а еще для фана) я специально снял видос, как я паяю ее турбозажигалкой на плате, изготовленной по ЛУТ-технологии 🙂 )
Вот как выглядела платка и что получилось в результате
А некоторые умельцы извращаются и так. Но я б так не стал 🙂
Микросхема достаточно дешевая, чтобы впаивать ее в каждое устройство, где она нужна, а не изготавливать один универсальный кабель-переходник для всех своих девайсов. Но иногда и отдельная платка переходника нужна. Я для себя сделал несколько таких вот милых платок.
Простой USB-UART преобразователь с гальванической развязкой
В процессе разработки электронных устройств под управлением микроконтроллеров часто возникает задача передать какие-то данные с устройства на компьютер или наоборот. Вероятно самым простым способом является использование USB-UART переходников, которых существует великое множество, но я решил сделать свой «велосипед» и поделиться результатом с вами.
У меня стояла задача сделать для себя любимого простой, дешевый, компактный и главное гальванически развязанный преобразователь USB-UART. Основной кейс для меня — отладка через printf по uart, да да, я в курсе про SWO и иные методы, но мне удобнее работать именно с uart-ом. Наличие изоляции для меня критично, т.к. в основном мне приходится проектировать силовые преобразователи, которые могут легко спалить, например, usb порт моего ноутбука. Правда если у вас в устройствах нет высокого напряжения, то расслабляться тоже не стоит, какие-нибудь 12В так же прекрасно могут вывести из строя ваш ПК. Разумеется не стоит забывать и о помехах, гальваническая развязка частично препятствует попаданию всякой гадости в usb порт.
Как видите у развязанных преобразователей интерфейсов одни плюсы, но тут некоторые возразят: «Зачем? Все же есть на Алиэкспресс». Тут ответ простой — меня не устроили ни цена готового устройства, ни его габариты, ни качество. В итоге за пару часов я «изобрел велосипед», который удовлетворит все мои хотелки и после изготовления получилось вот так:
Хотите обезопасить свои usb порты и узнать зачем так много? Тогда поехали :))
Концепт
Изначально я хотел лишь сделать себе парочку «свистков» для отладки, а в будущем еще и использовать их для отправки заказчикам, например, чтобы безопасно обновить прошивку через встроенный bootloader или снять логи, если что-то пошло не так. Отсюда и была задача сделать очень дешевую железку, чтобы не жалко было раздавать направо и налево. Правда все пошло немного иначе…
В своем телеграм-канале я сделал объявление с предложением присоединиться к заказу, ведь при увеличение партии уменьшалась стоимость устройства. В итоге за день набралось заказов на 50 штук + 10 штук себе, больше набирать не стал уже. Собственно поэтому на КДПВ не 10 штук, а несколько больше. Забегая вперед скажу, что такой мелкосерийный заказ позволил уменьшить стоимость одного устройства с
375 руб, что довольно неплохо.
Еще одной особенностью преобразователя стало то, что на нем не установлен гальванически развязанный dc/dc преобразователь на 5В. Структурная схема выглядит так:
Как видите изолятор ISO7721 с левой стороны запитывается от 5В самого USB, а с правой стороны вы должны подать уже напряжение нужного вам логического уровня. Данный изолятор работает при стандартных уровнях 2.5, 3.3 и 5В, то есть если вы работаете с STM32, то на пин VREF подаете +3.3В, а если с ATmega8, то подаете уже +5В. Довольно удобно и у такого решения есть ряд плюсов.
Во-первых, установка нормального dc/dc ведет к удорожанию устройства в 2 раза и вот зачем нам это, если питание со стороны usb есть всегда, а питание со стороны МК тоже будет, ведь иначе и принимать от него нечего.
Во-вторых, если мы устанавливаем, например, dc/dc с входным напряжением 5В, а выходным 3.3В, то мы с него уже вряд ли запитаем какой-нибудь МК на 5В. Мне это не особо нужно, но кому-то наверняка потребуются 5В, ведь не одними атмегами и кортексами живем.
Проект
Теперь к главному — к проекту. Выполнен он в Altium Designer, исходник проекта открыт, библиотеки для AD так же открыты, если вдруг кому-то понадобятся. Для тех, у кого нет Altium-а, я выгрузил все необходимые файлы и самое главное — Gerber-файлы для заказа печатных плат.
Панелизация
Мне предстояло заказать не 10 плат для себя, а несколько больше, поэтому было решено собрать в панель. Наверняка в будущем я так же буду собирать себе минимум по 10-20 штук данных преобразователей, а осуществлять установку компонентов на 10 плат сразу гораздо удобнее и быстрее. Так же решил сразу заказать 100 плат, ведь все равно пригодятся в дальнейшем, а у китайских лоукостеров (сам заказывал на PCBway) ценовая политика строится так, что 100 плат стоят как 60.
В итоге у меня заказ был на 10 панелей по 10 плат, толщина текстолита нестандартные 2 мм, что несколько увеличило стоимость. С доставкой заказ вышел в 98$ или 0,98$/шт. Толщину выбрал больше, т.к. при 2 мм текстолите он идеально плотно вставляется между выводами разъемов PLS, а это облегчает монтаж, ну и дополнительная жесткость и прочность платы как бонус.
Спустя некоторое время ко мне приехали вот такие панельки:
А так же и трафарет для нанесения на них пасты:
Для тех, кто захочет собрать себе данный преобразователь на github в папке Manufacture имеются gerber-файлы и для единичной платы, и для панели на 10 плат, как на фото.
Сборка и тестирование
Так как устройство простое и состоит всего из 18 компонентов, то ошибиться тут особо не где, все заработало сразу, единственное откуда могут придти проблемы — это монтаж, обычно если что-то не работает, то смотрите на пайку разъема USB и корпуса QFN, все остальное не должно вызывать проблем. Все резисторы, конденсаторы и светодиоды имеют размер 0603, тоже не должны вызывать проблемы при пайке феном или в печке, да и паяльником тоже вполне под силу даже новичку.
После сборки 60 штук нужно было проверить перед рассылкой, я сделал просто — взял разъем PBD-4, который является ответной частью для PLD-4, на нем закоротил ноги RX и TX, чтобы получить «эхо», то есть отправленные с терминала данные тут же принимались им самим. И собственно не забываем подать 3.3 или 5В на выводы VREF и GND разъема.
Получаем простой и быстрый способ протестировать устройства. Тестировал с терминалом YAT, просто отправляя строку и если все хорошо, то она тут же прилетала обратно:
Финал
Как результат данного мелкого проекта стала рассылка преобразователей по десятку городов, для конечного получателя стоимость преобразователя вышла в 375 руб/шт + пересылка 1 классом авиапочтой еще 175 руб. В теории можно было сделать еще дешевле, заказав компоненты в Китае, а не на digikey, но мне так спокойнее, когда я уверен, что Samsung это все таки Samsung, а Yageo таки Yageo.
На самом деле дешево получилось по одной простой причине — в проекте нет коммерческой составляющей. Если накинуть сюда все временные расходы, а так же прибыль, то цена была бы не такая интересная, благо задачи «заработать» не стояло.
Надеюсь кому-то данный проект будет интересен и вы его повторите без проблем. Для удешевления на github есть описание замен, если вы не сможете купить позиции по part-number из ВОМа.
6-ти пиновый конвертер USB/UART для тех кто не любит давить ресет на Arduino
Обзор конвертера USB — UART TTL на CP2102
Зачем он нужен
Программировать различные ардуино- и не адуино- образные контроллеры, получать информацию на компьютер со всего, что имеет последовательный интерфейс с TTL логикой.
Я в своих проектах использую его с Arduino Pro MIni, Gboard/Iboard и самодельными контроллерами.
Дополнительным выводом DTR, который можно напрямую подключить к входу RESET на контроллерах не имеющих USB на плате. После этого при программировании давить кнопку RESET не нужно. Для меня это очень удобно, когда контроллер спрятан недрах моей поделки и доступ к кнопке бывает очень затруднительным.
Поддержкой производителя, совместимостью с оригинальными драйверами и ПО, в отличие от поддельных FTDI, у которых проблемы с родными драйверами
Дополнительными выводами (дырками под контакты) на плате, например, позволяющими уводить USB в энергосберегающий режим.
Интересной возможностью менять VID, PID и текст, с которым опознается плата, собирать свой драйвер со требуемыми параметрами, что довольно интересно в коммерческих проектах. Об этом я расскажу дальше.
Тех, кого заинтересовал, пожалуйста под кат
Товар ехал целых 54 дня. Ну к нашей почте я уже привык, чего не скажешь о курсе доллара к рублю (((
Обычный желтый пакет. Внутри платки в запаянных прозрачных пакетиках. Все как обычно.
На плате есть дополнительные отверстия, куда можно впаять выводы дополнительного модемного контроля и перевода USB в режим SUSPENDED
Характеристики
Плата FOCA 2.2 взята для коммерческого проекта с GBoard и IBoard
Перед использованием платы необходимо установить драйвера с официального сайта Si-Labs
Для соединения к контроллеру нужны 5 проводов:
GND — GMD
VCC — V5.0 (V3.3) в зависимости от используемой платы
TX — RX
RX — TX
RESET контроллера — DTE
Теперь контроллер можно программировать не нажимая кнопку RESET.
Плата опознается в системе как
Silicon Labs CP210X USB to UART Bridge (COM35)
Иногда в коммерческих проектах необходимо, чтобы устройство при программирование имело свое коммерческое название. Чип CP2102 и плата на нем дают большие возможности для этого
Для начала скачиваем и запускаем Утилита для конфигурирования параметров EEPROM CP1202″> (мне для запуска утилиты потребовалось еще скачать Java Runtime)
И после нехитрого мастера-диалога получаем дистрибутив драйверов с требуемым набором VID и PID и желаемым названием в системе
Данная плата одна из самых дешевых конвертеров USB/UART не использующих поддельные чипы.
Имеет вывод DTR, позволяющий автоматически посылать RESET для загрузки ПО в контроллер
Позволяет настраивать VID, PID и драйвера под свои проекты
К покупке рекомендую
Полезные ссылки
О всех моих проектах можно прочитать в моем блоге
Общие сведения:
Подключение:
Пример соединения двух UNO:
UART на Arduino:
На Arduino и Arduino-совместимых платах аппаратный UART обозначается символами RX и TX рядом с соответствующими выводами. На Arduino UNO/Piranha UNO это 0 и 1 цифровые выводы:
Arduino UNO/Piranha UNO
В скетче инициализируется функцией begin() в коде функции setup():
Пример:
Piranha ULTRA
На Piranha ULTRA присутствуют два аппаратных UART. Один на тех же выводах, что и UNO, второй на 8 (RX) и 9 (TX) выводах:
В Arduino IDE второй аппаратный UART называется Serial1 (Сериал один), и инициализируется так же как и первый:
Простой пример для копирования буфера первого UART’а во второй и наоборот:
Arduino MEGA
У Arduino MEGA, помимо UART’a на цифровых выводах 0 и 1 как и у UNO, присутствуют ещё три аппаратных UART. На плате это выводы 19 (RX1), 18 (TX1), 17 (RX2), 16 (TX2) и 15 (RX3), 14 (TX3) соответственно. UART совместимый по расположению с UNO обозначен RX0, TX0:
На заметку: На многих Arduino и Arduino-совместимых платах UART0 используется для загрузки скетчей, так что если Ваш скетч не загружается, проверьте эти выводы. Во время загрузки скетча к ним ничего не должно быть подключено.
Отладка проектов при помощи UART
Пример:
Программный UART на Arduino
Помимо аппаратного UART в Arduino можно использовать программный. Программный порт хорошо подходит для простых проектов, не критичных к времени работы кода или для отладки проектов, позволяя не отключать модули использующие UART во время загрузки сетчей. При его использовании нужно лишь помнить что никакой другой код не может выполняться пока программа занимается считыванием данных из него и передача может осуществляться только в полудуплексном или симплексном режимах. Так же на программный RX можно назначать только те выводы, которые поддерживают прерывание по смене уровней. На UNO, например, это все цифровые выводы, кроме 13-го. Прежде чем собирать свой проект, проконсультируйтесь с инструкцией к конкретной плате.
Пример использования программного порта:
UART на Raspberry Pi:
Пример работы с последовательным портом на Python:
Данный пример выводит строку «iArduino.ru» в последовательный порт Raspberry и ждёт данных из последовательного порта.
Подробнее о UART:
Параметры
При обозначении параметров UART принято использовать короткую запись ЦИФРА—БУКВА—ЦИФРА
Таким образом, стандартные настройки в Arduino: 8-N-1
Кадрирование данных
При приёме-передаче данных каждое устройство ориентируется на своё внутреннее тактирование. Обычно это тактирование от 8 до 16 раз быстрее скорости передачи данных и обычно отсчитывается от стартового бита. Именно поэтому необходимо чтобы оба устройства были настроены на одну и ту же скорость передачи.
Так же при передаче данных присутствуют синхронизирующие биты, именуемые старт-бит и стоп-бит. Старт-бит сигнализирует о начале передачи данных и стоп-бит, соответственно об окончании.
Рассмотрим кадр данных:
Старт-бит:
При отсутствии передачи линия удерживается в состоянии логической единицы (в случае TTL Arduino это 5 вольт или Vcc). Как только передающее устройство притягивает линию к 0 (GND или 0 вольт в случае Arduino), это сигнализирует принимающему устройству о том что сейчас будет передача данных.
Данные:
При появлении старт-бита на линии принимающее устройство начинает отсчитывать время в соответствии с установленной скоростью и считывать состояния линии через определённые промежутки времени в соответствии с установленным количеством бит данных, после этого.
Стоп-бит:
По завершении передачи данных принимающее устройство ожидает стоп-бит, который должен быть на уровне логической единицы. Если по завершении кадра удерживается логический ноль, значит данные неверны. Если логический ноль удерживается время, превышающее длину кадра в 1,5 раза, такое состояние именуется break (разрыв линии, исторически пошло от устройств, использующих токовую петлю для передачи данных). Некоторые передатчики вызывают это состояния специально перед посылкой пакета данных. Некоторые приёмники считают такое состояние за неправильно выставленную скорость и сбрасывают свои настройки на установки «по умолчанию».
Скорость передачи данных
Скорость изменения логических уровней (импульсов) на линии принято измерять в бодах. Единица измерения названа так в честь французского изобретателя Жана Мориса Эмиля Бодо.
Скорость при использовании UART может быть любой, единственное требование — скорости передающего и принимающего должны быть одинаковы. Стандартная скорость UART принята за 9600 бод. Arduino без проблем и лишних настроек может принимать и передавать данные на скоростях до 115200 бод.
Так как при передаче данных присутствуют синхронизирующие биты, именуемые старт-бит и стоп-бит, не совсем корректно говорить, что скорость 9600 бод равна 9600 битам в секунду. Если речь идёт о полезных данных, то реальная скорость на 20% ниже. Например, если выставлены параметры 8-N-1 и 9600 бод, то на передачу одного байта уходит десять бит, и 9600/10 = 960 байт, что равно 7680 битам в секунду.
Методы связи
UART позволяет одновременно передавать и принимать данные, однако не всегда это возможно или нужно. Например, если Вам нужно только получать не критические данные (которые можно проверить следующим пакетом, например расстояние, посылаемое лидаром каждые несколько сотен миллисекунд) от цифрового датчика или любого другого устройства и не нужно ничего передавать, такой метод называется симплексным. Всего различают три метода связи:
UART и с чем его едят
После Vogue истерии появилось множество вопросов, как подключить плату к компьютеру. И многие люди даже не понимают, что же такое UART. И я решил рассказать здесь какой это мощный инструмент.
Роутер превращается в компьютер, если к нему по UART подключить клавиатуру и дисплей
От телеграфа к COM-порту
Протокол UART (Universal asynchronous receiver/transmitter) или, по-русски, УАПП (универсальный асинхронный приемопередатчик) — старейший и самый распространенный на сегодняшний день физический протокол передачи данных. Наиболее известен из семейства UART протокол RS-232 (в народе – COM-порт, тот самый который стоит у тебя в компе). Это, наверное, самый древний компьютерный интерфейс. Он дожил до наших дней и не потерял своей актуальности.
Надо сказать, что изначально интерфейс УАПП появился в США как средство для передачи телеграфных сообщений, и рабочих бит там было пять (как в азбуке Морзе). Для передачи использовались механические устройства. Потом появились компьютеры, и коды ASCII, которые потребовали семь бит. В начале 60-х на смену пришла всем известная 8-битная таблица ASCII, и тогда формат передачи стал занимать полноценный байт, плюс управляющие три бита.
В 1971 году, когда уже начался бум микросхем, Гордон Белл для компьютеров PDP фирмы Western Digital сделал микросхему UART WD1402A. Примерно в начале 80-х фирмой National Semiconductor был создан чип 8520. В 90-е был придуман буфер к интерфейсу, что позволило передавать данные на более высоких скоростях. Этот интерфейс, не претерпев практически никаких изменений, дошел и до наших дней
Физика интерфейса
Чтобы понять, что роднит и отличает разные UART-интерфейсы, разберем принцип работы самого популярного и любимого нами протокола RS-232. Дотошно расписывать все тонкости его работы я не буду. Об этом написан ни один десяток мегабайт статей, и если ты умеешь пользоваться Гуглом, то без проблем найдешь всю необходимую информацию. Но основы я расскажу, благо с ними можно уже круто всем рулить, а всякие фишки используются очень редко.
Приём сигнала по RS-232 (взято из книги М.Гук «Аппаратные интерфейсы ПК»)
Такая большая амплитуда рабочих напряжений, целых 24 вольта, нужна в первую очередь для помехоустойчивости линий связи. По стандарту, длина кабеля, по которому у нас бегают данные, может быть 15 м. Хотя на практике люди умудрялись заставлять его работать даже на 25 м. Электрические параметры RS-232 – это главная характеристика, которая отличает его от других протоколов семейства UART.
Следующие характеристики – формат посылки и скорость передачи данных – полностью применимы ко всем видам UART и обеспечивают их совместимость через несложные схемы сопряжения.
Сигнал UART на экране осциллографа. Виден старт бит, данные и стоповый бит. Спасибо DIHALTза картинку
Скорость работы
Даже если тебе раньше никогда не приходилось работать с СОМ-портом, по крайней мере, в модеме ты должен знать номинальные скорости работы: 9600, 28800, 33600, 56000 и т.п. Сколько бит в секунду убегает из нашего порта? Вот смотри, допустим, скорость у нас 9600 бит в секунду. Это означает, что передача одного бита будет занимать 1/9600 секунды, а пересылка байта – 11/9600. И такая скорость для байта верна только в случае, если стоп-бит будет занимать один бит. В случае, если он занимает два стоп-бита, то передача будет 12/9600. Это связано с тем, что вместе с битами данных передаются еще специальные биты: старт, стоп и бит четности. Линейка скоростей СОМ-порта стандартизирована. Как правило, все устройства работают на трех стандартных скоростях: 9600, 19200, 115200. Но возможны другие варианты, даже использование нестандартных скоростей или скорости, меняющейся во времени, – с этим я сталкивался при разборе полетов очередного устройства.
Такой разный протокол
Видов UART существует великое множество. Я не буду перечислять их наименования, ибо, если ты владеешь английским, то сумеешь и сам нагуглить. Но самые основные не отметить нельзя! Напомню, что главное отличие интерфейсов состоит в среде и способе передаче данных. Данные могут передаваться даже по оптоволокну.
Второй по распространению интерфейс после RS-232 – это RS-485. Он является промышленным стандартом, и передача в нем осуществляется по витой паре, что дает ему неплохую помехоустойчивость и повышенную скорость передачи до 4 мегабит в секунду. Длина провода тут может достигать 1 км. Как правило, он используется на заводах для управления разными станками.
Надо сказать, что IRDA, или инфракрасная связь, которая встроена в большинство телефонов и КПК, тоже по сути является UARTом. Только данные передаются не по проводам, а с помощью инфракрасного излучения.
В SMART-картах (SIM, спутниковое телевиденье, банковские карты) – тех самых устройствах, которые мечтает похачить каждый уважающий себя фрикер – тоже используется наш любимый UART. Правда, там полудуплексная передача данных, и логика работы может быть 1,8/3,3 и 5 вольт. Выглядит так, будто RX запаян с TX на одном конце и на другом – в результате, один передает, другой в этот момент слушает, и наоборот. Это регламентировано стандартом смарт-карт. Так мы точно знаем, сколько байт пошлем, и сколько нам ответит карточка. Тема достойна отдельной статьи. В общем, запомни, что UART есть практически везде.
Устройства, которые имеют на своём борту UART, по часовой стрелке: мышка, ридер-эмулятор SMART-карт, КПК Palm m105, отладочная плата для микроконтроллера ATtiny2313 (или AT89C2051), модем.
Сопряжение интерфейсов
Я уже глаза намозолил разными интерфейсами, но как с ними работать-то? Ну, с обычным RS-232 понятно, а, допустим, с 5-вольтовым юартом как быть? Все просто: существуют различные готовые микросхемы-преобразователи. Как правило, в маркировке они содержат цифры «232». Увидел в схеме микруху с этими цифирями – будь уверен: скорее всего, это преобразователь. Через такие микросхемы с небольшим обвязом и сопрягаются все интерфейсы UART. Я не буду рассказывать о промышленных интерфейсах, а скажу о тех преобразователях, которые интересуют нас в первую очередь.
Самый известный преобразователь интерфейса – это микросхема, разработанная фирмой MAXIM, которая и получила от нее часть своего названия (max232). Для ее работы требуется четыре конденсатора от 0,1 микрофарады до 4 микрофарад и питание 5 вольт. Удивительно, что эта микросхема из 5 вольт генерирует отрицательное напряжение, чтобы сопрягать 5-вольтовый UART с RS-232.
Существуют микросхемы сопряжения USB с UART, например, микросхема ft232rl. В Ubuntu для этой микросхемы уже встроены драйвера. Для Windows их придется качать с официального сайта. После установки драйверов в системе появится виртуальный СОМ-порт, и с ним уже можно рулить различными устройствами. Советую не принимать эти микросхемы, как единственно возможные. Найдется громадное количество более дешевых и интересных аналогов, посему наседай на Гугл и поймешь, что мир UARTа – это круто.
В целом, микросхемы стоят достаточно дорого и порой можно обойтись более сложными, но зато более дешевыми схемами на паре транзисторов.
Что нам это дает?
Как ты понял, интерфейс UART присутствует во многих устройствах, в которых стоит какой-либо процессор или контроллер. Я даже больше скажу: если там стоит контроллер, то юарт есть стопудово (только он не всегда может использоваться). Как правило, по этому интерфейсу идет наладка и проверка работоспособности девайса. Зачастую производитель умалчивает о наличии этого интерфейса в изделии, но найти его несложно: достаточно скачать мануал на процессор и, где находится юарт, ты будешь знать. После того, как ты получишь физический доступ к железяке по нашему интерфейсу, можно его настроить на свое усмотрение или даже заставить работать, так как надо тебе, а не как задумал производитель. В общем, – выжать максимум возможностей из скромного девайса. Знание этого протокола дает также возможность подслушать, что же творится в линиях обмена между различными процессорами, так как часто производители организуют целые юарт-сети в своем устройстве. В общем, применений много, главное – интуитивно понимать, как это делать.
Апдейтим роутер
Намедни я намутил себе WiFi-роутер WL-520GU и, прочитав статью Step’a «Level-up для точки доступа» (][ #106), успешно установил туда Linux. Но у меня возникли проблемы с монтированием swap-раздела жесткого диска. Так появилась необходимость посмотреть лог загрузки точки доступа – подмонтировался раздел или нет – причем, как говорится, на лету, чтобы сразу вносить необходимые изменения. Шестым чувством я подозревал, что в моем роутере просто обязан быть UART. Я взял в руки крестовую отвертку и начал его разбирать. Дело тривиальное, но с заковыркой – потайные винтики находятся под резиновыми ножками (если решишь повторить, помни, что при разборе ты лишаешься гарантии). Моему взору предстала достаточно скучная плата, где все «chip-in-one»: один центральный процессор, в который включено все, внешняя оператива, флеша, преобразователь питания и рядок разъемов с кнопками. Но на плате была не распаянная контактная площадка, точнее сказать, отверстия под иголки. Их было четыре штуки. Вот он UART, это очевидно! По плате даже без мультиметра видно, что крайние иголки – это +3,3 вольта и второй – земля. Средние контакты, соответственно, RX и TX. Какой из них что, легко устанавливается методом научного тыка (спалить интерфейс очень проблематично).
Сразу хочу отметить, что интерфейс UART в каждом роутере выглядит по-разному. В большинстве случаев, это не распаянные отверстия на плате. Правда, в одном роутере от ASUS я даже встретил полностью подписанный разъем.
Собираем преобразователь
Чтобы подключить роутер к компу, необходимо сопрячь интерфейсы RS-232 с UARTом роутера. В принципе, можно подключить к USB, используя указанную выше микросхему FT232RL, – что я и сделал при первой проверке роутера. Но эта микросхема – в достаточно сложном для пайки корпусе, посему мы поговорим о более простых решениях. А именно – микросхеме MAX232. Если ты собираешься питаться от роутера, то там, скорее всего, будет 3,3 вольта, поэтому лучше использовать MAX3232, которая обычно стоит в КПК (схему распайки нетрудно найти в инете). Но в моем роутере присутствовало питание +5 вольт на входе, а указанных микросхем у меня великое множество, и я не стал заморачиваться. Для сборки нам потребуются конденсаторы 0,1 мкФ (4 штуки) и сама микросхема. Запаиваем все по традиционной схеме, и начинаем эксперименты.
Исходники для сборки
На выход я сразу повесил 9-пиновый разъем типа «папа», чтобы можно было легко подключить нуль-модемный кабель. Если ты помнишь, во времена DOSа такими кабелями делали сетку из двух компов и резались в «Дюкнюкем». Провод для наших целей собрать несложно. Правда, получится не полный нуль-модем и через него особо не поиграешь, но рулить точкой доступа будет самое то! Тебе понадобятся два 9-пиновых разъема типа «мама», корпуса к ним и провод, например, от старой мышки или клавы (главное, чтобы в нем было три провода). Сначала соединяем земли ¬- это пятый контакт разъемов; просто берем любой провод и с обоих сторон припаиваем к 5-му контакту. А вот с RX и TX надо поступить хитрее. С одного конца провода запаиваем на 3-й контакт, а с другого – на 2-й. Аналогично с третьим проводом, только с одного конца запаиваем на 2-й контакт, с другого – на 3-й. Суть в том, что TX должен передавать в RX. Прячем запаянные разъемы в корпус — и готов нуль-модемный кабель!
Распаянные иголки на плате роутера.
Для удобства монтажа в материнку роутера я впаял штырьковый разъем, а в монтажку с MAX232 – обратный разъем и вставил платку, как в слот. RX и TX роутера подбираются экспериментально.
Собраная плата
Теперь надо запитать микросхему преобразователя. Общий провод у нас присутствует уже прямо в разъеме на мамке роутера. А вот + 5 вольт находится прямо у входа питания роутера, в месте, где подключается адаптер. Точку нахождения 5 вольт определяем вольтметром, измеряя разные узлы относительно земли роутера.
Подключаем питание. Включаем и начинаем наши злостные эксперименты.
Прожигаем отверстие для вывода проводов
Распаянный СОМ-порт
Всё в сборе. Обратите внимание, что красный провод питания идёт к разъёму адаптера роутера. Узелок внутри сделан, для того чтобы рывком на оторвать припаянные провода.
Настройка терминала
Нам нужно настроить терминальную программу. В Винде все достаточно просто: запускаем Hyper Terminal, отключаем программную и аппаратную проверку данных, выставляем скорость 115200 и один стоповый бит. А вот в Линухе дело обстоит чуть хитрее. У меня Ubuntu, и рассказывать буду про нее. Для начала разберись, как в твоей сборке именуется СОМ-порт. В моем случае СОМ1 был ttyS0 (если использовать к примеру микросхему FT232, то он будет именоваться ttyUSB0). Для работы с ним я использовал софтинку minicom.
* Скорость/четность/биты 115200 8N1
* Аппаратное управление потоком — нет
* Программное управление потоком — нет
Я не рекомендую подключать микросхему преобразователя к роутеру, дабы проверить ее функционал. Допускается только брать с него питание. Проверка проходит очень просто — необходимо перемкнуть RX с TX. Сначала перемыкаешь в СОМ-порте 2-й и 3-й контакт — проверяешь настройки терминалки. Пишешь что-то на клаве: если символы возвращаются, значит, все ОК. Также проверяешь кабель, те же контакты. Потом подключаешь микросхему, и уже у нее на выходе ставишь перемычку. Я заостряю на этом внимание, потому что, например, у меня возникли проблемы, и ничего не работало, пока я все не проверил и не нашел ошибку.
После всех настроек можешь смело цеплять к роутеру и искать RX-TX на роутере, периодически выдергивая из него питание. Если все сделано правильно, то при подаче питания ты увидишь лог загрузки роутера. Принимай поздравления, теперь у тебя полный аппаратный рут, так, будто ты сидишь за монитором с клавой роутера.
Лог загрузки роутера в программе minicom
Автономное плаванье
Согласись, делать через терминальную программу то же самое, что удобнее сделать через SSH – не айс. Мне хотелось превратить роутер в автономный Linux-компьютер, со своей хитрой архитектурой. Для этого нужно, чтобы данные с клавиатуры передавались по UART, и по нему же выводились на монитор. Паять и разрабатывать устройство было лениво. Тогда-то и пришла идея заюзать для этих целей пылящийся без дела КПК. По сути, наладонник будет исполнять роль контроллера клавиатуры и дисплея, ну и служить сопряжением интерфейсов.
Сначала я попробовал древнейший Palm m100. Но, видимо, у него очень маленькая буферная память, и от количества данных, которые идут с роутера, ему становилось плохо. Я взял другой — промышленный КПК, с нормальным СОМ-портом и терминалкой. Подключил, вставил в док и, в результате, получил небольшой линукс-компьютер. В принципе, вместо дорогущего промышленного КПК подойдет большинство наладонников, работающих под операционкой WinCE, главное – найти подходящий терминальный софт.
Линукс компьютер 🙂
Итоги
Итак, я показал небольшой пример использования UART. Если ты вкуришь в этот протокол, то поверь, станешь просто повелителем различных железок. Есть он практически везде, и через него можно сопрягать, казалось бы, совершенно разные вещи. К примеру, к тому же роутеру при небольших настройках подключается мобильный телефон по юарту, – и раздает с него интернет. В общем, применений куча. Не бойся экспериментировать, самообразовываться и реализовать свои идеи.
Этот пост является отредактированной для хабра версией моей статьи в Хакере № 05/09 «Главный инструмент фрикера».