Кадр UART — это один символ: старт-бит, от 5 до 9 бит данных младшим вперёд, необязательный бит чётности и один или два стоп-бита. Между кадрами линия остаётся в единице. Инструмент собирает кадры из текста или байтов, разбирает их обратно из строки битов и показывает, как приёмник читает биты, если его скорость отличается от скорости передатчика.
Коротко
- Формат: старт-бит (0), биты данных D0…Dn младшим вперёд, бит чётности, стоп-биты (1); линия в покое — 1.
- Длина кадра: 1 + n + p + s бит, где n — от 5 до 9 бит данных, p — 0 или 1 бит чётности, s — 1, 1,5 или 2 стоп-бита; у 8N1 — 10 бит.
- Чётность: исключающее ИЛИ битов данных, для odd — с инверсией.
- Время символа: длина кадра, делённая на скорость: 8N1 на 115 200 бит/с — 86,8 мкс.
- Допуск скорости: для 8N1 идеальный приёмник выдерживает ±5,26 %, приёмник AVR — от −4,64 до +4,58 %.
Как пользоваться
Собрать. Введите текст или байты в шестнадцатеричном виде, выберите число битов данных, чётность, стоп-биты и скорость. Текст кодируется в UTF-8: латинская буква — один байт, русская — два. Под панелью расчёта — лента кадров: ячейки подписаны (S — старт-бит, D0…D8 — данные, P — чётность, Sp — стоп-бит), линия над ними повторяет сигнал. Переключатель «Уровни на линии» показывает тот же сигнал после драйвера RS-232: там логическая единица передаётся отрицательным напряжением. Кнопка над лентой копирует биты всех кадров подряд — например, для генератора сигналов или теста.
Разобрать биты. Вставьте уровни линии, по одному символу на битовый интервал. Инструмент найдёт старт-биты, прочитает символы, проверит чётность и стоп-бит и пометит кадры с ошибками.
Расхождение скорости. Задайте скорость передатчика и фактическую скорость приёмника — с ошибкой его делителя, её считает калькулятор скорости UART. Диаграмма покажет, куда попадает каждая выборка приёмника, а итог — читается ли кадр.
Все параметры хранятся в адресе страницы: собранный кадр или разбор можно отправить ссылкой.
Как устроен кадр UART
| Поле | Бит | Уровень | Что передаётся |
|---|---|---|---|
| Старт-бит | 1 | 0 | начало кадра: по его спаду приёмник синхронизируется |
| Данные | 5–9 | — | символ, младшим битом вперёд |
| Чётность | 0 или 1 | — | исключающее ИЛИ битов данных (even) или его инверсия (odd) |
| Стоп-бит | 1, 1,5 или 2 | 1 | конец кадра; приёмник проверяет только первый стоп-бит |
Длина кадра и время символа:
где — число бит данных, — 1 при включённой чётности, — число стоп-битов, — скорость, бит/с. Бит чётности для even:
Так их определяет даташит ATmega328P (раздел 20.4.1). У STM32 есть отличие в настройке: бит чётности входит в длину слова, поэтому формат 8E1 настраивается как слово из 9 бит, а 7E1 — как слово из 8 бит (RM0008, глава 27).
Время передачи
Время одного символа и число символов в секунду при передаче без пауз между кадрами:
| Формат | Бит на символ | 9 600 бит/с | 19 200 бит/с | 57 600 бит/с | 115 200 бит/с | 1 000 000 бит/с |
|---|---|---|---|---|---|---|
| 8N1 | 10 | 1,042 мс960 симв./с | 520,8 мкс1920 симв./с | 173,6 мкс5760 симв./с | 86,81 мкс11520 симв./с | 10 мкс100000 симв./с |
| 7E1 | 10 | 1,042 мс960 симв./с | 520,8 мкс1920 симв./с | 173,6 мкс5760 симв./с | 86,81 мкс11520 симв./с | 10 мкс100000 симв./с |
| 8E1 | 11 | 1,146 мс872,73 симв./с | 572,9 мкс1745,5 симв./с | 191 мкс5236,4 симв./с | 95,49 мкс10473 симв./с | 11 мкс90909 симв./с |
| 8N2 | 11 | 1,146 мс872,73 симв./с | 572,9 мкс1745,5 симв./с | 191 мкс5236,4 симв./с | 95,49 мкс10473 симв./с | 11 мкс90909 симв./с |
| 8E2 | 12 | 1,25 мс800 симв./с | 625 мкс1600 симв./с | 208,3 мкс4800 симв./с | 104,2 мкс9600 симв./с | 12 мкс83333 симв./с |
Полезная скорость меньше номинальной: в кадре 8N1 данные занимают 8 бит из 10, то есть 80 % времени линии. На 115 200 бит/с это 92 160 бит, или 11 520 байт, в секунду.
Расхождение скоростей: как считает инструмент
Приёмник синхронизируется по спаду старт-бита и дальше отсчитывает биты по своим часам. Бит с номером (0 — старт-бит) он читает через своих битовых интервалов, то есть через
битовых интервалов входящего кадра. Пока остаётся внутри бита , бит читается верно. Хуже всего приходится последнему проверяемому — первому стоп-биту: в кадре 8N1 это бит 9, и условие даёт допуск ±5,26 %. Приёмник с выборками добавляет к этому неопределённость старта — до одной выборки, бита.
Приёмник AVR читает бит по большинству из трёх средних выборок и строже идеальной модели. Его границы инструмент считает по формуле из раздела 20.8.3 даташита — она выведена в статье об UART, там же разобраны допуски STM32 и оценка Maxim для длинных линий:
| Формат | D | Идеальный приёмник | AVR, 16 выборок | AVR, 8 выборок (U2X) |
|---|---|---|---|---|
| 7N1 | 7 | −5,88 % … +5,88 % | −5,19 % … +5,11 % | −4,48 % … +4,35 % |
| 8N1 | 8 | −5,26 % … +5,26 % | −4,64 % … +4,58 % | −4 % … +3,9 % |
| 7E1 | 8 | −5,26 % … +5,26 % | −4,64 % … +4,58 % | −4 % … +3,9 % |
| 8E1 | 9 | −4,76 % … +4,76 % | −4,19 % … +4,14 % | −3,61 % … +3,53 % |
| 9E1 | 10 | −4,35 % … +4,35 % | −3,83 % … +3,78 % | −3,3 % … +3,23 % |
Пример. ATmega328P на 16 МГц не может точно получить 115 200 бит/с: при UBRR0 = 8 и U2X0 = 0 его скорость — 16 000 000 / (16 · 9) = 111 111 бит/с. Передатчик на точных 115 200 бит/с быстрее на 3,68 %. Кадр 8N1 ещё читается — граница +4,58 %, — но рекомендованные Microchip ±2 % на сторону превышены почти вдвое, и на ошибку второй стороны, фронты и шум запаса почти не остаётся. В режиме U2X0 = 1 с UBRR0 = 16 скорость 117 647 бит/с, ошибка −2,08 %: до границы −4,00 % остаётся почти 2 %, хотя рекомендация для этого режима — ±1,5 %. Точную скорость дают кварцы с «UART-частотами», например 14,7456 МГц.
Ограничения
- Только асинхронный режим. Синхронный USART с отдельным тактовым выводом, многопроцессорный режим с девятым адресным битом и протоколы поверх UART (LIN, Modbus) здесь не разбираются — для Modbus RTU есть свой инструмент.
- Разбор ждёт один отсчёт на бит. Если анализатор записал сигнал с частотой выше скорости линии, сначала проредите отсчёты до середин битов — или воспользуйтесь декодером UART в программе анализатора.
- Чётность mark и space (постоянный бит, режим stick parity UART 16550) не поддерживается — встречается редко, подробнее в статье об UART.
- Половина стоп-бита в строке битов не выражается, поэтому 1,5 стоп-бита при разборе читаются как один — так их проверяет и приёмник.
- Модель расхождения скорости не учитывает затянутые фронты и шум: их запас и закладывают рекомендации производителей.
Частые вопросы
Сколько бит в кадре UART 8N1?
Десять: старт-бит, 8 бит данных и стоп-бит. С битом чётности (8E1) — 11, с двумя стоп-битами (8N2) — тоже 11, 7E1 — снова 10. На 115 200 бит/с символ 8N1 передаётся за 86,8 мкс, и без пауз между кадрами линия пропускает 11 520 символов в секунду.
В каком порядке передаются биты UART?
Младшим битом вперёд: после старт-бита идёт D0, последним — старший бит данных (даташит ATmega328P, раздел 20.4). Поэтому символ «A» (0x41, в двоичном виде 01000001) на линии выглядит как 0 10000010 1: старт-бит, биты от D0 до D7 и стоп-бит.
Как считается бит чётности UART?
Это исключающее ИЛИ всех битов данных; при нечётной чётности (odd) результат инвертируется. В итоге при even число единиц в битах данных вместе с битом чётности чётное, при odd — нечётное. У символа «A» (0x41) две единицы, поэтому бит чётности even — 0, odd — 1.
Что значит 1,5 стоп-бита?
Стоп-бит длиной полтора битовых интервала: передатчик держит линию в единице на половину бита дольше. Встречается редко: в STM32F1 поле STOP регистра USART_CR2 допускает 0,5, 1, 1,5 и 2 бита, но 0,5 и 1,5 предназначены для режима смарт-карт (RM0008). AVR умеет 1 и 2 стоп-бита, а его приёмник проверяет только первый, поэтому кадры с двумя стоп-битами он принимает и в режиме с одним.
Насколько могут расходиться скорости передатчика и приёмника?
Если приёмник читает бит точно в середине, для 8N1 середина стоп-бита остаётся внутри него при расхождении до ±5,26 %. Приёмник AVR с 16 выборками на бит строже: по формуле даташита — от −4,64 до +4,58 %, а Microchip рекомендует держать ошибку каждой стороны в пределах ±2 %. Запас нужен на ошибку второй стороны, затянутые фронты и шум; подробнее — в статье об UART.
Как разобрать запись логического анализатора?
Выпишите уровень линии один раз на битовый интервал — 1 для высокого, 0 для низкого — и вставьте строку в режим «Разобрать биты». Инструмент, как приёмник, ждёт перехода из единицы в ноль, читает биты данных и чётность и проверяет стоп-бит. Если на месте стоп-бита ноль, это ошибка кадра; если ноль держится весь кадр — сигнал break.
Источники
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B), 2020 — разд. 20.4 — форматы кадра, порядок битов, приёмник проверяет только первый стоп-бит; 20.4.1 — расчёт бита чётности; 20.8.1–20.8.2 — выборки старт-бита и данных; 20.8.3 — формула (Equation 1) и табл. 20-2, 20-3 допуска приёмника
- STMicroelectronics. RM0008 Reference manual STM32F101xx–STM32F107xx, Rev 21, 2021 — гл. 27 — USART: длина слова 8 или 9 бит вместе с битом чётности, стоп-биты 0,5, 1, 1,5 и 2 (регистр USART_CR2; 0,5 и 1,5 — для режима смарт-карт)
- ITU-T V.28. Electrical characteristics for unbalanced double-current interchange circuits, 03/1993 — полярность RS-232: логическая 1 (MARK) — отрицательное напряжение
- sigrok project. sigrok-test: decoder/test/uart, записи hello_world — расшифровки строки «Hello World!» в форматах 7O1, 7E1, 8E1 и 8N1 на 115 200 бит/с, записанной логическим анализатором; по ним проверены биты кадров и чётность
Встроить калькулятор на свой сайт
Скопируйте код и вставьте его в HTML страницы, статьи или вики. Виджет бесплатный, без рекламы, счётчиков и cookie. Условие одно — ссылка на GAW под рамкой остаётся на месте. Подробнее о виджетах
<iframe src="https://gaw.ru/embed/uart-frame/" title="Кадр UART по битам" width="100%" height="640" style="border:1px solid #e3e5e9;border-radius:8px" loading="lazy" allow="clipboard-write"></iframe>
<p style="margin:6px 0 0;font-size:14px">Калькулятор: <a href="https://gaw.ru/tools/uart-frame/">Кадр UART по битам</a> — GAW.ru</p>Автоподстройка высоты рамки
Если сайт разрешает скрипты, добавьте этот код один раз в любом месте страницы: рамка будет менять высоту вместе с результатом расчёта.
<script>window.addEventListener("message",function(e){if(e.origin!=="https://gaw.ru"||!e.data||e.data.type!=="gaw:embed-height")return;var f=document.querySelectorAll('iframe[src^="https://gaw.ru/embed/"]');for(var i=0;i<f.length;i++)if(f[i].contentWindow===e.source)f[i].style.height=e.data.height+"px"})</script>Обновлено . Нашли ошибку в расчёте? Напишите нам.