Перейти к содержанию

Кадр UART по битам

Введите текст или байты — инструмент разложит каждый символ на биты кадра UART в выбранном формате, нарисует сигнал на линии и посчитает время передачи. Второй режим разбирает строку битов с логического анализатора, третий показывает, где приёмник читает биты, если скорости сторон расходятся.

Исходные данные

Режим
Данные

кодируется в UTF-8: латиница — один байт, кириллица — два

Формат 8N1: 10 бит на символ

бит/с

9600, 57600, 115200 …

Уровни на линии

Результат

Символ в формате 8N1
86,81 мкс
10 бит: старт, 8 данных, 1 стоп
Длительность бита
8,681 мкс
Символов в секунду
11520при передаче без пауз между кадрами
Полезная скорость
92160 бит/с80 % времени линии — биты данных
Передача 2 символов
173,6 мкс

Кадры по битам

Слева направо в порядке передачи; биты данных идут младшим вперёд. Линия над ячейками — уровень на выводе TX: в покое высокий.

Кадры UART 8N1: O K10Символ 1: старт-бит = 0, низкий уровень0SСимвол 1: бит данных D0 = 1, высокий уровень1D0Символ 1: бит данных D1 = 1, высокий уровень1D1Символ 1: бит данных D2 = 1, высокий уровень1D2Символ 1: бит данных D3 = 1, высокий уровень1D3Символ 1: бит данных D4 = 0, низкий уровень0D4Символ 1: бит данных D5 = 0, низкий уровень0D5Символ 1: бит данных D6 = 1, высокий уровень1D6Символ 1: бит данных D7 = 0, низкий уровень0D7Символ 1: стоп-бит = 1, высокий уровень1SpOСимвол 2: старт-бит = 0, низкий уровень0SСимвол 2: бит данных D0 = 1, высокий уровень1D0Символ 2: бит данных D1 = 1, высокий уровень1D1Символ 2: бит данных D2 = 0, низкий уровень0D2Символ 2: бит данных D3 = 1, высокий уровень1D3Символ 2: бит данных D4 = 0, низкий уровень0D4Символ 2: бит данных D5 = 0, низкий уровень0D5Символ 2: бит данных D6 = 1, высокий уровень1D6Символ 2: бит данных D7 = 0, низкий уровень0D7Символ 2: стоп-бит = 1, высокий уровень1SpK
  • старт-бит
  • данные
  • стоп-бит
№СимволКодДвоичный, старшим вперёдНа линии
1O0x4F010011110 11110010 1
2K0x4B010010110 11010010 1

Кадр 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

Кадры UART: U и A в формате 8N1, A в формате 7E110Символ 1: старт-бит = 0, низкий уровень0SСимвол 1: бит данных D0 = 1, высокий уровень1D0Символ 1: бит данных D1 = 0, низкий уровень0D1Символ 1: бит данных D2 = 1, высокий уровень1D2Символ 1: бит данных D3 = 0, низкий уровень0D3Символ 1: бит данных D4 = 1, высокий уровень1D4Символ 1: бит данных D5 = 0, низкий уровень0D5Символ 1: бит данных D6 = 1, высокий уровень1D6Символ 1: бит данных D7 = 0, низкий уровень0D7Символ 1: стоп-бит = 1, высокий уровень1SpU, 8N1Символ 2: старт-бит = 0, низкий уровень0SСимвол 2: бит данных D0 = 1, высокий уровень1D0Символ 2: бит данных D1 = 0, низкий уровень0D1Символ 2: бит данных D2 = 0, низкий уровень0D2Символ 2: бит данных D3 = 0, низкий уровень0D3Символ 2: бит данных D4 = 0, низкий уровень0D4Символ 2: бит данных D5 = 0, низкий уровень0D5Символ 2: бит данных D6 = 1, высокий уровень1D6Символ 2: бит данных D7 = 0, низкий уровень0D7Символ 2: стоп-бит = 1, высокий уровень1SpA, 8N1Символ 3: старт-бит = 0, низкий уровень0SСимвол 3: бит данных D0 = 1, высокий уровень1D0Символ 3: бит данных D1 = 0, низкий уровень0D1Символ 3: бит данных D2 = 0, низкий уровень0D2Символ 3: бит данных D3 = 0, низкий уровень0D3Символ 3: бит данных D4 = 0, низкий уровень0D4Символ 3: бит данных D5 = 0, низкий уровень0D5Символ 3: бит данных D6 = 1, высокий уровень1D6Символ 3: бит чётности = 0, низкий уровень0PСимвол 3: стоп-бит = 1, высокий уровень1SpA, 7E1
Символ «U» (0x55) в формате 8N1 даёт на линии меандр, «A» (0x41) — два одиночных импульса единицы в данных. Тот же «A» в 7E1: семь бит данных и бит чётности, кадр снова 10 бит.
ПолеБитУровеньЧто передаётся
Старт-бит10начало кадра: по его спаду приёмник синхронизируется
Данные5–9—символ, младшим битом вперёд
Чётность0 или 1—исключающее ИЛИ битов данных (even) или его инверсия (odd)
Стоп-бит1, 1,5 или 21конец кадра; приёмник проверяет только первый стоп-бит

