Порядок обмена по интерфейсу RS-232C.

Источник информации:
"Разработка устройств сопряжения для персонального компьютера типа IBM PC"
Издательство "ЭКОМ" Москва, 1998
авторы: Ю.В.Новиков О.А.Калашников С.Э.Гуяев

Интерфейс RS-232C предназначен для подключения к компьютеру стандартных внешних устройств (принтера, сканера, модема, мыши и др.), а также связи компьютеров между собой. Основным преимуществом использования RS-232C по сравнению с Centronics являются возможность передачи на значительно большие расстояния и гораздо более простой соединительный кабель. В то же время работать с ним несколько сложнее. Данные в RS-232C передаются в последовательном коде побайтно. Каждый байт обрамляется стартовым и стоповыми битами. Данные могут передаваться как в одну, так и в другую сторону (дуплексный режим).

Компьютер имеет 25-контактный (DB25P) или 9-контактный (DB9P) разъем для подключения RS-232C. Назначение контактов разъема приведено в таблице.

Цепь | Контакт (25-контaктный разъем) | Контакт (9-контактный разъем) | Направление I/O
FG | 1 | - | -
-TxD | 2 | 3 | O
-RxD | 3 | 2 | I
RTS | 4 | 7 | O
CTS | 5 | 8 | I
DSR | 6 | 6 | I
SG | 7 | 5 | -
DCD | 8 | 1 | I
DTR | 20 | 4 | O
RI | 22 | 9 | I
I-входной сигнал компьютера O-выходной сигнал

Назначение сигналов следующее.

FG - защитное заземление (экран).
-TxD - данные, передаваемые компьютером в последовательном коде (логика отрицательная).
-RxD - данные, принимаемые компьютером в последовательном коде (логика отрицательная).
RTS - сигнал запроса передачи. Активен во все время передачи.
CTS - сигнал сброса (очистки) для передачи. Активен во все время передачи. Говорит о готовности приемника.
DSR - готовность данных. Используется для задания режима модема.
SG - сигнальное заземление, нулевой провод.
DCD - обнаружение несущей данных (детектирование принимаемого сигнала).
RI - индикатор вызова. Говорит о приеме модемом сигнала вызова по телефонной сети.

Наиболее часто используется трех- или четырех проводная связь (для двунаправленной передачи). Схема соединения для четырех проводной линии связи показана на рисунке.

Схема 4-проводной линии связи

Для двухпроводной линии связи в случае только передачи из компьютера во внешнее устройство используются сигналы SG и TxD. Все 10 сигналов интерфейса задействуются только при связи компьютера с модемом.

Формат передаваемых данных показан на рисунке

Собственно данные (5, 6, 7 или 8 бит) сопровождаются стартовым битом, битом четности и одним или двумя стоповыми битами. Получив стартовый бит, приемник выбирает из линии биты данных через определенные интервалы времени. Очень важно чтобы тактовые частоты приемника и передатчика были одинаковыми (допустимое расхождение - не более 10%). Скорость передачи по RS-232C может выбираться из ряда: 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/с.

Все сигналы RS-232C передаются специально выбранными уровнями, обеспечивающими высокую помехоустойчивость связи.
Передатчик | Приемник
Уровни сигналов на передающем конце линии связи | Уровни сигналов на принимающем конце линии связи

Отметим, что данные передаются в инверсном коде (логической единице соответствует низкий уровень, логическому нулю - высокий).

Обмен по RS-232C осуществляется с помощью обращений по специально выделенным для этого портам COM1 (адреса 3F8h...3FFh, прерывание IRQ4), COM2 (адреса 2F8h...2FFh, прерывание IRQ3), COM3 (адреса 3E8h...3EFh, прерывание IRQ10), COM4 (адреса 2E8h...2EFh, прерывание IRQ11).

Форматы обмена с приемопередатчиком RS-232C.

Контроллер параллельного обмена (универсальный асинхронный приемопередатчик, УАПП), входящий в состав персонального компьютера, реализует следующие функции:

  • преобразование параллельного кода в последовательный при передаче и обратное преобразование при приеме;
  • формирование стартового, стопового битов и бита четности при передаче и контроль их правильности при приеме;
  • формирование и контроль состояния сигналов интерфейса RS-232C.

УАПП может быть выполнен на специальной микросхеме (обычно i8250 или 16550А) или входить в состав БИС вместе с другими контроллерами, но все форматы обмена с ним сохраняются неизменными.

Обычно в состав компьютера входят 2 последовательных порта, обозначаемых COM1 (адреса 3F8h...3FFh, прерывание IRQ4) и COM2 (адреса 2F8h...2FFh, прерывание IRQ3).

Рассмотрим значения отдельных битов, записываемых по этим адресам и читаемых из этих адресов. Но сначала отметим, что значения битов портов 3F8h и 3F9h зависит от значения специального бита управления, записываемого в 7 разряде в порт 3FBh (здесь и далее рассматриваем СОМ1, имея в виду, что для СОМ2 все делается аналогично).

