Скорость передачи данных через UART

UART — это приемопередатчик на котором базируется RS-232 и другие подобные интерфейсы.

Скорость работы UART не означает скорость передачи данных, так как вместе с полезными данными UART передает служебные:

  • стартовый бит,
  • стоповый бит,
  • бит четности.

Скорость работы UART измеряется в бодах, а скорость передачи полезных данных — в битах и байтах в секунду.

Скорость передачи данных в битах в секунду:

V_{bit} = \frac{d}{d+1+s+p}V_{UART}

где:

  • VUART — скорость UART (например: 9600, 115200), бод;
  • d — количество бит данных;
  • s — количество стоповых бит;
  • p — количество бит четности, p = 1 если бит четности присутствует, или p = 0 если бит четности отсутствует;
  • единица в знаменателе отражает наличие стартового бита.

Та же формула для расчетов:

V_bit = V_uart * d / (d + 1 + s + p)

С учетом, что один байт содержит 8 бит, из предыдущей формулы можно получить скорость передачи полезных данных в байтах в секунду:

V_{byte} = \frac{V_{bit}}{8} = \frac{d}{(d+1+s+p)8}V_{UART}

Для расчетов:

V_byte = V_uart * d / (d + 1 + s + p) / 8

Для работы UART чаще всего используется режим 8-N-1 при котором d = 8, p = 0, s = 1. Для этого режима скорость передачи полезных данных равна:

V_{bit}=\frac{8}{8+1+1+0}V_{UART}=\frac{4}{5}V_{UART}=0.8 V_{UART}

Отсюда следует, что КПД для такого режима составляет 80 %.

В таблице ниже приводится КПД для разных режимов работы UART:

d, бит p, бит s, бит КПД, %
5 0 1 71
5 0 1,5 67
5 0 2 62
5 1 1 62
5 1 1,5 59
5 1 2 56
6 0 1 75
6 0 1,5 71
6 0 2 67
6 1 1 67
6 1 1,5 63
6 1 2 60
7 0 1 78
7 0 1,5 74
7 0 2 70
7 1 1 70
7 1 1,5 67
7 1 2 64
8 0 1 80
8 0 1,5 76
8 0 2 73
8 1 1 73
8 1 1,5 70
8 1 2 67
9 0 1 82
9 0 1,5 78
9 0 2 75
9 1 1 75
9 1 1,5 72
9 1 2 69

Не часто поддерживаемый режим 9-N-1 дает наилучший результат (82 %), но отличающийся от 8-N-1 лишь на 2 %.

Существует ряд стандартных скоростей: 300, 600, 1 200, 2 400, 4 800, 9 600, 19 200, 38 400, 57 600, 115 200, 230 400, 460 800 и 921 600 бод.

Максимальная скорость классического последовательного порта (COM-порта) компьютера равна 115 200 бодам.

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

t=\frac{D}{V_{byte}}=\frac{8\cdot D\cdot(d+1+s+p)}{d\cdot V_{UART}}

Для расчетов:

t = 8 * D * (d + 1 + s + p) / (d * V_uart)

Например, время передачи 1 МБ (1 048 576 байт) со скоростью 9 600 бод в режиме 8-N-1 составляет 18 минут и 12 секунд, а при скорости 115 200 бод — 1 минуту 31 секунду.

Сравнительная таблица скоростей передачи данных для стандартных скоростей UART:

Скорость UART, бод Скорость передачи данных, байт/с Время передачи 1 МБ, час:мин:сек
Данные: 8 бит
Стоп: 1 бит
Четность: нет
Данные: 8 бит
Стоп: 1 бит
Четность: да
Данные: 8 бит
Стоп: 1 бит
Четность: нет
Данные: 8 бит
Стоп: 1 бит
Четность: да
300 30 27,3 09:42:33 10:40:48
600 60 54,5 04:51:16 05:20:24
1 200 120 109,1 02:25:38 02:40:12
2 400 240 218,2 01:12:49 01:20:06
4 800 480 436,4 00:36:25 00:40:03
9 600 960 872,7 00:18:12 00:20:01
19 200 1 920 1 745,5 00:09:06 00:10:01
38 400 3 840 3 490,9 00:04:33 00:05:00
57 600 5 760 5 236,4 00:03:02 00:03:20
115 200 11 520 10 472,7 00:01:31 00:01:40

