UART — Универсальный Асинхронный Приёмопередатчик
Универсальный асинхронный приёмопередатчик (Univsersal Asynchronos Reciever-Transmitter) — это физическое устройство приёма и передачи данных по двум проводам. Оно позволяет двум устройствам обмениваться данными на различных скоростях. В спецификацию UART не входят аналоговые уровни на которых ведётся общение между устройствами, UART это протокол передачи единиц и нулей, электрическую спецификацию на себя берут другие стандарты, такие как TTL (transistor-transistor logic — транзисторно-транзисторная логика), RS-232, RS-422, RS-485 и другие (RS [англ.recommended standard] — рекомендованный стандарт). На данный момент в микроконтроллерах используется в основном TTL (или точнее CMOS) UART для соединения не более двух устройств. В наших примерах мы часто называем его последовательным портом.
Подключение:
У каждого устройства, поддерживающего UART обычно обозначены два вывода: RX и TX. TX — означает transmit (передаю), RX — receive (принимаю). Отсюда становится понятно что RX одного устройства нужно подключать к TX другого. Если Вы подключите RX одного устройства к RX другого, то оба устройства будут слушать друг друга, вы соединили их входы. Если соединить TX и TX — это уже более опасно, это выходы низкого сопротивления устройств и если на одном будет логическая единица, а на втором ноль — по проводу пойдёт ток короткого замыкания (это зависит от конкретной программной или аппаратной реализации). Хотя в современных чипах от этого есть защита, на всякий случай, не стоит на неё ориентироваться. Так же необходимо объединить референсные уровни двух устройств (GND—GND), если не подразумевается гальваническая развязка.

Пример соединения двух UNO:

UART на Arduino:
На Arduino и Arduino-совместимых платах аппаратный UART обозначается символами RX и TX рядом с соответствующими выводами. На Arduino UNO/Piranha UNO это 0 и 1 цифровые выводы:
Arduino UNO/Piranha UNO

В скетче инициализируется функцией begin() в коде функции setup():
Serial.begin( СКОРОСТЬ );
Serial.begin( СКОРОСТЬ, ПАРАМЕТРЫ );
Пример:
void setup()
Piranha ULTRA
На Piranha ULTRA присутствуют два аппаратных UART. Один на тех же выводах, что и UNO, второй на 8 (RX) и 9 (TX) выводах:

В Arduino IDE второй аппаратный UART называется Serial1 (Сериал один), и инициализируется так же как и первый:
Простой пример для копирования буфера первого UART’а во второй и наоборот:
void setup() < // Инициируем UART Serial.begin(9600); Serial1.begin(9600); >void loop() < // Пока буфер первого UART не пуст while(Serial.available()) < // Выводим следующий байт FIFO в буфер второго Serial1.write(Serial.read); >// Пока буфер второго UART не пуст while(Serial1.available()) < // Выводим следующий байт FIFO в буфер первого Serial.write(Serial1.read); >>
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 может быть очень полезен для отладки кода. Например, если не понятно доходит ли Ваш код до определённого места или какие значения принимает переменная, можно вызвать функцию println() и вывести значение переменной или какое-нибудь сообщение в монитор порта. В Arduino IDE монитор порта находится в меню Инструменты -> Монитор порта, так же его можно вызвать нажав пиктограмму лупы в правом верхнем углу главного окна Arduino IDE или вызвать с клавиатуры комбинацией клавиш Ctrl+Shift+M. Перед вызовом монитора порта необходимо выбрать порт с которым Вы хотите работать. Сделать это можно в меню Инструменты -> Порт.
Для удобства отладки можно указать директивы препроцессора языка Си #define , #ifdef , #ifndef
Пример:
/* * Определяем DEBUG. * Если эту строку удалить * или закомментировать * код от #ifdef DEBUG до * #endif не будет скомпилирован * и в монитор порта (в данном примере) * ничего не будет выведено. */ #define DEBUG void setup() < // Инициируем последовательный порт Serial.begin(9600); /* * Ждём старта последовательного порта * (необходимо для чипов со встроенным * USB-UART преобразователем). */ while(!Serial); >void loop() < // Создаём флаг составного числа. bool not_prime = false; for (int n = 2; n < 100; n++) < for (int i = 2; i < n / 2; i++) < // Проверяем факторы (делители) числа. if (n % i == 0) < /* * Если есть факторы * устанавливаем флаг, * выходим из цикла проверки. */ not_prime = true; break; >> /* * Если определён DEBUG * выводим простые числа * в монитор порта. */ #ifdef DEBUG if (not_prime == false) < Serial.println(n); >#endif not_prime = false; > // Останавливаем выполнение скетча. while(true); >
Программный UART на Arduino
Помимо аппаратного UART в Arduino можно использовать программный. Программный порт хорошо подходит для простых проектов, не критичных к времени работы кода или для отладки проектов, позволяя не отключать модули использующие UART во время загрузки сетчей. При его использовании нужно лишь помнить что никакой другой код не может выполняться пока программа занимается считыванием данных из него и передача может осуществляться только в полудуплексном или симплексном режимах. Так же на программный RX можно назначать только те выводы, которые поддерживают прерывание по смене уровней. На UNO, например, это все цифровые выводы, кроме 13-го. Прежде чем собирать свой проект, проконсультируйтесь с инструкцией к конкретной плате.
Пример использования программного порта:
// Определяем вывод RX #define RX 8 // Определяем вывод TX #define TX 9 // Подключаем библиотеку программного UART #include // Создаём объект программного UART SoftwareSerial mySerial(RX, TX);
Далее к программному порту нужно обращаться через объект mySerial . Например: mySerial.write(data); .
UART на Raspberry Pi:
На Raspberry Pi UART находится на выводах колодки 8 — TX (GPIO14) и 10 — RX (GPIO15)