Порт 3F8.

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

Шестнадцатеричный код частоты | Скорость передачи бит/с | Шестнадцатеричный код частоты | Скорость передачи бит/с
0410 | 110 | 0018 | 4800
0300 | 150 | 000C | 9600
0180 | 300 | 0006 | 19200
00C0 | 600 | 0003 | 38400
0060 | 1200 | 0002 | 57600
0030 | 2400 | 0001 | 115200

Порт 3F9.

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

Номер бита | Назначение бита
0 | 1 - разрешение прерывания после окончания приема данных 0 - запрещение прерывания
1 | 1 - разрешение прерывания после окончания передачи данных 0 - запрещение прерывания
2 | 1 - разрешение прерывания при обнаружении сбоя на линии 0 - запрещение прерывания
3 | 1 - разрешение прерывания по изменению входных управляющих сигналов RS-232C 0 - запрещение прерывания
4,5,6,7 | не используются

Порт 3FA.

Это регистр идентификации прерывания. Используется только для чтения. Его содержимое указывает на причину прерывания. Формат регистра следующий:
Номер бита | Назначение бита
0 | 1 - нет прерываний требующих обслуживания 0 - есть прерывания
1,2 | 00 - переполнение приемника, ошибка четности или формата данных при приеме, сброс - по чтению из 3FD 01 - данные переданы, сброс - по записи в 3F8 10 - данные приняты и доступны для чтения, сброс - по чтению из 3F8 11 - изменение входных управляющих сигналов RS-232C, сброс - по чтению из 3FE
3,4,5,6,7 | не используются

Порт 3FB.

Это управляющий регистр, доступный по чтению и записи. Его формат следующий:
Номер бита | Назначение бита
0,1 | Количество бит передаваемых данных: 00 - 5 бит 10 - 6 бит 01 - 7 бит 11 - 8 бит
2 | Количество стоповых битов 0 - 1 бит 1 - 2 бита
3,4 | Контроль четности 0х - контроль четности не используется 10 - контроль на нечетность 11 - контроль на четность
5 | Задание контрольного бита 1 - контрольный бит всегда равен 0 (если выбран контроль на четность) или всегда равен 1 (если выбран контроль на нечетность)
6 | 1 - постоянная передача нуля 0 - нормальная передача символов
7 | Управляющий бит для выбора назначения портов 3F8 и 3F9

Порт 3FC.

Данный порт используется для управления модемом. Управляет состоянием управляющих линий интерфейса RS-232C. Применяется довольно редко. Его формат следующий:
Номер бита | Назначение бита
0 | Состояние линии DTR
1 | Состояние линии RTS
2 | Состояние выходного сигнала УАПП OUT1
3 | Состояние выходного сигнала УАПП OUT2
4 | Режим работы УАПП 0 - рабочий 1 - диагностический
5,6,7 | не используются

Порт 3FD.

Это регистр состояния линии. Его формат следующий:
Номер бита | Назначение бита
0 | 1 - данные получены и готовы для чтения, флаг сбрасывается после чтения данных
1 | 1 - ошибка переполнения при приеме (принят новый байт раньше, чем прочитан предыдущий, предыдущий байт теряется)
2 | 1 - ошибка четности при приеме
3 | 1 - ошибка синхронизации (не принята стоповая посылка)
4 | 1 - обнаружен запрос на прерывание передачи (постоянная передача нуля)
5 | 1 - буфер регистра передачи пуст, можно записывать следующий передаваемый байт
6 | 1 - регистр сдвига передатчика пуст, передача окончена
7 | 1 - тайм-аут

Порт 3FE.

Это регистр состояния модема. Используется очень редко. Его формат следующий:
Номер бита | Назначение бита
0 | Линия CTS изменила состояние после предыдущего чтения из регистра состояния модема.
1 | Линия DSR изменила состояние.
2 | Линия RI изменила состояние.
3 | Линия DCD изменила состояние.
4 | Состояние линии CTS
5 | Состояние линии DSR
6 | Состояние линии RI
7 | Состояние линии DCD

Для передачи данных необходимо записать их по адресу 3F8 (предварительно надо убедиться, что буферный регистр передатчика пуст). Принятые данные читаются из адреса 3F8 (предварительно надо убедиться, что данные приняты). УАПП обеспечивает дуплексный режим передачи данных, то есть возможно одновременно передавать и принимать данные. Но все параметры обмена для приема и передачи должны быть одинаковыми.

Для инициализации УАПП необходимо сделать следующее:

  • записать по адресу 3FB управляющий байт с единицей в 7 бите;
  • записать код делителя частоты по адресам 3F8 и 3F9;
  • записать по адресу 3FB управляющий байт с нулем в 7 бите и с требуемыми значениями остальных битов;
  • записать управляющий байт по адресу 3F9;
  • записать управляющий байт по адресу 3FC.