UART (универсальный асинхронный приемник/передатчик) — это широко используемый протокол последовательной связи, который широко используется для связи между микроконтроллерами или различными встроенными устройствами. В этой статье будут подробно представлены основные принципы, режимы работы, расчет скорости передачи данных и распространенные методы использования связи UART, чтобы помочь людям с определенными возможностями разработки микроконтроллеров лучше понять и применять связь UART.
краткий справочник:
Стоповые биты и четность в асинхронной связи UART
Приемопередатчик опроса UART и приемопередатчик прерываний
Приложения UART в микроконтроллерах и встроенных системах
UART (универсальный асинхронный приемник/передатчик) — это протокол последовательной связи и аппаратный интерфейс, используемый для последовательной передачи данных между компьютерами и внешними устройствами. Связь UART — это асинхронный протокол связи, что означает, что биты данных передаются через определенный интервал времени без необходимости поддерживать общий тактовый сигнал между отправкой и получением.
Связь UART — это метод асинхронной последовательной связи. Его основной принцип заключается в передаче битов двоичных данных по линиям данных. Система связи UART в основном состоит из двух частей: передающей и принимающей сторон, и данные передаются между ними через линии передачи данных. Передающая сторона преобразует данные, подлежащие отправке, в параллельные сигналы, затем преобразует параллельные сигналы в последовательные сигналы через схему управления и отправляет последовательные сигналы в линию данных через схему отправки. Приемная сторона восстанавливает сигнал на линии данных до параллельного сигнала через схему приема, а затем преобразует параллельный сигнал в исходный бит данных через схему декодирования.
Для связи UART используется асинхронный метод связи, то есть передача данных осуществляется по линиям данных между отправляющей и принимающей сторонами. При асинхронной связи отправителю и получателю не обязательно быть активными одновременно: вместо этого стартовый и стоповый биты используются для идентификации начала и конца кадра данных. В частности, когда отправляющая сторона генерирует стартовый бит, она отправляет один бит данных; затем она ожидает начальный бит принимающей стороны. Если стартовый бит получен, она продолжает отправлять следующий бит данных; если стартовый бит не получен, то считается, что передача кадра данных не удалась. Аналогично, когда принимающая сторона генерирует стоповый бит, она отправляет проверочный бит; затем она ожидает стоповый бит от передающей стороны. Если стоповый бит получен, передача кадра данных считается успешной.
Передающая сторона отправляет биты данных в линию TX в соответствии с согласованным форматом.
Принимающая сторона получает данные через линию RX и анализирует их в соответствии со стартовым битом, битом данных, проверочным битом и стоповым битом.
Процесс передачи данных реализуется посредством аппаратной логики и обычно не требует активного вмешательства.
Скорость передачи данных представляет собой количество бит двоичных данных, передаваемых по линии в единицу времени, обычно выражается в бит/с (бит в секунду). Например, если скорость передачи данных составляет 9600 бит/с, в секунду можно передать 9600 бит данных.
Скорость передачи данных последовательного порта генерируется системой часов микроконтроллера, поэтому она имеет математическую связь с системными часами микроконтроллера.
Скорость передачи данных = (16 * тактовая частота) / (32 * время выборки) + (1 * тактовая частота) / (32 * время выборки) - (1 * тактовая частота) / (64 * время выборки)
Среди них время выборки относится к интервалу времени от последнего стартового бита до текущего начального бита. Например, если время выборки составляет 10 нс, скорость передачи данных составит 9600 бит/с.
Обычные скорости передачи данных: 2400, 4800, 9600, 19200, 38400, 57600, 115200... Все они являются целыми числами, кратными 2400, поэтому с помощью делителей частоты можно генерировать разные скорости передачи данных. Хотя современные микроконтроллеры имеют разные частоты, наиболее распространенными являются 32 МГц, 48 МГц и 144 МГц. Обычно они имеют внешнюю системную тактовую частоту, которая обеспечивает базовую тактовую частоту (например, 1 МГц) для периферийных устройств микроконтроллера. Также генерируется скорость передачи данных UART. от этих часов Генерировать тактовый сигнал.
Следует отметить, что при реальном использовании на тактовую частоту могут влиять некоторые факторы, такие как дрейф кварцевого генератора, шум источника питания и т. д. Поэтому, чтобы обеспечить точность и надежность передачи данных, рекомендуется использовать внешний кварцевый генератор или тактовый генератор, а также калибровать и компенсировать его при проектировании системы связи UART.
При асинхронной связи UART стоповый бит используется для обозначения конца кадра данных. Стоповый бит может состоять из 1 или 2 битов. Если стоповый бит равен 1 биту, после каждого байта данных добавляется дополнительный временной интервал для компенсации ошибок, вызванных дрожанием тактового сигнала и другими факторами. Например, если скорость передачи данных составляет 9600 бит/с, временной интервал между каждым байтом составляет 4 мс, поэтому временной интервал между каждым стоповым битом составляет 4 мс/8 = 0,5 мс.
Когда стоповый бит равен 2 битам, после каждого байта данных добавляются два дополнительных временных интервала, то есть временной интервал для каждого байта составляет 4 мс/(8 + 4) = 0,3125 мс. Этот режим подходит для сценариев передачи данных, требующих более высокой точности.
Проверка четности — это широко используемый метод обнаружения ошибок и потерь во время передачи данных. При связи UART точность и надежность передачи данных можно повысить, установив бит четности.
Следует отметить, что бит четности может только обнаруживать ошибки и потери при передаче данных, но не может гарантировать целостность и правильность данных. Поэтому при использовании UART-связи необходимо принимать другие меры, обеспечивающие корректность и надежность передачи данных.
Приемопередатчик опроса UART и приемопередатчик прерываний
Как мы упоминали ранее, связь UART заключается в разделении байта данных на несколько битов и последующей отправке их один за другим. Когда байт данных отправляется в передатчик UART, байт преобразуется в биты. После того, как UART отправляет этот байт, генерируется стоповый бит. В это время передатчик UART простаивает и может продолжать отправлять следующий байт. . Обычно передатчик UART генерирует состояние ожидания после отправки байта. Передача с опросом заключается в ожидании этого состояния ожидания и отправке следующего байта.
То же самое относится и к приему UART. Когда приемник UART завершает прием байта и получает сигнал стопового бита, он сохраняет только что полученные данные в регистр данных UART микроконтроллера и генерирует бит флага приема. Опрос бита флага будет Этот байт данных может быть получен.
Однако в однокристальных микрокомпьютерных системах часто используются не только приемопередатчики UART, и необходимо использовать приемопередатчики прерываний. Обычно UART-приемопередатчик микроконтроллера имеет прерывание приема RX и прерывание завершения передачи. При прерывании передачи передатчик UART находится в состоянии ожидания.В это время в передатчик записывается первый байт.После передачи байта генерируется прерывание завершения передачи.Последующие байты заполняются в сервисной функции передатчика. прерывание завершения.И генерировать следующее прерывание, и наконец, пока не будут переданы все байты, которые необходимо передать. При прерывании приема приемник UART генерирует прерывание приема RX после получения байта. Полученный байт считывается в сервисной функции прерывания приема RX. Полученный байт считывается во время каждого прерывания.
Во многих микроконтроллерных системах предусмотрены такие интерфейсные функции, как чтение UART и запись UART. Некоторые продвинутые микроконтроллеры даже имеют функции обратного вызова, такие как обратный вызов чтения UART и обратный вызов записи UART для отправки и получения данных. Обычно возможности обработки данных многих микроконтроллеров намного быстрее, чем связь UART, поэтому системы микроконтроллеров, которые используют вышеуказанные функции интерфейса, используют кеш данных для поддержки приемопередатчика UART. Общие методы отправки и получения UART включают следующее:
1、Очередь данных (Очередь) отправка и получение
Этот метод подходит для большинства микроконтроллеров, при условии наличия прерываний. При использовании записи UART для отправки данных данные не записываются непосредственно в передатчик UART, а помещаются в кольцевой буфер. Затем прочитайте кольцевой буфер в функции обслуживания прерывания завершения передачи UART TX и отправьте прочитанный байт в передатчик UART, а затем дождитесь повторного выполнения функции обслуживания прерывания завершения передачи TX, чтобы отправить следующий байт до тех пор, пока кольцевой буфер не данные в области отправляются. Кольцевой буфер обычно имеет переменную, которая отмечает заголовок и хвост.Пока значения переменных головы и хвоста не равны, это означает, что в буфере есть данные. При использовании UART Read для приема данных данные получаются не напрямую от приемника UART, а из кольцевого буфера. В функции обслуживания прерываний UART RX байты, полученные приемником UART, отправляются в кольцевой буфер. Данные, полученные, когда микроконтроллер выполняет UART Read, являются данными в кольцевом буфере. Это гарантирует, что программе микроконтроллера не придется ждать для UART-приемника. .
Преимущество этой конструкции заключается в том, что она позволяет эффективно обрабатывать данные в реальном времени и избегать потери данных. Однако если размер очереди установлен неправильно, может произойти переполнение данных. Поэтому нам необходимо разумно установить размер очереди в соответствии с реальным сценарием приложения.
2、UART-трансивер с аппаратным FIFO
Многие современные микроконтроллеры используют аппаратный FIFO для приемопередатчика UART. Микроконтроллер без аппаратного FIFO будет выполнять функцию прерывания каждый раз, когда он отправляет и получает данные.При обмене данными на высокой скорости передачи данных микроконтроллер будет часто вводить прерывания, тем самым влияя на обработку основной задачи микроконтроллера. Аппаратный FIFO может смягчить это противоречие. Например, UART FIFO однокристального микрокомпьютера составляет 16 байт. При отправке данных однокристальный компьютер может передавать до 16 байт данных за раз. Прерывание завершения передачи UART TX не будет сгенерировано до 16 -байтовые данные отправляются. При приеме данных обычно возникают «наполовину заполненные» прерывания и прерывания «по таймауту», то есть количество байт в приемном FIFO превышает 8 байт, или приемный FIFO не пуст, но новые байты не поступают более чем на 1 байт данных, генерирующих прерывание приема UART RX. Обычно UART с аппаратным FIFO используется в сочетании с очередью данных, и эффективность передачи выше при высокой скорости передачи данных.
3、UART-трансивер с DMA
DMA (Direct Memory Access) — это технология, которая позволяет напрямую сопоставить определенную область хранения компьютера с адресным пространством памяти, тем самым обеспечивая унифицированный доступ к памяти и другим периферийным устройствам. Когда UART получает данные, они записываются непосредственно в область памяти, управляемую DMA, а затем вызывают прерывание. В процедуре обслуживания прерываний мы можем извлечь данные из области памяти, управляемой DMA, выполнить необходимую обработку и затем отправить их через UART.
Использование DMA для передачи UART особенно полезно для передачи нескольких последовательных фрагментов данных, таких как функции обратного вызова чтения UART и обратного вызова записи UART, упомянутые ранее. При непрерывной отправке нескольких потоков данных потоки данных могут быть помещены в несколько разных буферов микроконтроллера, а затем DMA напрямую указывает на адрес буфера.После завершения передачи DMA генерируется обратный вызов записи UART, а затем DMA указывает вниз в обратном вызове записи UART. Адрес буфера. При приеме данных вы также можете зарезервировать буфер приема. Данные, передаваемые по DMA, передаются в буфер. Когда передача заполнена, генерируется обратный вызов чтения UART и указывает на следующий буфер приема. В то же время микроконтроллер Основная программа может обрабатывать буфер, в который поступило полное содержимое области данных.
Связь UART обычно используется в различных приложениях, таких как встроенные системы, датчики, беспроводные модули, консоли отладки и т. д.
Это простой и надежный метод связи, подходящий для связи на коротких расстояниях, в режиме «точка-точка» или «точка-многоточка».
RS232 — это общий стандарт физического уровня, используемый в последовательной связи и определяющий уровни напряжения, разъемы и распределение сигнала. UART часто используется с RS-232, но не обязательно.
Когда UART используется для связи RS-232, требуется адаптер или преобразователь для преобразования логических уровней в уровни RS-232.
Приложения UART в микроконтроллерах и встроенных системах
Микроконтроллеры часто включают в себя модули UART для связи с внешними устройствами.
UART можно использовать для подключения к компьютеру через последовательный порт для отладки и загрузки программ.
Его также можно использовать для связи с внешними устройствами, такими как датчики, ЖК-дисплеи, модули GPS и т. д.
В этой статье подробно представлены основные принципы связи UART, расчет скорости передачи данных, режим работы, области применения и общие методы использования, помогая людям с определенными возможностями разработки микроконтроллеров лучше понимать и применять связь UART. Освоение технологии связи UART может значительно упростить разработку и применение систем управления на основе микроконтроллеров.