Перед работой с последовательным портом необходимо его включить. Сделать это можно из эмулятора терминала командой sudo raspi-config -> Interfacing options -> Serial -> No -> Yes -> OK -> Finish или из графической среды в главном меню -> Параметры -> Raspberry Pi Configuration -> Interfaces -> Serial Port
Пример работы с последовательным портом на Python:
# Подключаем модуль для работы с последовательным портом import serial # Конфигурируем последовательный порт serialport = serial.Serial("/dev/ttyS0", 9600, timeout=0.5) # Выводим байтовую строку в порт serialport.write(b'iArduino.ru') # Входим в бесконечный цикл while True: # Если буфер порта не пуст if serialport.in_waiting: # Записываем данные из буфера в список response = serialport.readlines() # Выводим эти данные в stdin, декодируя в UTF-8 и удаляя пустые символы print(response[0].decode("utf-8").strip()) # Если нужны "сырые данные" с символами возврата каретки и новой строки # print(response) # .readlines() возвращает список байтовых строк
Данный пример выводит строку «iArduino.ru» в последовательный порт Raspberry и ждёт данных из последовательного порта.
Подробнее о UART:
Параметры
При обозначении параметров UART принято использовать короткую запись ЦИФРА—БУКВА—ЦИФРА
- ЦИФРА — количество бит в кадре
- от 5 до 9 бит. Обычно 8.
- N — None (Отсутствует) без бита чётности
- E — Even (Чётный). Проверка данных на чётность. Перед стоп-битом в кадр добавляется бит: 0 если в кадре было нечётное количество единиц, 1 — если чётное.
- O — Odd (Нечётный). Проверка данных на нечётность. Перед стоп-битом в кадр добавляется бит: 1 если в кадре было нечётное количество единиц, 0 — если чётное.
- 1, 1.5, 2. Продолжительность стоп-бита (1, 1.5 или 2 битовых интервала)
Таким образом, стандартные настройки в Arduino: 8-N-1
Кадрирование данных
При приёме-передаче данных каждое устройство ориентируется на своё внутреннее тактирование. Обычно это тактирование от 8 до 16 раз быстрее скорости передачи данных и обычно отсчитывается от стартового бита. Именно поэтому необходимо чтобы оба устройства были настроены на одну и ту же скорость передачи.
Так же при передаче данных присутствуют синхронизирующие биты, именуемые старт-бит и стоп-бит. Старт-бит сигнализирует о начале передачи данных и стоп-бит, соответственно об окончании.
Рассмотрим кадр данных:
При разговорах о серийный протоколах принято использовать такие слова как кадр и пакет. Кадр — интервал от старт-бита до стоп-бита. Пакет — количество кадров полезных данных. При этом не стоит путать кадр и байт: байт — это только сами данные, не включающие в себя синхронизирующие и проверочные биты.
Старт-бит:
При отсутствии передачи линия удерживается в состоянии логической единицы (в случае TTL Arduino это 5 вольт или Vcc). Как только передающее устройство притягивает линию к 0 (GND или 0 вольт в случае Arduino), это сигнализирует принимающему устройству о том что сейчас будет передача данных.
_______ ____ ____ ____ ____ ____ ____ ____ ____ __________ \____/____X____X____X____X____X____X____X____X | старт-бит [данные . ] [стоп-бит]Данные:
При появлении старт-бита на линии принимающее устройство начинает отсчитывать время в соответствии с установленной скоростью и считывать состояния линии через определённые промежутки времени в соответствии с установленным количеством бит данных, после этого.
_______ ____ ____ ____ ____ ____ ____ ____ ____ __________ \____/____X____X____X____X____X____X____X____X | | | | | | | | [старт-бит] данные . [стоп-бит]Стоп-бит:
По завершении передачи данных принимающее устройство ожидает стоп-бит, который должен быть на уровне логической единицы. Если по завершении кадра удерживается логический ноль, значит данные неверны. Если логический ноль удерживается время, превышающее длину кадра в 1,5 раза, такое состояние именуется break (разрыв линии, исторически пошло от устройств, использующих токовую петлю для передачи данных). Некоторые передатчики вызывают это состояния специально перед посылкой пакета данных. Некоторые приёмники считают такое состояние за неправильно выставленную скорость и сбрасывают свои настройки на установки «по умолчанию».
_______ ____ ____ ____ ____ ____ ____ ____ ____ __________ \____/____X____X____X____X____X____X____X____X | [старт-бит][данные . ] стоп-битСкорость передачи данных
Скорость изменения логических уровней (импульсов) на линии принято измерять в бодах. Единица измерения названа так в честь французского изобретателя Жана Мориса Эмиля Бодо.
Скорость при использовании UART может быть любой, единственное требование — скорости передающего и принимающего должны быть одинаковы. Стандартная скорость UART принята за 9600 бод. Arduino без проблем и лишних настроек может принимать и передавать данные на скоростях до 115200 бод.
Так как при передаче данных присутствуют синхронизирующие биты, именуемые старт-бит и стоп-бит, не совсем корректно говорить, что скорость 9600 бод равна 9600 битам в секунду. Если речь идёт о полезных данных, то реальная скорость на 20% ниже. Например, если выставлены параметры 8-N-1 и 9600 бод, то на передачу одного байта уходит десять бит, и 9600/10 = 960 байт, что равно 7680 битам в секунду.
Методы связи
UART позволяет одновременно передавать и принимать данные, однако не всегда это возможно или нужно. Например, если Вам нужно только получать не критические данные (которые можно проверить следующим пакетом, например расстояние, посылаемое лидаром каждые несколько сотен миллисекунд) от цифрового датчика или любого другого устройства и не нужно ничего передавать, такой метод называется симплексным. Всего различают три метода связи:
- Полнодуплексная — когда ведущий и ведомый могут одновременно принимать и передавать (одновременная передача в обе стороны)
- Полудуплексная — когда ведущий и ведомый поочерёдно принимают и передают (Поочерёдная передача в обе стороны)
- Симплексная — когда ведущий или ведомый только передают (Передача в одну сторону)
Rx tx что из них
Оптоволоконный приемопередатчик представляет собой блок преобразования среды передачи Ethernet, который обменивает электрические сигналы витой пары на короткие расстояния и оптические сигналы на большие расстояния.Во многих местах его также называют оптоволоконным преобразователем.Продукт обычно используется в реальной сетевой среде, где кабель Ethernet не может охватывать и должен использовать оптическое волокно для увеличения расстояния передачи, и обычно позиционируется на уровне доступа широкополосной городской сети. Например: видео высокой четкости передача изображения для систем видеонаблюдения;Он также сыграл огромную роль в подключении последней мили оптоволокна к городской сети и за ее пределами.
Во-первых, оптоволоконные трансиверы TX и RX.
При использовании оптоволоконных трансиверов для подключения различных устройств необходимо обращать внимание на разные используемые порты.
1. Подключение оптоволоконного трансивера к оборудованию 100BASE-TX (коммутатор, хаб):
Убедитесь, что длина витой пары не более 100 метров;
Подключите один конец витой пары к порту RJ-45 (порт Uplink) оптоволоконного трансивера, а другой конец — к порту RJ-45 (общий порт) устройства 100BASE-TX (свитч, хаб).
2. Подключение оптоволоконного трансивера к оборудованию 100BASE-TX (сетевая карта):
Убедитесь, что длина витой пары не более 100 метров;
Подключите один конец витой пары к порту RJ-45 (порт 100BASE-TX) оптоволоконного трансивера, а другой конец — к порту RJ-45 сетевой карты.
3. Подключение оптоволоконного трансивера к 100BASE-FX:
Убедитесь, что длина волокна не превышает диапазон расстояний, предусмотренный устройством;
Один конец оптоволокна подключен к разъему SC/ST оптоволоконного приемопередатчика, а другой конец подключен к разъему SC/ST устройства 100BASE-FX.
Во-вторых, разница между оптоволоконными трансиверами TX и RX.
TX отправляет, RX принимает.Оптические волокна расположены парами, а трансивер — парой.Отправка и получение должны быть одновременно, только получение и не отправка, а только отправка и не получение проблематичны.Если соединение установлено успешно, все индикаторы питания оптоволоконного приемопередатчика должны загореться, прежде чем их можно будет включить.
Что такое tx rx в маршрутизаторах Mikrotik?

