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

Старт-бит и стоп-бит

Старт-бит и стоп-бит — служебные биты асинхронного последовательного кадра. Они позволяют передавать данные без отдельного тактового сигнала: приёмник узнаёт начало символа по старт-биту и проверяет его конец по стоп-биту.

Обновлено Редакция GAW

Старт-бит и стоп-бит (start bit, stop bit) — служебные биты, которыми UART обрамляет каждый передаваемый символ. В покое линия находится в единице. Кадр начинается старт-битом — линия на время одного бита переходит в ноль, — и по этому спаду приёмник синхронизируется и начинает отсчитывать биты данных по своему генератору. После данных и необязательного бита чётности идут стоп-биты — снова единица, — которые возвращают линию в покой и гарантируют, что спад следующего старт-бита будет заметен.

Формат кадра

ФорматДанныеЧётностьСтоп-битыБит в кадре
8N18нет110
8E18чётная111
8N28нет211
7E17чётная110

Данные идут младшим битом вперёд. Символ «U» = 0x55 в формате 8N1 вместе со старт- и стоп-битом даёт на линии чередование 0 и 1 — меандр, по частоте которого удобно проверять скорость передачи: при 9600 бит/с это 4800 Гц.

Проверка стоп-бита

Приёмник проверяет только первый стоп-бит: если на его месте ноль, выставляется флаг ошибки кадра (framing error) — FE0 у AVR, FE у STM32 и UART 16550. Обычно это признак несовпадения скорости или формата. Если линия держится в нуле дольше целого кадра, это условие break. Кадр по битам для своих данных, формата и уровней нарисует конструктор кадра UART, а подробно о формате, приёме и ошибках — в статье об интерфейсе UART.

Частые вопросы

Что означает формат 8N1?

Восемь бит данных, без бита чётности (N — none) и один стоп-бит. Вместе со старт-битом кадр занимает 10 бит, из них полезных 8. Это формат по умолчанию у Serial.begin() в Arduino; при 115 200 бит/с через линию проходит не больше 11 520 байт в секунду.

Что такое ошибка кадра (framing error)?

Приёмник ожидает на месте первого стоп-бита единицу, а прочитал ноль. Обычно это значит, что не совпадают скорости передатчика и приёмника, формат кадра или на линии помеха. Флаг ошибки кадра есть у всех UART: FE0 у AVR, FE у STM32 и UART 16550.

Зачем два стоп-бита?

Второй стоп-бит лишь удлиняет паузу между символами: приёмники USART AVR, STM32 и UART 16550 проверяют только первый стоп-бит. Поэтому передатчик с двумя стоп-битами понятен приёмнику, настроенному на один. Modbus RTU требует два стоп-бита, если бит чётности не используется, — так длина кадра остаётся 11 бит.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — гл. 20 — USART0: формат кадра (20.4), приём и проверка первого стоп-бита, флаг FE0
  2. Texas Instruments. TL16C550C Asynchronous Communications Element with Autoflow Control (SLLS177I), 2021 — стоп-биты, флаги FE и BI
  3. Modbus Organization. MODBUS over Serial Line Specification and Implementation Guide V1.02 — без чётности — два стоп-бита (8N2)

Нашли ошибку?