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

Полезная скорость последовательных интерфейсов

Выберите интерфейс, скорость линии и размер сообщения — калькулятор разложит кадр на данные и служебные биты, посчитает период сообщений, сколько их помещается в секунду, полезную скорость в бит/с и байт/с и долю данных в потоке. У CAN — с худшим случаем вставленных битов, у Modbus — полный цикл опроса функцией 03, у USB — по таблице 5-9 спецификации.

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

Интерфейс
бит/с

Можно 115200, 400k, 8M

бит

0 — символы подряд

мс

Время программы между сообщениями; 0 — сообщения подряд

Результат

Полезная скорость
92,16 кбит/с
11,52 кБ/с данных
Эффективность
80 %от 115,2 кбит/с на линии
Сообщений в секунду
180
Период сообщений
5,556 мс640 битовых интервалов
Бит на байт (символ)
10
Формат кадра
8N1
Из чего состоит сообщениеБитДоля
Данные51280 %
Старт-биты6410 %
Стоп-биты6410 %

Расчёт выполнен по формулам и данным из источников, приведённых на этой странице, и не заменяет проверку: параметры компонентов у разных производителей и даже партий различаются. Перед применением сверяйте результат с документацией на конкретные детали.

Скорость интерфейса в бодах или герцах — это скорость линии, а не данных. Каждый протокол тратит часть битов на синхронизацию, адресацию, контроль ошибок и паузы, и полезных данных проходит меньше. Калькулятор считает, сколько битовых интервалов занимает одно сообщение, и из этого — полезную скорость, число сообщений в секунду и долю данных в потоке.

Как считается

Для всех интерфейсов расчёт одинаковый. Сообщение из N полезных байт занимает на линии B битовых интервалов вместе со служебными полями и обязательными паузами. При скорости линии R:

T=BR+tпауза,сообщений в секунду=1T,Rполезн=8NT,η=RполезнR.T = \frac{B}{R} + t_\text{пауза}, \qquad \text{сообщений в секунду} = \frac{1}{T}, \qquad R_\text{полезн} = \frac{8N}{T}, \qquad \eta = \frac{R_\text{полезн}}{R}.

Здесь tпауза — время, которое программа добавляет между сообщениями сама. Калькулятор считает поток сообщений подряд: это потолок, к которому можно приблизиться с DMA и аппаратными очередями. Все длины полей взяты из спецификаций, а сложение и деление — наш расчёт.

UART

Символ UART — старт-бит, 5–9 бит данных, бит чётности (если включён) и 1, 1,5 или 2 стоп-бита. Подробно кадр разобран в статье про UART и в калькуляторе кадра UART. Бод у UART равен биту в секунду, поэтому байт в формате 8N1 занимает 10 битовых интервалов:

ФорматБит на символДоля данныхСимволов/с на 115 200 бод
8N11080 %11 520
8E1, 8O1, 8N21172,7 %10 473
7E11070 %11 520 (по 7 бит; в пересчёте на 8-битные байты — 10 080)
8E21266,7 %9600

Поле «Пауза между символами» учитывает промежутки, которые оставляет передатчик между байтами. Когда программа кладёт байты в регистр данных по одному из прерывания, паузы появляются почти всегда; с DMA и FIFO символы идут подряд. Пауза измеряется в битовых интервалах: при 115 200 бод один интервал — 8,68 мкс.

SPI

У SPI нет старт- и стоп-битов: байт — это 8 тактов SCK. Накладные расходы дают команда и адрес перед данными, паузы между байтами и время, когда CS неактивен. Чтение 256 байт из флеш-памяти командой 03h с трёхбайтовым адресом на 8 МГц — это 260 байт, 2080 тактов и 260 мкс: 984,6 кБ/с, 98,5 % от частоты SCK. Если между байтами по 4 такта простоя — обычное дело при передаче без DMA, — время растёт до 389,5 мкс, а доля данных падает до 65,7 %. Временную диаграмму кадра и режимы CPOL/CPHA показывает калькулятор кадра SPI.

I²C

Каждый байт на шине I²C занимает 9 тактов SCL: 8 бит и бит подтверждения ACK или NACK. К ним добавляются байт адреса, байты адреса регистра, условия START, повторный START и STOP со своими минимальными временами и пауза tBUF перед следующим START. Калькулятор берёт минимальные времена из табл. 11 UM10204, а такты считает длительностью 1/fSCL; растяжение такта ведомым не учитывается. Последовательность байтов строится так же, как в калькуляторе транзакций I²C.

Операция100 кГц400 кГц1 МГц
Чтение 2 байт с адресом регистра: S, адрес+W, регистр, Sr, адрес+R, 2 байта, P471,4 мкс116,2 мкс46,5 мкс
Запись 32 байт с двухбайтовым адресом (EEPROM): S, адрес+W, 2 байта адреса, 32 байта, P3,163 мс0,790 мс0,316 мс
Доля данных при записи 32 байт80,9 %81,0 %81,0 %