Tx rx MikroTik — это технология передачи и приема данных, которая широко применяется в сетевых устройствах компании MikroTik. С помощью данной технологии возможна передача данных с высокой скоростью и надежностью, что делает ее популярной среди специалистов в области сетевых технологий.
Tx (transmit — передача) и rx (receive — прием) представляют собой аббревиатуры, которые указывают на соответствующие функции передачи и приема данных. Tx rx MikroTik может использоваться в различных сетевых устройствах, таких как маршрутизаторы, коммутаторы, точки доступа и другие.
Технология Tx rx MikroTik основана на методе передачи данных с использованием кабелей и беспроводных средств связи. Сигнал передается от источника (Tx) к приемнику (rx), где происходит его обработка и дальнейшая передача по сети.
Основными преимуществами использования технологии Tx rx MikroTik являются высокая скорость передачи данных, минимальные задержки в сети, отсутствие помех и высокая надежность работы. Все это позволяет расширить возможности сетевой инфраструктуры и обеспечить стабильное и качественное соединение.
Что такое Tx rx MikroTik?
Tx rx MikroTik — это термин, который относится к передаче и приему данных в сетевом оборудовании компании MikroTik. В роутерах и коммутаторах MikroTik используется эта терминология для обозначения направления передачи данных.
Tx (от англ. transmit) — означает передачу данных. Когда устройство отправляет информацию, оно запускает Tx-процесс. Например, когда вы отправляете запрос на сервер через роутер MikroTik, данные будут передаваться через интерфейс Tx.
Rx (от англ. receive) — означает прием данных. Когда устройство получает информацию, оно запускает Rx-процесс. Например, когда вы получаете ответ от сервера через роутер MikroTik, данные будут получаться через интерфейс Rx.
В сетевой передаче данных, Tx и Rx обычно используются вместе, чтобы обозначить двунаправленную коммуникацию между источником и назначением. Каждый пакет данных, отправленный от источника, должен быть получен и обработан назначением, и наоборот.
MikroTik предлагает различные возможности для настройки и управления передачей и приемом данных с помощью Tx rx. Вы можете настроить параметры передачи данных, такие как скорость передачи, мощность сигнала и другие, чтобы оптимизировать работу вашей сети.
В целом, понимание термина Tx rx MikroTik важно для администраторов сети и пользователей, работающих с оборудованием MikroTik, так как это позволяет эффективно настраивать и управлять передачей и приемом данных в сети.
Роль Tx rx MikroTik в сетевых технологиях
Tx rx MikroTik — это технология, которая используется в сетевых устройствах компании MikroTik для передачи и приема данных. Tx rx — это аббревиатура от терминов «transmit» и «receive», что означает передачу и прием данных соответственно.
MikroTik является одним из ведущих разработчиков и производителей оборудования для построения сетей. Их устройства, такие как маршрутизаторы и коммутаторы, обеспечивают соединение между компьютерами и другими сетевыми устройствами.
Роль Tx rx MikroTik состоит в том, чтобы осуществлять передачу и прием данных между устройствами в сети. Устройства MikroTik используют специальные сетевые интерфейсы, такие как Ethernet, чтобы обеспечить связь между компьютерами и другими устройствами.
В процессе передачи данных Tx rx MikroTik использует различные протоколы и алгоритмы для обработки и маршрутизации пакетов данных. Он также обеспечивает контроль качества обслуживания (QoS), чтобы гарантировать стабильную и надежную передачу данных.
Одним из важных аспектов роли Tx rx MikroTik является поддержка различных сетевых протоколов, таких как IP, TCP, UDP, ICMP и других. Это позволяет устройствам MikroTik успешно взаимодействовать с другими устройствами в сети и обеспечивать эффективную передачу данных.
Кроме того, Tx rx MikroTik обеспечивает защиту сети от различных угроз и атак, таких как DDoS и ведения журналов сетевой активности. Это помогает предотвратить несанкционированный доступ к сети и защищает данные, передаваемые через сетевые устройства MikroTik.
Суммируя, роль Tx rx MikroTik состоит в обеспечении передачи и приема данных между сетевыми устройствами, поддержке различных протоколов, обеспечении безопасности сети и обеспечении качества обслуживания.
Принцип работы Tx rx MikroTik
MikroTik – это производитель сетевого оборудования, включая маршрутизаторы и коммутаторы. Внутри этих устройств используется специальная технология передачи данных, которая известна как Tx rx (Transmit and Receive).
Принцип работы Tx rx MikroTik основан на передаче и приеме данных по кабельным линиям. Tx (передача) относится к процессу отправки данных с одного устройства на другое, а rx (прием) – к процессу получения данных на устройство.
Внутри MikroTik-устройств находятся Ethernet-порты, которые используются для подключения к другим сетевым устройствам или Интернету. Когда данные отправляются с одного устройства на MikroTik, они проходят через Ethernet-порт Tx, который затем передает их по кабелю на другое устройство.
На другом устройстве данные принимаются через Ethernet-порт rx и обрабатываются для дальнейшего использования. Если данные отправляются с MikroTik, то происходит обратный процесс: данные отправляются через Ethernet-порт Tx MikroTik и принимаются на другом устройстве через Ethernet-порт rx.
Принцип работы Tx rx MikroTik обеспечивает надежную и быструю передачу данных в сети. Это позволяет использовать MikroTik-устройства для создания сетей различных масштабов – от небольших офисных сетей до крупных корпоративных сетей.
Важно отметить, что для обеспечения правильной работы Tx rx MikroTik необходимы совместимые кабели и устройства. Неправильно подключенные или несовместимые компоненты могут привести к ошибкам передачи данных и снижению производительности сети.
Таким образом, принцип работы Tx rx MikroTik базируется на передаче и приеме данных через Ethernet-порты, обеспечивая надежную и эффективную передачу данных в сети.
Преимущества использования Tx rx MikroTik
Tx rx MikroTik – это технология, разработанная компанией MikroTik, которая предоставляет возможность передачи и приема данных через сетевые устройства. В использовании данной технологии есть несколько преимуществ:
- Высокая скорость передачи данных: Tx rx MikroTik обеспечивает высокую скорость передачи данных между устройствами. Это позволяет быстро и эффективно передавать большие объемы информации, что особенно важно в современных сетях, где требуется обработка большого количества данных.
- Надежность соединения: Технология Tx rx MikroTik обеспечивает надежное соединение между сетевыми устройствами. Это позволяет избежать потерь данных и обеспечивает стабильную работу сети.
- Простота настройки и управления: Настройка и управление соединением с использованием Tx rx MikroTik очень просты и интуитивно понятны. Это позволяет быстро настроить требуемые параметры соединения и обеспечить его надежную работу.
- Масштабируемость: Технология Tx rx MikroTik обладает высокой масштабируемостью, что позволяет использовать ее в любых сетевых сценариях – от небольших домашних сетей до крупных корпоративных инфраструктур.
- Полная совместимость с другими устройствами: Протокол TX RX MikroTik полностью совместим с другими сетевыми устройствами. Это позволяет интегрировать его в уже существующую инфраструктуру без необходимости проведения дополнительного обновления или изменения настроек.
Использование технологии Tx rx MikroTik позволяет существенно улучшить производительность и надежность сети, обеспечивая высокую скорость передачи данных, удобство настройки и управления, а также масштабируемость и совместимость со существующими устройствами.
Применение Tx rx MikroTik в различных сферах
Устройства Tx rx MikroTik имеют широкий спектр применений и могут быть использованы в различных сферах, в том числе:
- Сетевые коммуникации: Tx rx MikroTik может использоваться для установления беспроводного соединения между устройствами, создания магистральных линий и организации сети на территории предприятия.
- Интернет-провайдеры: провайдеры могут использовать Tx rx MikroTik для расширения географического охвата сети и увеличения пропускной способности подключения к Интернету.
- Видеонаблюдение: Tx rx MikroTik может использоваться для передачи видеосигнала с камер видеонаблюдения на большие расстояния без потери качества.
- Автоматизация технологических процессов: устройства Tx rx MikroTik могут быть использованы для передачи данных в системах автоматизации технологических процессов, например, в промышленности или сельском хозяйстве.
Основными преимуществами использования Tx rx MikroTik являются:
- Высокая стабильность и надежность сигнала.
- Широкая дальность передачи данных.
- Высокая скорость передачи данных.
- Гибкость настройки и масштабируемость.
- Удобное и простое управление и конфигурация.
В целом, Tx rx MikroTik является незаменимым инструментом для создания высококачественных и надежных беспроводных сетей, которые могут быть применены в различных сферах деятельности.
Как настроить и подключить Tx rx MikroTik
Для настройки и подключения Tx rx MikroTik необходимо выполнить следующие шаги:
- Подготовьте необходимое оборудование: Tx rx MikroTik, компьютер или ноутбук, кабель для подключения.
- Установите Tx rx MikroTik в удобном месте, где будет достаточно приема и передачи сигнала.
- Подключите один конец кабеля к порту Tx rx MikroTik, а другой конец к компьютеру или ноутбуку.
- Включите Tx rx MikroTik и дождитесь загрузки операционной системы.
- Перейдите на компьютере или ноутбуке в настройки сети и найдите доступные Wi-Fi сети.
- Выберите сеть, к которой хотите подключиться, и введите пароль, если он требуется.
- Подождите некоторое время, пока компьютер или ноутбук подключатся к выбранной сети.
- Проверьте подключение, открыв веб-браузер и перейдя на любой сайт.
После выполнения этих шагов вы успешно настроили и подключили Tx rx MikroTik. Вы сможете использовать его для получения и передачи сетевого соединения в вашем доме или офисе.
Если у вас возникнут проблемы с настройкой или подключением, обратитесь к руководству пользователя, которое поставляется с устройством, или обратитесь за помощью к специалисту.
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. Дотошно расписывать все тонкости его работы я не буду. Об этом написан ни один десяток мегабайт статей, и если ты умеешь пользоваться Гуглом, то без проблем найдешь всю необходимую информацию. Но основы я расскажу, благо с ними можно уже круто всем рулить, а всякие фишки используются очень редко.
Основные рабочие линии у нас – RXD и TXD, или просто RX и TX. Передающая линия – TXD (Transmitted Data), а порт RXD (Received Data) – принимающая.
Эти линии СОМ-порта задействованы при передаче без аппаратного управления потоком данных. При аппаратном потоке задействованы еще дополнительные интерфейсные линии (DTS, RTS и пр.). Выход передатчика TX соединен с входом приемника RX и наоборот. Электрический принцип работы RS-232 отличается от стандартной 5-вольтовой TTL логики. В этом протоколе логический нуль лежит от +3 до +12 вольт, а единица от -3 до -12, соответственно. Промежуток от -3 до +3 вольт считается зоной неопределенности. Учти, что все напряжения указаны относительно корпуса компьютера, или земли. Теперь, я думаю, ты понимаешь, зачем в компьютерном блоке питания существует сразу два напряжения: -12 и +12 вольт. Они были введены специально для работы СОМ-порта.
Приём сигнала по RS-232 (взято из книги М.Гук «Аппаратные интерфейсы ПК»)
Такая большая амплитуда рабочих напряжений, целых 24 вольта, нужна в первую очередь для помехоустойчивости линий связи. По стандарту, длина кабеля, по которому у нас бегают данные, может быть 15 м. Хотя на практике люди умудрялись заставлять его работать даже на 25 м. Электрические параметры RS-232 – это главная характеристика, которая отличает его от других протоколов семейства UART.
Следующие характеристики – формат посылки и скорость передачи данных – полностью применимы ко всем видам UART и обеспечивают их совместимость через несложные схемы сопряжения.
Стандартная посылка занимает 10 бит. Но правило это распространяется только на стандартные настройки СОМ-порта. В принципе, его можно перенастроить так, чтобы он даже интерфейс One-Wire понимал. В режиме простоя, когда по линии ничего не передается, она находится в состоянии логической единицы, или -12 вольт. Начало передачи обозначают передачей стартового бита, который всегда равен нулю. Затем идет передача восьми бит данных. Завершает посылку бит четности и стоповый бит. Бит четности осуществляет проверку переданных данных. Стоповый бит говорит нам, что пересылка данных завершена. Надо отметить, что STOP-бит может занимать 1, 1.5, и 2 бита. Не стоит думать, что это дробные биты, это число говорит только о его длительности. Стоповый бит, как и стартовый, равен нулю.

