Помните время, когда у принтеров, мышей и модемов были толстые кабели с огромными разъемами? Те, которые буквально нужно было вкрутить в ваш компьютер? Так вот эти устройства, вероятнее всего, использовали UART для связи с вашим компьютером.
Хотя USB почти полностью заменил эти старые кабели и разъемы, UART определенно не ушел в прошлое. Вы обнаружите, что UART используют во многих электронных проектах для подключения модулей GPS, модулей Bluetooth, модулей чтения карт RFID и других устройств к Raspberry Pi, Arduino или другим микроконтроллерам.
UART (Universal Asynchronous Receiver/Transmitter) означает универсальный асинхронный приемник/передатчик. Это не протокол связи, а физическая схема в микроконтроллере или отдельная микросхема. Основная цель UART – передавать и получать последовательные данные.
Одна из лучших особенностей UART заключается в том, что он использует только два провода для передачи данных между устройствами.
Введение в связь UART
При UART-коммуникации два UART-интерфейса взаимодействуют непосредственно друг с другом. Передающий UART преобразует параллельные данные от управляющего устройства в последовательную форму, передает их последовательно на принимающий UART, который затем преобразует последовательные данные обратно в параллельные данные для принимающего устройства. Для передачи данных между двумя UART необходимы только два провода. Данные передаются от вывода Tx передающего UART к выводу Rx принимающего UART:
UART’ы передают данные асинхронно. Это значит отсутствие тактового сигнала для синхронизации вывода битов из передающего UART с выборкой битов принимающим UART. Вместо тактового сигнала передающий добавляет к передаваемому пакету данных стартовый и стоповый биты. Эти биты определяют начало и конец пакета данных, поэтому принимающий UART «знает», когда начинать чтение битов.
Когда принимающий UART обнаруживает начальный бит, он начинает считывать входящие биты с определенной частотой, известной как скорость передачи данных. Скорость передачи — это скорость передачи данных, выраженная в битах в секунду (бит/с). Оба UART должны работать примерно с одинаковой скоростью передачи данных. Скорость передачи между передающим и принимающим UART может отличаться только примерно на 10%, прежде чем синхронизация битов станет слишком большой.
Оба UART также должны быть настроены для передачи и приема одной и той же структуры пакета данных.
Количество проводов | 2 |
Максимальная скорость передачи | Любая скорость до 115200 бод, обычно 9600 бод |
Синхронный или Асинхронный? | Асинхронный |
Последовательный или Параллельный | Последовательный |
Максимальное количество ведущих устройств | 1 |
Максимальное количество ведомых устройств | 1 |
Как работает UART
UART, который будет передавать данные, получает данные от шины данных. Шина данных используется для отправки данных в UART другим устройством, таким как ЦП, память или микроконтроллер. После того, как передающий UART получает параллельные данные, он добавляет стартовый бит, бит четности и стоповый бит, создавая пакет данных. Затем пакет данных выводится последовательно, бит за битом на выводе Tx. Принимающий UART считывает пакет данных побитно на своем выводе Rx. Затем принимающий UART преобразует данные обратно в параллельную форму и удаляет стартовый бит, бит четности и стоповые биты. Наконец, принимающий UART передает пакет данных параллельно шине данных на принимающей стороне:
Передаваемые UART-данные организованы в пакеты. Каждый пакет содержит 1 стартовый бит, от 5 до 9 битов данных (в зависимости от UART), необязательный бит четности и 1 или 2 стоповых бита:
Стартовый бит
Линия передачи данных UART обычно поддерживается на высоком уровне напряжения, когда она не передает данные. Чтобы начать передачу данных, передающий UART переводит линию передачи с высокого уровня на низкий в течение одного тактового цикла. Когда принимающий UART обнаруживает переход напряжения от высокого к низкому, он начинает считывать биты данных с частотой, соответствующей скорости передачи данных.
Данные
Кадр данных содержит фактические передаваемые данные. Его длина может составлять от 5 до 8 бит, если используется бит четности. Если бит четности не используется, длина кадра данных может составлять 9 бит. В большинстве случаев данные отправляются сначала с младшим битом.
Бит четности
Четность описывает четность или нечетность числа. Бит четности позволяет принимающему UART определить, изменились ли какие-либо данные во время передачи. Биты могут быть изменены из-за электромагнитного излучения, несовпадения скоростей передачи данных или передачи данных на большие расстояния. После того, как принимающий UART прочитает данные, он подсчитывает количество бит со значением 1 и проверяет, является ли сумма четным или нечетным числом.
Если бит четности равен 0 (четный),то биты 1 в кадре данных должны в сумме составлять четное число.
Если бит четности равен 1 (нечетная четность), то сумма битов 1 в кадре данных должна составлять нечетное число.
Когда бит четности соответствует данным, UART знает, что передача не содержала ошибок.
Но если бит четности равен 0, а сумма нечетная; или бит четности равен 1, а сумма четная, UART знает, что биты в кадре данных изменились.
Стоп-биты
Чтобы сигнализировать об окончании пакета данных, отправляющий UART переводит линию передачи данных из низкого напряжения в высокое в течение как минимум двух битов.
Этапы передачи UART
- Передающий UART параллельно получает данные с шины данных:
- Передающий UART формирует пакет, добавляя к данным стартовый бит, бит четности и стоповый бит(ы):
- Весь пакет передается последовательно от передающего UART к принимающему UART. Принимающий UART выполняет выборку линии передачи данных с предварительно настроенной скоростью передачи данных в бодах:
- Принимающий UART отбрасывает стартовый бит, бит четности и стоповый бит из принятых данных:
- Принимающий UART преобразует последовательные данные обратно в параллельные и передает их на шину данных на принимающей стороне:
Преимущества и недостатки UART
Ни один протокол связи не является идеальным, но UART неплохо справляются со своими задачами. Вот некоторые плюсы и минусы, которые помогут вам решить, соответствуют ли они потребностям вашего проекта:
Преимущества
- Использует только два провода
- Не требуется тактовый сигнал
- Имеет бит четности для проверки ошибок.
- Структура пакета данных может быть изменена при условии, что обе стороны настроены на это
- Хорошо документированный и широко используемый метод.
Недостатки
- Размер фрейма данных ограничен максимум 9 битами
- Не поддерживает несколько ведомых или несколько ведущих систем
- Скорости передачи каждого UART должны отличаться друг от друга в пределах 10 %.