Короткие транзакции датчиков используют шину хуже всего: из 45 тактов чтения двух байт данных только 16. Для EEPROM таблица показывает только время на шине — после STOP микросхема ещё записывает страницу во внутреннюю память и до конца записи (время tWR из её даташита) не отвечает на свой адрес.

CAN 2.0A и 2.0B

Классический кадр данных CAN по спецификации Bosch 2.0 — 44 + 8n бит в стандартном формате (идентификатор 11 бит) и 64 + 8n бит в расширенном (29 бит), от SOF до конца EOF, где n — число байт данных, от 0 до 8. После каждого кадра идёт межкадровый интервал из 3 рецессивных битов. От SOF до конца последовательности CRC передатчик после пяти одинаковых битов вставляет противоположный — вставку битов. Их число зависит от данных; наибольшее — ⌊(g+8n−1)/4⌋\lfloor (g + 8n - 1)/4 \rfloor, где g = 34 для стандартного и 54 для расширенного кадра (Davis и др., 2007).

Байт данныхСтандартный кадр, битХудший случай, битКадров/с на 500 кбит/с (худший)Доля данных (худший)
0475590910 %
15565769212,3 %
26375666721,3 %
47995526333,7 %
8111135370447,4 %

Длины в таблице включают межкадровый интервал. Расширенный кадр с 8 байтами — 131 бит без вставленных битов и 160 в худшем случае, 3125 кадров в секунду на 500 кбит/с. Даже с полными кадрами больше половины времени шины CAN уходит на служебные поля. Кадр по битам с реальным числом вставленных битов строит калькулятор кадра CAN, а про протокол в целом — статья о шине CAN.

Modbus RTU

По спецификации Modbus over Serial Line символ RTU занимает 11 бит: старт-бит, 8 бит данных, бит чётности и стоп-бит, а без чётности — два стоп-бита. Режим 8N1 с 10-битным символом встречается у многих устройств, но в спецификацию не входит — калькулятор считает и его. Кадр — адрес, код функции, данные и CRC из двух байт, кадры разделяет тишина не короче 3,5 символа; выше 19 200 бит/с спецификация рекомендует фиксированные 1,750 мс.

Режим «Опрос 03» считает полный цикл чтения регистров хранения: запрос из 8 байт, тишина t3,5, задержка ведомого, ответ из 5 + 2n байт и снова t3,5:

T=(8+5+2n)⋅11R+2t3,5+tответа.T = \frac{(8 + 5 + 2n) \cdot 11}{R} + 2 t_{3,5} + t_\text{ответа}.
Скорость1 регистр10 регистров125 регистров
9600 бит/с25,2 мс45,8 мс309,4 мс
19 200 бит/с12,6 мс22,9 мс154,7 мс
115 200 бит/с4,93 мс6,65 мс28,6 мс

Таблица — без задержки ведомого. Реальные устройства отвечают через единицы и десятки миллисекунд, поэтому на высоких скоростях цикл почти целиком состоит из этой задержки: задайте её в поле «Задержка ответа ведомого». Формат кадра и CRC разбирает калькулятор Modbus RTU, протокол — статья о Modbus RTU.

USB Full Speed, передачи bulk

Скорость линии USB Full Speed — 12 Мбит/с, кадр — 1 мс, то есть 1500 байтовых интервалов. Транзакция bulk на Full Speed несёт пакет данных не больше 8, 16, 32 или 64 байт и по таблице 5-9 спецификации USB 2.0 стоит ещё 13 байт: 3 байта синхронизации, 3 байта PID, 2 байта адреса точки с CRC5, 2 байта CRC16 и межпакетная пауза длиной 3 байта. В кадр помещается столько транзакций, сколько влезает целиком:

Данных в транзакцииТранзакций в кадреПолезных байт в кадреПолезная скорость
8 байт71568568 кБ/с
16 байт51816816 кБ/с
32 байта3310561,056 МБ/с
64 байта1912161,216 МБ/с

Таблица спецификации не учитывает вставку битов: USB вставляет ноль после шести единиц подряд перед кодированием NRZI. В разделе 5.11.3 худший случай оценён как 7/6 времени данных; с ним в кадр помещаются только 17 транзакций по 64 байта — 1088 байт. Это оценки сверху для шины, на которой нет других устройств: пакеты SOF, повторы после NAK и паузы хост-контроллера в таблицу не входят. Про типы передач — в глоссарии, типы передач USB, про шину в целом — статья о USB.

Что калькулятор не учитывает

  • Время, которое программа тратит между сообщениями: задайте его полем «Пауза после сообщения».
  • Ошибки и повторы: кадры ошибок CAN, повторы Modbus по таймауту, NAK и повторные транзакции USB.
  • Арбитраж и чужой трафик на общей шине: у CAN и I²C сообщения других узлов, у USB — других устройств.
  • Растяжение такта I²C и время готовности ведомого: если датчик держит SCL, транзакция длится дольше.

