Какие факторы влияют на максимальную скорость UART. Как увеличить скорость передачи данных по UART. Какие микроконтроллеры поддерживают высокоскоростной UART. Какие альтернативы UART существуют для быстрой передачи данных.
Факторы, влияющие на скорость UART
Максимальная скорость передачи данных по UART зависит от нескольких ключевых факторов:
- Тактовая частота микроконтроллера
- Делитель частоты для генерации сигнала UART
- Физические ограничения линии передачи
- Возможности приемника на другом конце линии
- Использование аппаратного или программного UART
Рассмотрим каждый из этих факторов подробнее.
Тактовая частота микроконтроллера
Тактовая частота микроконтроллера является ключевым параметром, определяющим максимально возможную скорость UART. Как правило, скорость UART получается путем деления тактовой частоты на некоторый коэффициент. Например, при частоте МК 16 МГц и делителе 16 получаем максимальную скорость UART 1 Мбит/с.

Делитель частоты
Большинство микроконтроллеров используют делитель частоты для генерации сигнала UART из системной тактовой частоты. Типичные значения делителя — 16 или 8. Меньший делитель позволяет достичь более высоких скоростей, но может снизить точность и устойчивость передачи.
Физические ограничения линии
При высоких скоростях передачи начинают играть роль физические параметры линии — емкость, индуктивность, сопротивление. Это может вызывать искажения сигнала и ограничивать максимальную скорость. Для длинных линий максимальная скорость будет ниже.
Возможности приемника
Устройство на другом конце линии также должно поддерживать заданную скорость UART. Для связи с ПК через COM-порт стандартные скорости ограничены 115200 бит/с. Более высокие скорости могут не поддерживаться драйверами ОС.
Аппаратный vs программный UART
Аппаратная реализация UART позволяет достичь более высоких скоростей по сравнению с программной, так как не загружает процессор. При программной реализации максимальная скорость ограничена быстродействием МК.

Типичные максимальные скорости UART
Для большинства микроконтроллеров типичные максимальные скорости UART находятся в диапазоне:
- 115200 бит/с — стандартная максимальная скорость для связи с ПК
- 1-3 Мбит/с — для связи между микроконтроллерами на небольших расстояниях
- 5-10 Мбит/с — предел для высокоскоростных МК с аппаратным UART
Скорости выше 10 Мбит/с встречаются редко и требуют специальных технических решений.
Способы увеличения скорости UART
Существует несколько подходов для повышения скорости передачи данных по UART:
Использование DMA
Применение DMA (прямого доступа к памяти) позволяет разгрузить процессор от операций ввода-вывода и достичь более высоких скоростей передачи. DMA особенно эффективен при передаче больших объемов данных.
Оптимизация прерываний
Правильная настройка прерываний UART и их обработчиков может значительно повысить максимальную скорость передачи, особенно для программных реализаций UART.
Выбор оптимального делителя частоты
Подбор делителя частоты, обеспечивающего минимальную ошибку скорости передачи, позволяет достичь более высоких и стабильных скоростей UART.

Использование буферизации
Применение кольцевых буферов на передачу и прием помогает сгладить пиковые нагрузки и повысить среднюю скорость передачи данных.
Микроконтроллеры с высокоскоростным UART
Некоторые современные микроконтроллеры поддерживают скорости UART свыше 10 Мбит/с:
- STM32H7 — до 12.5 Мбит/с
- NXP i.MX RT — до 20 Мбит/с
- Microchip SAMA5D2 — до 15 Мбит/с
- Renesas RZ/A — до 20 Мбит/с
Такие высокие скорости достигаются за счет высокой тактовой частоты (200-600 МГц) и оптимизированных аппаратных модулей UART.
Альтернативы UART для высокоскоростной передачи
Для скоростей выше 10-20 Мбит/с UART становится неэффективным. В этом случае лучше использовать альтернативные интерфейсы:
SPI
Интерфейс SPI позволяет достичь скоростей 50-100 Мбит/с на коротких расстояниях. Преимущества — простота реализации, низкие задержки. Недостаток — необходимость дополнительных линий для тактирования и выбора устройства.
USB
USB обеспечивает скорость до 480 Мбит/с (USB 2.0) и выше. Широко поддерживается на ПК, но требует сложной программной реализации на стороне МК.