Сигнал 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.
Запускай ее с параметрами: minicom -l -8 -c on -s. Далее выбирай «Настройки последовательного порта»:
Последовательный порт /dev/ttyS0* Скорость/четность/биты 115200 8N1
* Аппаратное управление потоком — нет
* Программное управление потоком — нетСохраняем настройки. Софтина попробует проинициализировать модем — не обращай внимания. Чтобы вызвать меню, нажми . Там можно менять настройки, например: включить/выключить эхо — Е.
НастройкаЯ не рекомендую подключать микросхему преобразователя к роутеру, дабы проверить ее функционал. Допускается только брать с него питание. Проверка проходит очень просто — необходимо перемкнуть RX с TX. Сначала перемыкаешь в СОМ-порте 2-й и 3-й контакт — проверяешь настройки терминалки. Пишешь что-то на клаве: если символы возвращаются, значит, все ОК. Также проверяешь кабель, те же контакты. Потом подключаешь микросхему, и уже у нее на выходе ставишь перемычку. Я заостряю на этом внимание, потому что, например, у меня возникли проблемы, и ничего не работало, пока я все не проверил и не нашел ошибку.
После всех настроек можешь смело цеплять к роутеру и искать RX-TX на роутере, периодически выдергивая из него питание. Если все сделано правильно, то при подаче питания ты увидишь лог загрузки роутера. Принимай поздравления, теперь у тебя полный аппаратный рут, так, будто ты сидишь за монитором с клавой роутера.