В настоящий момент COM-порт компьютера вытеснен USB. Тем не менее UART широко используется в различных приборах. Для связи их с компьютером существуют преобразователи USB-UART. И любой микроконтроллер имеет один или более UARTов. В таблице ниже приводится информация о максимальных скоростях работы различных микросхем.

Микросхема Назначение микросхемы Максимальная скорость UART, Мбод Максимальная скорость передачи данных в режиме 8-N-1, Байт/с
CP2101 Преобразователь USB-UART 0,9216 92 160
CP2102/3/9/10 Преобразователь USB-UART 1 100 000
CP2104/5/8 Преобразователь USB-UART 2 200 000
FT232R Преобразователь USB-UART 3 300 000
FT232H Преобразователь USB-UART 12 1 200 000
STM32F7 Микроконтроллер 27 2 700 000
STM32F4 Микроконтроллер 11,25 1 250 000

Небольшие скорости обусловлены тем, что UART тактируется с частотой во много раз превышающей скорость его работы. Чем больше тактов на один бит данных, тем надежнее связь. Чаще всего на 1 бит приходится 16 тактов. Кроме этого встречаются микросхемы поддерживающие 4, 8 и 10 тактов на бит.

Автором был разработан переходник USB — UART с 16 портами UART, которые могут работать на скорости 12 Мбод.

Мнемонические приемы в электронике

  • Для диодоподобных элементов:
    • Если взглянуть на обозначение диода, то катод диода похож на букву К, а анод — на букву А.
    • Правило К (катода). У светодиода Короткая нога — это Катод. Катодный или Короткий вывод диода/светодиода следует вставлять в отверстие с Квадратной площадкой.
    • В слове «анод» и в слове «плюс» по 4 буквы, а в «катод» и «минус» — по 5.
    • В обозначении диода стрелка направлена Ат Анода К Катоду.
  • Формула, связывающая заряд, емкость и напряжение конденсатора: КУ=ЦУ (Q=CU).
  • Пересчет дюймов в сантиметры: умножить на два и прибавить половину (2 * in + in / 2). Ключевым моментом является двойка, на которую надо умножить и разделить дюймы.
  • Известно, что рыбы всегда плывут против течения. То же и с электронами — они «плывут» против течения (тока).
  • У полярного выводного конденсатора положительная нога длиннее, потому что на нее уходит больше материала, как и на изображение символа «+».
  • Правило буравчика: если направление поступательного движения буравчика совпадает с направлением тока в проводнике, то направление вращения ручки буравчика совпадает с направлением линий магнитного поля тока.
  • Про npn- и pnp-транзисторы: http://ru-radio-electr.livejournal.com/11552.html

Перевод дюймов в сантиметры в уме

Чтобы перевести дюймы в сантиметры, необходимо дюймы умножить на два и прибавить половину:

2\cdot in+\frac{in}{2}

Такой способ гарантирует точность результата в 1,6 %.

Например, переведем 32 дюйма в сантиметры:

32in=2\cdot 32+\frac{32}{2}=64+16=80cm

В действительности же 32 дюйма равно 81,28 см.

Зачастую требуется перевести милидюймы (mils) в миллиметры. Для этого годится то же правило, только результат надо дополнительно разделить на 100, то есть сдвинуть запятую, разделяющую дробную и целую часть, на два разряда влево.

Например, переведем 10 милидюймов в миллиметры:

10mils=\frac{2\cdot 10+\frac{10}{2}}{100}=\frac{25}{100}=0.25mm

Результат получается с той же точностью — 1,6 %.