Универсальный асинхронный приемопередатчик (UART)

RS-485 для чайников

(c) 2003 Евгений Александрович Бень

Содержание

  • Вступление
  • 1. Универсальный асинхронный приемопередатчик (UART)
  • 2. Интерфейс RS-485
  • 3. Согласование и конфигурация линии связи
  • 4. Защитное смещение
  • 5. Исключение приема при передаче в полудуплексном режиме
  • 6. "Горячее" подключение к линии связи
  • 7. Рекомендации по организации протокола связи
  • 8. Программные методы борьбы со сбоями
  • 9. Защита устройств от перенапряжений в линии связи
  • 10. Дополнительные меры защиты от помех
  • Заключение
  • Полезные ссылки

Вступление

Как следует из названия, статья эта - попытка объяснить начинающим что к чему и помочь обойти грабли, на которые уже кто-то наступал. Если кто-нибудь, потратив 15 минут на прочтение, сэкономит пару дней на отладке системы, я буду считать свою задачу выполненной.

Столкнувшись с необходимостью организовать связь между несколькими устройствами на базе микроконтроллеров, я стал собирать информацию по этой теме. Из конструктивных соображений определился с методом связи - последовательный канал и линия связи на основе интерфейса RS-485. Затем последовал отсев излишних теоретических рассуждений и отбор практических рекомендаций по наладке линии связи. Особое внимание я уделял описанию различных "подводных камней". На бумаге, как известно, всегда все работает, а вот на практике вскрываются неприятные особенности, притом нигде не описанные. Так и оказалось - сделали все по инструкции, а потом не одну неделю отлавливали глюки.

В этой статье я попытался собрать начальную информацию об устройствах, полезные добытые сведения (с ссылками) и собственный опыт.

Универсальный асинхронный приемопередатчик (UART)

Возможно, связь через асинхронный последовательный порт уходит в прошлое, однако сложно найти контроллер, не имеющего в составе своей периферии UART. Поэтому хоронить его, думаю, рановато. Раз так, то будет нелишним сказать пару слов о том, как оно работает. Описание конкретной реализации последовательного порта есть в datasheet на каждый контроллер, поэтому опишу общее для всех.

UART можно разделить на приемник (Receiver) и передатчик (Transmitter). В состав UART входят: тактовый генератор связи (бодрейт-генератор), управляющие регистры, статусные регистры, буферы и сдвиговые регистры приемника и передатчика. Бодрейт-генератор задает тактовую частоту приемопередатчика для данной скорости связи. Управляющие регистры задают режим работы последовательного порта и его прерываний. В статусном регистре устанавливаются флаги по различным событиям. В буфер приемника попадает принятый символ, в буфер передатчика помещают передаваемый. Сдвиговый регистр передатчика - это обойма, из которой в последовательный порт выстреливаются биты передаваемого символа (кадра). Сдвиговый регистр приемника по биту накапливает принимаемые из порта биты. По различным событиям устанавливаются флаги и генерируются прерывания (завершение приема/отправки кадра, освобождение буфера, различные ошибки).

UART - полнодуплексный интерфейс, то есть приемник и передатчик могут работать одновременно, независимо друг от друга. За каждым из них закреплен порт - одна ножка контроллера. Порт приемника обозначают RX, передатчика - TX. Последовательной установкой уровней на этих портах относительно общего провода ("земли") и передается информация. По умолчанию передатчик устанавливает на линии единичный уровень. Передача начинается посылкой бита с нулевым уровнем (старт-бита), затем идут биты данных младшим битом вперед (низкий уровень - "0", высокий уровень - "1"), завершается посылка передачей одного или двух битов с единичным уровнем (стоп-битов).

Электрический сигнал кадра посылки выглядит так:

Универсальный асинхронный приемопередатчик (UART) - student2.ru

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

Скорость связи или бодрейт (baudrate) измеряется в бодах - число передаваемых бит в секунду (включая старт и стоп-биты). Задается эта скорость в бодрейт-генераторе делением системной частоты на задаваемый коэффициент. Типичный диапазон скоростей: 2400 … 115200 бод.

Формат кадра определяет число стоп-битов (1 или 2), число бит данных (8 или 9), а также назначение девятого бита данных. Все это зависит от типа контроллера.

Приемник и передатчик тактируются, как правило, с 16-кратной частотой относительно бодрейта. Это нужно для сэмплирования сигнала. Приемник, поймав падающий фронт старт-бита, отсчитывает несколько тактов и следующие три такта считывает (семплирует) порт RX. Это как раз середина старт-бита. Если большинство значений семплов - "0", старт-бит считается состоявшимся, иначе приемник принимает его за шум и ждет следующего падающего фронта. После удачного определения старт-бита, приемник точно также семплирует серединки битов данных и по большинству семплов считает бит "0" или "1", записывая их в сдвиговый регистр. Стоп-биты тоже семплируются, и если уровень стоп-бита не "1" - UART определяет ошибку кадра и устанавливает соответствующий флаг в управляющем регистре.

Универсальный асинхронный приемопередатчик (UART) - student2.ru

Поскольку бодрейт устанавливается делением системной частоты, при переносе программы на устройство с другим кварцевым резонатором, необходимо изменить соответствующие настройки UART.

Наши рекомендации