Ethernet
Ethernet позволяет достичь скоростей 100 Мбит/с и 1 Гбит/с. Требует внешнего физического уровня (PHY), но обеспечивает большую дальность передачи.
Заключение
UART остается популярным и простым в реализации интерфейсом для скоростей до нескольких мегабит в секунду. Для более высоких скоростей требуется переход на альтернативные интерфейсы. При выборе интерфейса следует учитывать не только требуемую скорость, но и другие факторы — сложность реализации, совместимость, дальность передачи.
Окончательно разбираемся со скоростью передачи по Modbus / Хабр
Скорость обновления данных по Modbus зависит от нескольких неочевидных параметров. На стадии проектирования возникает проблема, как оценить скорость будущей интерфейсной линии. В этой статье рассмотрим факторы, влияющие на скорость обновления данных по Modbus RTU, сделаем несколько типовых расчётов, а в конце статьи будет ссылка на web калькулятор скорости работы Modbus RTU линии.
Modbus всё ещё остаётся самым распространённым протоколом связи промышленного оборудования. Описание протокола и причины его распространённости можно найти во множестве статей, например тут. Далее подразумевается, что вы знакомы с основами работы протокола.
Мы будем рассматривать Modbus RTU, но полученные выводы будут частично применимы и к Modbus TCP.
Чтобы рассчитать скорость, начнём с рассмотрения физического протокола (1й уровень модели OSI). Modbus RTU использует физический интерфейс RS-485, RS-422 или RS-232(последний практически не используется для Modbus). Для передачи сигнала данные интерфейсы используют UART (Universal Asynchronous Receiver-Transmitter). Подробнее про UART можно прочитать тут.
Стандартная посылка UART состоит из:
- стартовый бит () 1 бит
- полезные данные () 7-8 бит
- бит чётности () 0-1 бит
- стоповый бит () 1-2 бит
То есть на каждые 7-8 бит полезных данных передается 2-4 вспомогательных бита. Скорость передачи полезных данных () будет ниже скорости работы интерфейса (). Вычислить можно по формуле:
Далее необходимо разобраться как Modbus мастер общается с подчинёнными устройствами на канальном уровне (2й уровень модели OSI). В силу особенности физического интерфейса устройства подключенные к линии передают данные последовательно, то есть только одно устройство в текущий момент времени может слать данные. Из-за этого общение мастера с подчинёнными устройствами происходит циклически, последовательно читая и записывая регистры в подчиненные устройства.
- задержка (минимум 3.5 символа = 28 бит, ниже пересчитаем в секунды)
- передача запроса на чтение (8 байт)
- задержка ответа ведомого устройства (минимум 28 бит, часто это десятки миллисекунд на формирование ответной посылки)
- передача ведомым устройством ответной посылки (максимум 256 байт для Modbus RTU).
Некоторые инженеры выбирают четырехпроводную версию интерфейса, надеясь на ускорение передачи (подразумевая параллельную пересылку данных на приём и передачу). Очевидно это решение не работает. Последовательность посылки данных будет одинаковой для 2х и 4х — проводных линий.
Рассчитаем время, затрачиваемое на полный цикл чтения 125ти holding registers (максимальное количество для Modbus RTU) при следующих параметрах линии:
Формат кадра: 8N1 (8 data bit, no parity bit, 1 stop bit)
Скорость uart: = 19200 bit/s
Скорость передачи полезных данных: = 15360 bit/s
Задержка мастера: = 28 bit / (это минимально допустимая задержка, обычно больше)
Задержка ответа ведомого устройства: = 0. 04 s (значение зависит от ведомого устройства)
Посылка с запросом 125ти holding registers: 8 byte или 64 bit
Ответ со 125ю holding registers: 256 byte или 2048 bit
Формула для расчёта времени цикла чтения:
Последовательность на запись регистров практически идентична. Размер посылки мастера будет больше, т.к. включает в себя информацию о записываемых регистрах. Подтверждение удачной записи от ведомого устройства будет 8 байт.
По спецификации Modbus к линии RS-485/422 можно подключить 32 ведомых устройства. Опрос ведомых устройств так же ведётся последовательно, обычно по кругу. Чтобы понять с какой скорость будут обновляться данные от ведомых устройств, надо умножить на Назовем это полным временем обновления .
Несколько расчётов (читаем и записываем максимальное количество holding registers) при различных параметрах связи:
Формат кадра: 8N1, = 19200 bit/s, Количество ведомых устройств, = 16
= 5.727 s
Формат кадра: 8N1, = 9600 bit/s, Количество ведомых устройств, = 16
= 10. 173 s
= 6.355 s
Формат кадра: 8N1, = 19200 bit/s, Количество ведомых устройств, = 2
= 0.716 s
Как видно формат кадра влияет на время обновления данных, но не сильно. Значительно влияет скорость передачи данных, но в нашем примере мы передаём максимальное количество регистров, в реальных проектах этот фактор может быть не столь значителен. Сильнее всего на скорость обновления данных влияет количество ведомых устройств.
Для упрощения расчётов мы сделали web приложение для оценочного расчета времени обновления данных по Modbus
4.2 Скорость приёма/передачи uart
Специализированный генератор скорости состоит из селектора опорной частоты и программируемого 5 — битного счетчика c переменным коэффициентом деления. Он генерирует частоту передачи/приема UART0.
Для конфигурирования скорости задающего генератора используются :
—
Опорная частота.
— Счётчик передачи. Этот счётчик останавливает операцию передачи и сбрасывается в ноль, если бит 7 (POWER0) или бит 6 (TXE0) регистра управления режимом асинхронного интерфейса ASIM0 принимают значение 0. Если оба этих бита установились в еденицу, то счётчик передачи снова запускается.
— Счётчик приёма. Этот счётчик останавливает операцию приёма и сбрасывается в ноль, если бит 7 (POWER0) или бит 5 (RXE0) регистра управления режимом асинхронного интерфейса ASIM0 принимают значение 0. Счётчик запускается, если обнаружен стартовый бит. Счётчик останавливает операцию приёма после одного принятого кадра, пока не будет обнаружен следующий стартовый бит.
Структурная
схема формирования частоты приёма/передачи
UART
представлена на рисунках 35а,б.
Рисунок 35а – Блок – схема формирования частоты приёма/передачи UART0.
Рисунок 35б – Блок – схема формирования частоты приёма/передачи UART6.
Итак, скорость приёма/передачи UART может быть вычислена по следующей формуле:
[bps] (1)
где : — опорная частота, задаваемая битами TPS01 и TPS00 регистра BRGC0
k – коэффициент деления, определяемый битами MDL04 — MDL00 регистра BRGC0.
Ошибка скорости приёма/передачи UART может быть вычислена по следующей формуле:
(2)
Пример: вычислим ошибку, для скорости 76.800 бод/сек.
Опорная частота = 2.5 МГц = 2500000 Гц.
Установим биты MDL04 — MDL00 регистра BRGC0 в значение 10000B (к=16).
Целевая скорость в бодах 76800 бод/сек.
Согласно
формуле (1): Baud rate = 2. 5 M/(2 *16)= 2500000/(2 *16) =
78125
бод/сек.
Следовательно ошибка составит Error = (78125/76800 — 1) * 100= 1.725 %
Примеры настройки портов UART на стандартные скорости приведены в таблице 13.
Таблица 13 – стандартные скорости приёма/передачи UART0.
Скорость | fX = 10.0 MHz | fX = 8.38 MHz | fX = 4.19 MHz | |||||||||
TPS01, TPS00 | к | Расчетное Значение | ERR[%] | TPS01, TPS00 | к | Расчетное Значение | ERR[%] | TPS01, TPS00 | к | Расчетное Значение | ERR[%] | |
2400 | — | — | — | — | — | — | — | — | 3 | 27 | 2425 | 1. |
4800 | — | — | — | — | 3 | 27 | 4850 | 1.03 | 3 | 14 | 4676 | -2.58 |
9600 | 3 | 16 | 9766 | 1.73 | 3 | 14 | 9353 | -2.58 | 2 | 27 | 9699 | 1. |
10400 | 3 | 15 | 10417 | 0.16 | 3 | 13 | 10072 | -3.15 | 2 | 25 | 10475 | 0.72 |
19200 | 3 | 8 | 19531 | 1.73 | 2 | 27 | 19398 | 1.03 | 2 | 14 | 18705 | -2. |
31250 | 2 | 20 | 31250 | 0 | 2 | 17 | 30809 | -1.41 | — | — | — | — |
38400 | 2 | 16 | 39063 | 1.73 | 2 | 14 | 38796 | -2.58 | 2 | 27 | 38796 | 1. |
76800 | 2 | 8 | 78125 | 1.73 | 1 | 27 | 77593 | 1.03 | 1 | 14 | 74821 | -2.58 |
115200 | 1 | 22 | 113636 | -1.36 | 1 | 18 | 116389 | 1.03 | 1 | 9 | 116389 | 1. |
153600 | 1 | 16 | 156250 | 1.73 | 1 | 14 | 149643 | -2.58 | — | — | — | — |
230400 | 1 | 11 | 227273 | -1.36 | 1 | 9 | 232778 | 1.03 | — | — | — | — |
Таблица
13(продолжение) – стандартные скорости
приёма/передачи UART0.
Скорость | fX = 10.0 MHz | fX = 8.38 MHz | fX = 4.19 MHz | |||||||||
TPS61, TPS60 | к | Расчетное Значение | ERR[%] | TPS61, TPS60 | к | Расчетное Значение | ERR[%] | TPS61, TPS60 | к | Расчетное Значение | ERR[%] | |
600 | 6 | 130 | 601 | 0. | 6 | 109 | 601 | 0.11 | 5 | 109 | 601 | 0.11 |
1200 | 5 | 130 | 1202 | 0.16 | 5 | 109 | 1201 | 0.11 | 4 | 109 | 1201 | 0.11 |
2400 | 4 | 130 | 2404 | 0. | 4 | 109 | 2403 | 0.11 | 3 | 109 | 2403 | 0.11 |
4800 | 3 | 130 | 4808 | 0.16 | 3 | 109 | 4805 | 0.11 | 2 | 109 | 4805 | 0.11 |
9600 | 2 | 130 | 9615 | 0. | 2 | 109 | 9610 | 0.11 | 1 | 109 | 9610 | 0.11 |
10400 | 2 | 120 | 10417 | 0.16 | 2 | 101 | 10371 | 0.28 | 1 | 101 | 10475 | -0.28 |
19200 | 1 | 130 | 19231 | 0. | 1 | 109 | 19200 | 0.11 | 0 | 109 | 19220 | 0.11 |
31250 | 1 | 80 | 31250 | 0 | 0 | 134 | 31268 | 0.06 | 0 | 67 | 31268 | 0.06 |
38400 | 0 | 130 | 38462 | 0. | 0 | 109 | 38440 | 0.11 | 0 | 55 | 38090 | -0.8 |
76800 | 0 | 65 | 76923 | 0.16 | 0 | 55 | 76182 | -0.8 | 0 | 27 | 77593 | 1.03 |
115200 | 0 | 43 | 116279 | 0. | 0 | 36 | 116388 | 1.03 | 0 | 18 | 116389 | 1.03 |
153600 | 0 | 33 | 151515 | -1.36 | 0 | 27 | 155185 | 1.03 | 0 | 14 | 149643 | -2.58 |
230400 | 0 | 22 | 227272 | -1. | 0 | 18 | 232777 | 1.03 | 0 | 9 | 232778 | 1.03 |
uart — скорость передачи данных в зависимости от скорости передачи данных
\$\начало группы\$
Когда мы инициализируем последовательную связь, мы обычно должны установить скорость передачи данных (например, 115200) Я заметил, что многие люди предполагают, что 115200 означает 115200 бит в секунду. Однако каждый бод (изменение сигнала) может кодировать более 1 бита. бод 115200 означает 115200 бит в секунду, только если каждый бод = 1 бит. Если каждый бод составляет 5 бит, то наличие 115200 бод означает скорость передачи 115200 * 5 бит в секунду.
Если то, что я сказал выше, верно, каково соотношение бод/бит для UART и USB3. 0, при условии, что скорость установлена на 115200?
Не может быть 1 к 1, потому что 115200 бит в секунду — это 14,0625 КБ/с (килобайт в секунду), что слишком медленно.
- UART
- скорость передачи
\$\конечная группа\$
5
\$\начало группы\$
Небольшой момент: по определению Бод (названный в честь Эмиля Бодо) — это единица символ в секунду. Итак, ваше заявление,
бод 115200 означает 115200 бит в секунду, только если каждый бод = 1 бит. Если каждый бод равен 5 битам, то наличие 115200 бод означает скорость передачи данных 115200 * 5 бит в секунду.
по духу правильный, но слово «бод» надо заменить на «символ». Если у вас есть алфавит из 32 символов, то каждый символ кодирует 5 бит, а скорость передачи сигналов 115200 символов в секунду, что составляет 115200 бод (по определению), даст вам 115200 * 5 = 576000 бит в секунду.
Часто используемая фраза «Скорость передачи данных» является грамматически неверной, по сути, так же, как неправильной является фраза «банкомат». В определение бода встроено понятие скорости, поэтому выражение «скорость в бодах» грамматически то же самое, что и выражение «скорость передачи символов» (что может иметь смысл, если вы говорите об изменении скорости передачи символов, но это не так). этим пользуется большинство людей). Точно так же слово «банкомат» уже включает в себя «машину», поэтому «банкомат» эквивалентен выражению «банкомат» (что, опять же, могло бы иметь смысл, если бы вы говорили о машине, производящей банкоматы, но это не так). обычно не то, что люди имеют в виду).
Грамматика в стороне, в большинстве низко- и среднескоростных сигналов ближнего действия по проводам используется двоичная сигнализация, поэтому скорость передачи символов равна скорости передачи битов. Передача сигналов на большие расстояния по проводам (например, кабельным модемам) и по радио, скорее всего, будет использовать многобитные символы, и, следовательно, скорость передачи будет выше, чем скорость передачи символов.
\$\конечная группа\$
4
\$\начало группы\$
Поскольку связь является цифровой, скорость передачи данных равна скорости передачи данных. Только когда связь модулируется в аналоговую, 1 бод может кодировать более 1 бита в соответствии с схема созвездия .
Для шин, передающих данные, которые быстрее скорости последовательного соединения, передача выполняется пакетами. USB 3.0 может отправлять до 1024 байт данных за одну массовую передачу, что означает, что полный пакет будет отправляться в среднем каждые 1,6384 мкс при скорости шины 5 Гбит/с.
\$\конечная группа\$
8
\$\начало группы\$
Вы сравниваете скорости на разных уровнях абстрактной модели. В вашем примере USB3.0 просто используется как туннель для отправки «115200 бит/с UART». Неважно, как это делает USB3.0, напряжения могут отличаться, кадры могут отличаться, скорость может отличаться. (Они все будут BTW).
\$\конечная группа\$
\$\начало группы\$
Битрейт и скорость передачи одинаковы для UART, как говорили другие. Это не то же самое для всех методов передачи сигналов в основной полосе частот (другие называют их цифровыми, что не обязательно правильно). Возьмем, к примеру, линейный код Манчестера, где бит кодируется как нарастающий или спадающий фронт.
Однако способ, которым вы вычислили битрейт, неверен. UART использует синхронизацию слов, то есть отправляет сразу целые байты, инкапсулированные в кадры длиной не менее 9 бит. Стартовый бит добавляется для фазовой синхронизации часов между приемником и передатчиком.
По этой же причине нет смысла ссылаться на битрейт в случае UART — это либо битрейт, либо бод.
\$\конечная группа\$
14
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie
.
— факторы ограничения скорости UART?
Задавать вопрос
спросил
Изменено 5 лет, 5 месяцев назад
Просмотрено 4к раз
\$\начало группы\$
Я хочу спросить об использовании UART для отправки данных с uC на ПК. Итак, у меня есть несколько вопросов.
Интересно, какой максимальный битрейт UART?
Какие факторы влияют на скорость UART? Например, влияет ли использование DMA на скорость передачи данных?
Какие микроконтроллеры имеют скорость передачи данных UART более 30 Мбит/с? Если много, то как?
- микроконтроллер
- последовательный
- UART
- битрейт
- периферия
\$\конечная группа\$
4
\$\начало группы\$
В вашей настройке есть несколько ограничений на скорость передачи данных UART:
- Скорость переключения сигналов.
Выходы UART — это обычные цифровые сигналы. Они могут работать довольно быстро на одной и той же доске, но не подходят для высокоскоростных внебортовых систем в своей исходной форме.
- Микросхемы преобразователя RS-232. Микроконтроллер выдает обычные цифровые сигналы, в то время как COM-порт ПК требует уровней сигнала RS-232. Обычные микросхемы преобразователя обычно имеют верхний предел скорости в диапазоне 250 кбод. Это не означает, что вы не можете сделать свою собственную схему, которая работает быстрее, но вы не сможете просто использовать готовую микросхему.
- Цепочка скоростей передачи на микро. Большинство микропроцессоров позволяют разделить их внутренние часы на некоторое целое число, и в результате скорость передачи данных будет в 16 раз выше. Например, если бы у вас был микропроцессор, работающий на частоте 30 МГц, то самая высокая скорость передачи данных, вероятно, составила бы 1,875 Мбод.
Некоторые микропроцессоры имеют «высокоскоростной» режим, в котором используется меньшее число, кратное 16.
Это дает вам более высокую скорость за счет надежности. Это в лучшем случае необычно, и часто в любом случае не очень хорошая идея.
- Доступные скорости передачи в ПК . Это, пожалуй, самый ограничивающий критерий. ПК может выполнять только те скорости передачи данных, которые доступны для пользовательского кода, в зависимости от того, что может делать аппаратное обеспечение UART в ПК, и политик, закодированных в драйвере.
Суть в том, что UART и COM-порты ПК просто не предназначены для скоростей, которые вы хотите, даже близко. Если вы пытаетесь превысить 115,2 кбод, вы где-то напрашиваетесь на неприятности.
Найдите лучший способ передачи данных с микроконтроллера на ПК.
Тем не менее, подумайте о том, что это означает на микроуровне. Вы хотите отправлять или получать новый байт каждые 33 нс. Многие микроконтроллеры за это время не могут выполнить ни одной инструкции. Даже на высокопроизводительных микропроцессорах это в лучшем случае всего несколько инструкций.