Длина кадра и время символа:

N=1+n+p+s,tсимв=NB,N = 1 + n + p + s, \qquad t_\text{симв} = \frac{N}{B},

где nn — число бит данных, pp — 1 при включённой чётности, ss — число стоп-битов, BB — скорость, бит/с. Бит чётности для even:

Peven=dn−1⊕dn−2⊕⋯⊕d0,Podd=Peven‾.P_\text{even} = d_{n-1} \oplus d_{n-2} \oplus \dots \oplus d_0, \qquad P_\text{odd} = \overline{P_\text{even}}.

Так их определяет даташит ATmega328P (раздел 20.4.1). У STM32 есть отличие в настройке: бит чётности входит в длину слова, поэтому формат 8E1 настраивается как слово из 9 бит, а 7E1 — как слово из 8 бит (RM0008, глава 27).

Время передачи

Время одного символа и число символов в секунду при передаче без пауз между кадрами:

ФорматБит на символ9 600 бит/с19 200 бит/с57 600 бит/с115 200 бит/с1 000 000 бит/с
8N1101,042 мс960 симв./с520,8 мкс1920 симв./с173,6 мкс5760 симв./с86,81 мкс11520 симв./с10 мкс100000 симв./с
7E1101,042 мс960 симв./с520,8 мкс1920 симв./с173,6 мкс5760 симв./с86,81 мкс11520 симв./с10 мкс100000 симв./с
8E1111,146 мс872,73 симв./с572,9 мкс1745,5 симв./с191 мкс5236,4 симв./с95,49 мкс10473 симв./с11 мкс90909 симв./с
8N2111,146 мс872,73 симв./с572,9 мкс1745,5 симв./с191 мкс5236,4 симв./с95,49 мкс10473 симв./с11 мкс90909 симв./с
8E2121,25 мс800 симв./с625 мкс1600 симв./с208,3 мкс4800 симв./с104,2 мкс9600 симв./с12 мкс83333 симв./с

Полезная скорость меньше номинальной: в кадре 8N1 данные занимают 8 бит из 10, то есть 80 % времени линии. На 115 200 бит/с это 92 160 бит, или 11 520 байт, в секунду.

Расхождение скоростей: как считает инструмент

Приёмник синхронизируется по спаду старт-бита и дальше отсчитывает биты по своим часам. Бит с номером kk (0 — старт-бит) он читает через k+0,5k + 0{,}5 своих битовых интервалов, то есть через

tk=(k+0,5)⋅BперBпрt_k = (k + 0{,}5) \cdot \frac{B_\text{пер}}{B_\text{пр}}

битовых интервалов входящего кадра. Пока tkt_k остаётся внутри бита kk, бит читается верно. Хуже всего приходится последнему проверяемому — первому стоп-биту: в кадре 8N1 это бит 9, и условие 9≤9,5⋅Bпер/Bпр<109 \le 9{,}5 \cdot B_\text{пер}/B_\text{пр} < 10 даёт допуск ±5,26 %. Приёмник с выборками добавляет к этому неопределённость старта — до одной выборки, 1/161/16 бита.

Приёмник AVR читает бит по большинству из трёх средних выборок и строже идеальной модели. Его границы инструмент считает по формуле из раздела 20.8.3 даташита — она выведена в статье об UART, там же разобраны допуски STM32 и оценка Maxim для длинных линий:

ФорматDИдеальный приёмникAVR, 16 выборокAVR, 8 выборок (U2X)
7N17−5,88 % … +5,88 %−5,19 % … +5,11 %−4,48 % … +4,35 %
8N18−5,26 % … +5,26 %−4,64 % … +4,58 %−4 % … +3,9 %
7E18−5,26 % … +5,26 %−4,64 % … +4,58 %−4 % … +3,9 %
8E19−4,76 % … +4,76 %−4,19 % … +4,14 %−3,61 % … +3,53 %
9E110−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.

Источники

  1. 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 допуска приёмника
  2. 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 — для режима смарт-карт)
  3. ITU-T V.28. Electrical characteristics for unbalanced double-current interchange circuits, 03/1993 — полярность RS-232: логическая 1 (MARK) — отрицательное напряжение
  4. 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>

Обновлено . Нашли ошибку в расчёте? Напишите нам.