Лог загрузки роутера в программе minicom
Автономное плаванье
Согласись, делать через терминальную программу то же самое, что удобнее сделать через SSH – не айс. Мне хотелось превратить роутер в автономный Linux-компьютер, со своей хитрой архитектурой. Для этого нужно, чтобы данные с клавиатуры передавались по UART, и по нему же выводились на монитор. Паять и разрабатывать устройство было лениво. Тогда-то и пришла идея заюзать для этих целей пылящийся без дела КПК. По сути, наладонник будет исполнять роль контроллера клавиатуры и дисплея, ну и служить сопряжением интерфейсов.
Сначала я попробовал древнейший Palm m100. Но, видимо, у него очень маленькая буферная память, и от количества данных, которые идут с роутера, ему становилось плохо. Я взял другой — промышленный КПК, с нормальным СОМ-портом и терминалкой. Подключил, вставил в док и, в результате, получил небольшой линукс-компьютер. В принципе, вместо дорогущего промышленного КПК подойдет большинство наладонников, работающих под операционкой WinCE, главное – найти подходящий терминальный софт.

Линукс компьютер 🙂
Итоги
Итак, я показал небольшой пример использования UART. Если ты вкуришь в этот протокол, то поверь, станешь просто повелителем различных железок. Есть он практически везде, и через него можно сопрягать, казалось бы, совершенно разные вещи. К примеру, к тому же роутеру при небольших настройках подключается мобильный телефон по юарту, – и раздает с него интернет. В общем, применений куча. Не бойся экспериментировать, самообразовываться и реализовать свои идеи.
Этот пост является отредактированной для хабра версией моей статьи в Хакере № 05/09 «Главный инструмент фрикера».
Литература:
1. Михаил Гук «Аппаратные интерфейсы ПК» — просто студенческая библия по персоналке.
2. en.wikipedia.org/wiki/RS-232
3. easyelectronics.ru/tag/rs232