Режим UART

В режиме UART последовательный порт обладает стандартной функциональностью UART. Можно выбрать скорость (бод), чётность, число бит в символе, а также полнодуплексную или полудуплексную работу (см. Настройки последовательного порта). UART работает с сигналами полярности «TTL-serial»: когда передачи данных нет, линии RX и TX находятся на логическом HIGH, стартовый бит - LOW, стоп-бит - HIGH (ниже показан случай с 8 битами в символе и включённой чётностью).

Схема, поясняющая состав слова данных в режиме UART.

Данные UART отправляются и принимаются по выходной линии TX и входной линии RX. В зависимости от настройки последовательного порта могут использоваться и две дополнительные линии - выход RTS и вход CTS (см. ниже).

Внимание

Помните, что в зависимости от платформы некоторые или все линии последовательного порта может понадобиться настроить как входы или выходы через свойство io.enabled объекта io.. Кроме того, при необходимости некоторые линии последовательного порта можно переназначить на другие выводы ввода-вывода устройства. Подробнее см. документацию по платформе вашего устройства (например, для EM1000 она находится здесь).

Как последовательный порт отправляет и принимает данные UART

Последовательный порт может отправлять и принимать данные без контроля чётности, а также с чётностью even, odd, mark или space. Кроме того, можно указать число бит в каждом символе (7 или 8). Расчёт чётности порт выполняет автоматически. Если бит чётности включён, порт автоматически вычисляет его значение для каждого передаваемого символа. При приёме порт правильно обрабатывает входящие символы в соответствии с заданным числом бит и режимом чётности.

Внимание

Фактическая проверка чётности не выполняется: порт принимает бит чётности, но не проверяет его правильность. Параметр чётности сохранён в основном для совместимости со старыми устройствами, поэтому порт передаёт этот бит корректно.

Как данные UART хранятся в буферах RX и TX последовательного порта

В режиме UART каждый байт данных в буфере передачи (TX) или приёма (RX) последовательного порта соответствует одному символу. Если порт настроен на отправку и приём 7-битных символов, старший бит каждого байта в буфере приёма (RX) будет равен 0, а старший бит каждого байта в буфере передачи (TX) игнорируется. Биты чётности в буферах не хранятся. В исходящем потоке данных порт вычисляет бит чётности и добавляет его автоматически. Из входящих последовательных данных порт бит чётности отбрасывает, поэтому в буфер приёма (RX) попадают только «чистые» данные.

Полнодуплексная работа

Полнодуплексный режим подходит для связи с устройствами RS232, RS422, четырёхпроводными устройствами RS485 и большинством устройств TTL-serial. Для RS232, RS422 или RS485, разумеется, нужна внешняя микросхема-приёмопередатчик. Устройства TTL-serial в большинстве случаев можно подключать к линиям последовательного порта напрямую.

В полнодуплексном режиме выход RTS и вход CTS можно использовать для необязательного управления потоком. На выходе RTS держится LOW, пока последовательный порт готов принимать данные от «подключённого» последовательного устройства (порт открыт, а в буфере приёма (RX) осталось не менее 64 байт свободного места). Когда порт закрыт или в буфере приёма (RX) осталось меньше 64 байт свободного места, на линии RTS устанавливается HIGH. Работа RTS показана на рисунке ниже.

Примечание

На всех диаграммах показаны сигналы TTL-serial. Если вы имеете дело с линиями порта RS232, все сигналы будут инвертированы!

Схема, поясняющая работу RTS на последовательном порту.

Вход CTS нужен последовательному порту, чтобы проверять, готово ли подключённое последовательное устройство принимать данные. Порт начинает отправку данных, только когда на входе CTS установлен LOW, и прекращает отправку, как только на линии появляется HIGH. Учтите, что в некоторых устройствах Tibbo есть аппаратный буфер «FIFO» («первым пришёл - первым ушёл»). Данные передачи (TX), попавшие в FIFO, будут отправлены, даже если на линии CTS появится LOW. Поэтому после того, как подключённое последовательное устройство переведёт линию CTS в LOW, порт может вывести ещё некоторое число байт, не превышающее ёмкость FIFO. Подробнее см. документацию по платформе вашего устройства (например, для EM1000 она находится здесь).

Схема, поясняющая работу CTS в последовательном порту.

Когда управление потоком включено, линиями RTS и CTS управляет последовательный порт, и приложение не может ими манипулировать. Когда управление потоком выключено, приложение может устанавливать и считывать состояние этих линий через объект io..

Полудуплексная работа

Полудуплексный режим подходит для связи с двухпроводными устройствами RS485. Здесь тоже к последовательному порту необходимо подключить подходящую микросхему-приёмопередатчик интерфейса.

В полудуплексном режиме выход RTS управляет направлением передачи данных. Можно выбрать полярность сигнала управления направлением (то есть какое состояние соответствует направлению «приём данных», а какое - «выдача данных», см. Настройки последовательного порта).

Когда у порта нет данных для передачи (буфер передачи (TX) пуст), он всегда готов принимать данные, поэтому линия RTS находится в состоянии «приём данных». Когда порту нужно отправить данные (буфер передачи (TX) не пуст), он переводит линию RTS в состояние «выдача данных», передаёт данные, а затем возвращает линию RTS в состояние «приём данных». Для полярности управления направлением «LOWFORINPUT» управление направлением выглядит так:

Схема, поясняющая управление направлением в полудуплексном режиме работы последовательного порта.

В полудуплексном режиме линией CTS последовательный порт не управляет. Ею может управлять приложение через объект io..

Исходный материал Tibbo обновлён 8 августа 2022Оригинал на docs.tibbo.com · Сообщить об ошибке