Сравнивая интерфейсы, помните и про скорость линии: в UART она ограничена погрешностью тактирования — проверьте делитель калькулятором скорости UART, а скорость бод и бит/с совпадают только у двухуровневого кода.

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

Сколько байт в секунду передаёт UART на 115 200 бод?

В формате 8N1 на каждый байт уходит 10 битовых интервалов: старт-бит, 8 бит данных и стоп-бит. Значит, не больше 11 520 байт в секунду, или 80 % от 115 200. С чётностью или двумя стоп-битами символ длиннее на бит, и остаётся 10 473 байта в секунду. Это потолок для непрерывного потока; паузы между байтами, которые оставляет программа, снижают его дальше.

Сколько кадров CAN в секунду проходит на 500 кбит/с?

Стандартный кадр с 8 байтами данных без вставленных битов занимает 108 бит и ещё 3 бита межкадрового интервала — около 4505 кадров в секунду. В худшем случае к нему добавляются 24 вставленных бита, всего 135 бит, — 3704 кадра. Для расчёта загрузки шины и времени ответа берут худший случай: сколько битов вставит контроллер, зависит от идентификатора и данных.

Почему опрос Modbus RTU такой медленный?

Каждый цикл — это запрос из 8 байт, пауза 3,5 символа, ответ и ещё одна пауза, а символ RTU занимает 11 бит. Чтение 10 регистров на 9600 бит/с длится около 46 мс даже без задержки ведомого, и полезных данных в нём только 20 байт — 36 % времени линии. Читайте больше регистров за раз: 125 регистров за один запрос поднимают долю данных до 67 %.

Почему USB Full Speed не даёт 12 Мбит/с?

12 Мбит/с — скорость линии. Каждая транзакция bulk несёт до 64 байт данных и 13 байт служебных: синхронизацию, идентификаторы пакетов, CRC и межпакетную паузу. По таблице 5-9 спецификации в кадр 1 мс помещается 19 таких транзакций, 1216 байт данных, — 1,216 МБ/с без учёта вставленных битов. Реальные устройства получают меньше: хост делит кадр с другими устройствами и вставляет свои паузы.

Источники

  1. Robert Bosch GmbH. CAN Specification Version 2.0, 1991 — часть B: разд. 3.2.1 — поля кадра данных стандартного и расширенного формата, 3.2.5 — межкадровый интервал (intermission, 3 бита), 6 — вставка битов от SOF до конца последовательности CRC
  2. R. I. Davis, A. Burns, R. J. Bril, J. J. Lukkien. Controller Area Network (CAN) schedulability analysis: Refuted, revisited and revised. Real-Time Systems, vol. 35, 2007 — разд. 2.1.3, формула (1): наибольшая длина кадра с вставленными битами и межкадровым интервалом — 135 бит у стандартного кадра с 8 байтами и 160 у расширенного (эталон тестов)
  3. NXP Semiconductors. UM10204: I2C-bus specification and user manual, Rev. 7.0, 1 October 2021 — разд. 3.1.5 — байт из 8 бит и бит подтверждения; 3.1.10 и рис. 11–13 — запись, чтение, комбинированный формат с повторным START; табл. 11 — минимальные tHD;STA, tSU;STA, tSU;STO и tBUF для Standard-mode, Fast-mode и Fast-mode Plus
  4. Modbus Organization. MODBUS over Serial Line Specification and Implementation Guide V1.02, 2006 — разд. 2.5.1 — символ RTU из 11 бит (без чётности — два стоп-бита), кадр до 256 байт; 2.5.1.1 — тишина 3,5 символа между кадрами, выше 19 200 бит/с рекомендованы фиксированные 750 мкс и 1,750 мс
  5. Modicon. Modbus Protocol Reference Guide PI-MBUS-300 Rev. J, 1996 — рис. 14 и 15: запрос функции 03 — адрес, функция, начальный адрес, количество, контрольная сумма; ответ — адрес, функция, счётчик байт, по два байта на регистр, контрольная сумма
  6. USB-IF. Universal Serial Bus Specification, Revision 2.0 (пакет usb_20_20250603) — разд. 5.8.3 — пакеты bulk на Full Speed 8, 16, 32 или 64 байта; 5.8.4 и табл. 5-9 — 13 байт накладных на транзакцию, 19 транзакций по 64 байта и 1216 полезных байт в кадре, бит-стаффинг не учтён; 5.11.3 — худший случай бит-стаффинга 7/6 времени данных; 7.1.9 — ноль после шести единиц подряд

Где пригодится

Встроить калькулятор на свой сайт

Скопируйте код и вставьте его в HTML страницы, статьи или вики. Виджет бесплатный, без рекламы, счётчиков и cookie. Условие одно — ссылка на GAW под рамкой остаётся на месте. Подробнее о виджетах

<iframe src="https://gaw.ru/embed/bitrate-throughput/" title="Полезная скорость последовательных интерфейсов" 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/bitrate-throughput/">Полезная скорость последовательных интерфейсов</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>

Обновлено .

Нашли ошибку в расчёте?