Содержание | Последовательные порты


Последовательные порты РС





Интерфейс последовательного порта (serial port) сложнее интерфейса параллельного порта (parallel port). Обычно для любого устройства, подключаемого к последовательному порту, приходится преобразовывать вводимые последовательные данные в параллельные, а выводимые параллельные данные в последовательные. Для этого применяется специальная программируемая микросхема универсального асинхронного приемопередатчика (Universal Asynchronous Transmitter/Receiver - UART). Кроме того, последовательный порт имеет больше регистров, чем параллельный (Standard Parallel Port - SPP).

Каковы же преимущества применения последовательной передачи данных по сравнению с параллельной?

  1. Кабели последовательного порта могут быть длиннее кабелей параллельного порта. Последовательный порт передает логическую "1" как уровень напряжения от -3 до -25 В и логический "0" как уровень напряжения от +3 до +25 В, а параллельный порт использует ТТЛ-уровни: "0" - 0 В и "1" - +5 В. Размах напряжения у последовательного порта составляет до 50 В, а у параллельного - всего 5 В. Поэтому проблемы потерь в последовательном кабеле стоят менее остро.
  2. Для последовательной передачи используется меньше проводников, чем для параллельной передачи. Если периферийное устройство необходимо размещать далеко от компьютера, то трехпроводный кабель в так конфигурации пустого модема (null modem) намного дешевле 25-проводного параллельного кабеля.
  3. Сейчас все большую популярность завоевывают инфракрасные (infra-red) устройства, например в лаптопах и ноутбуках. Для коммуникации с ними применяется последовательная передача. Первая спецификация инфракрасной коммуникации IrDA-1 обеспечивает скорость передачи данных до 115.2 Кб/с.
  4. Интерфейс последовательной коммуникации (Serial Communications Interface - SCI) встроен во многие микроконтроллеры. Здесь для коммуникации требуются всего два контакта микроконтроллера: передаваемые данные (Transmit Data - TXD) и принимаемые данные (Receive Data - RXD), но может потребоваться сигнал строба.

Аппаратные средства


Устройства, в которых для коммуникации используются последовательные кабели, подразделяются на коммуникационное оборудование (Data Communications Equipment - DCE), например модем или плоттер, и терминальное оборудование (Data Terminal Equipment - DTE), например компьютер или терминал. Отметим, что DCE-устройства часто называются Аппаратурой Передачи Данных, а DTE-устройства - Оконечным Оборудованием Данных.

Электрические спецификации последовательно порта содержатся в стандарте EIA (Electronics Industry Association) RS232C, который определяет много параметров:

  1. Логический "0" (Space) представляется напряжением из диапазона от +3 В до +25 В.
  2. Логическая "1" (Mark) представляется напряжением из диапазона от -3 В до -25 В.
  3. Область между уровнями напряжения +3 В и -3 В считается неопределенной.
  4. Напряжение разомкнутой цепи (относительно земли) никогда не должно превышать 25 В.
  5. Ток короткого замыкания не должен превышать 500 мА. Драйвер должен выдерживать его без повреждения.

Конечно, стандарт RS232C определяет намного больше характеристик, например в нем определены также емкость линии, максимальная скорость в бодах (всего 20 000 бит/с!). Новый стандарт RS-232D определяет значительно лучшие характеристики последовательной коммуникации.

Последовательные порты имеют два "размера": 25-контактный разъем D-типа 9-контактный разъем D-типа оба со штырьками и находятся на задней стенке РС. В следующей таблице приведены функции контактов разъемов.

D-тип 25 конт.
D-тип 9 конт.
Сокращение
Полное название
Контакт 2
Контакт 3
TD
Transmit Data
Контакт 3
Контакт 2
RD
Receive Data
Контакт 4
Контакт 7
RTS
Request To Send
Контакт 5
Контакт 8
CTS
Clear To Send
Контакт 6
Контакт 6
DSR
Data Set Ready
Контакт 7
Контакт 5
SG
Signal Ground
Контакт 8
Контакт 1
CD
Carrier Detect
Контакт 20
Контакт 4
DTR
Data Terminal Ready
Контакт 22
Контакт 9
RI
Ring Indicator

Функции контактов


 Сокращение Полное названиеФункция
   TD Передаваемые данныеВыход последовательных данных (TXD)
   RDПринимаемые данные Вход последовательных данных (RXD)
   CTSЗапрос передачи Активный сигнал на этой линии показывает, что модем готов обмениваться данными.
   DCD Обнаружение несущей данных Когда модем обнаруживает несущую от модема на другом конце телефонной линии, он устанавливает на этой линии активный сигнал.
   DSR Готовность модема Сообщает UART о том, что модем готов установить связь.
   DTR Готовность терминала Сообщает модему о том, что UART готов к коммуникации.
   RTS Запрос передачи Сигнал на этой линии информирует модем о том, что UART готов обмениваться данными.
   RI Индикатор звонка Становится активным, когда модем обнаруживает сигнал звонка из телефонной линии.

Пустые модемы




Пустой модем (null modem), часто называемый нуль-модемом, применяется для соединения двух DTE-устройств. Обычно он применяется для передачи файлов между компьютерами по протоколам Zmodem, Xmodem и др. Соединения нуль-модема показаны на рисунке слева. Здесь требуются всего три проводника (TD, RD и SG). Работает нуль-модем довольно просто. Цель состоит в том, чтобы заставить компьютер считать, что он общается с другим модемом, а не с другим компьютером. Данные, передаваемые первым компьютером, должны приниматься вторым, поэтому его линия TD соединена с линией RD второго компьютера. Второй компьютер должен работать так же, поэтому его линия RD подключена к линии TD первого компьютера. Требуется также сигнальная земля (Signal Ground - SG), чтобы земли обоих компьютеров были общими.

Линия Data Terminal Ready подключается к линиям Data Set Ready и Carrier Detect на обоих компьютерах. Когда выдается активный сигнал Data Terminal Ready, то сигналы Data Set Ready и Carrier Detect сразу же становятся активными. В результате компьютер считает, что виртуальный модем, к которому он подключен, готов к работе и обнаружил несущую другого модема.

Как же быть с сигналами Request to Send и Clear To Send? Если оба компьютера работают с одинаковой скоростью, управлять потоком не нужно, поэтому обе эти линии объединяются на каждом компьютере. Когда компьютер хочет передать данные, он выдает высокий уровень Request to Send и таким же становится Clear to Send. Компьютер сразу же получает ответ о том, что все готово к передаче.

Отметим, что линия Ring Indicator не подключена никуда. Эта линия используется только для того, чтобы сообщить компьютеру о получении сигнала звонка из телефонной линии. Так как телефонной линии здесь нет, эта линия никуда не подключается.

Вставка закольцовывания




Вставка закольцовывания (loopback plug) очень удобна при разработке программ для последовательной коммуникации. Здесь линии передаваемых и принимаемых данных соединены, поэтому все, переданное последовательным портом, немедленно принимается этим же портом. Если подключить вставку к последовательному порту и запустить программу терминала, то все вводимое с клавиатуры будет немедленно появляться на экране. Отметим, что такая петля не рассчитана на работу с диагностическими программами. Для них обычно нужна специальная вставка, которая зависит от программы.

Скорости DTE и DCE


Мы уже говорили о терминальном оборудовании DTE и коммуникационном оборудовании DCE: типичное DTE-устройство - это компьютер, а типичное DCE-устройство - это модем. Часто говорят о скоростях работы устройств (каналов) DTE-DCE и DCE-DCE. Скорость DTE-DCE - это скорость между компьютером и модемом; иногда она называется скоростью терминала. Терминал должен работать с большей скоростью, чем устройства DCE-DCE. Скорость устройств DCE-DCE определяется скоростью коммуникационной линии между модемами и эта скорость иногда называется скоростью линии.

Сейчас большинство пользователей имеет модемы с минимальной скоростью 28.8 Кб/с или 33.6 Кб/с. Поэтому следует ожидать, что скорость устройств DCE-DCE составит 28.8 Кб/с или 33.6 Кб/с. Скорость же устройств DTE-DCE составляет 115 200 бит/с - это максимальная скорость микросхемы UART 16550.

В современные модемы встроено сжатие данных (data compression). Это похоже на использование программ WinZip или WinRAR, но сжатие и распаковку данных производит программа в модеме. Обычно коэффициент сжатия составляет 4:1 (для текстовых файлов) и более. Если передавать текстовый файл со скоростью 28.8 Кб/с (DCE-DCE), то после сжатия файла модемом фактическая скорость между взаимодействующими компьютерами составит 115.2 Кб/с, поэтому скорость DCE-DTE также будет равна 115.2 Кб/с. Вот почему скорость устройств DCE-DTE должна быть намного выше скорости модемного соединения.

Некоторые производители модемов сообщают о достижении коэффициента сжатия 8:1. Тогда для такого модема, работающего с модемным соединением 33.6 Кб/с максимальная скорость передачи данных между модемом и микросхемой UART получается 268 800 б/с. При наличии в компьютере микросхемы UART 16550а с максимальной скоростью 115 200 б/с скорость и производительность будут снижены. Новая микросхема UART 16C650 с максимальной скоростью 230 400 б/с решает проблему.

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

Управление потоком данных


Если скорость устройств DTE-DCE в несколько раз выше скорости устройств DCE-DCE, то РС может посылать данные в модем со скоростью 115 000 бит/с. Через некоторое буфер модема переполнится, что приведет к потере данных. Поэтому в последовательной коммуникации применяется управление потоком (flow control). Разработаны два способа управления потоком - аппаратное и программное.

Программное управление потоком, иногда называемое Xon/Xoff, использует два управляющих символа Xon (обычно его ASCII-код равен 17) и Xoff (ASCII-код 19). Модем имеет небольшой буфер и когда компьютер его заполняет, модем посылает символ Xoff, требуя от компьютера прекратить передачу данных. Когда место в буфере модеме освобождается, он посылает символ Xon и компьютер передает новые данные. К достоинству такого способа управления потоком относится то, что здесь не требуются дополнительные проводники, так как символы посылаются по линиям TD/RD. Однако в медленных линиях приходится передавать 10 битов каждого символа, что снижает скорость коммуникации.

Аппаратное управление потоком называется также управлением RTS/CTS. Вместо посылки дополнительных символов по линии данных в нем используются два проводника в кабеле. При этом скорость передачи не снижается. Когда компьютер хочет передать данные, он выдает активный сигнал на линии Request to Send. Если модем имеет место для этих данных, он отвечает активным сигналом Clear to Send и компьютер начинает передавать данные. Если же в буфере модема нет свободного места, он не выдает сигнал Clear to Send.

Микросхемы UART


Микросхема универсального асинхронного приемопередатчика (Universal Asynchronous Receiver/Transmitter - UART) находится на карте последовательного порта (в новых РС она интегрирована в чипсет) и взаимодействует с модемом и другими устройствами. Во многих картах UART интегрирован в другие микросхемы (управления параллельным портом, игровым портом, дисковыми накопителями). Наиболее распространена в РС серия UART 8250, включающая в себя микросхемы 16450, 16550, 16650 и 16750.


Микросхема 16550 совместима с микросхемами 8250 и 16450. Два отличия касаются только контактов 24 и 29. В микросхеме 8250 контакт 24 служит выходным сигналом выбора кристалла CS (Chip Select), показывающим, активна микросхема или нет. Контакт 29 в микросхемах 8250 и 16450 не задействован. В микросхеме 16550 эти контакты использованы для сигналов Transmit Ready и Receive Ready, которые можно использовать для прямого доступа к памяти (Direct Memory Access - DMA). Эти контакты обеспечивают два режима работы: режим 0 - DMA одиночными передачами, а режим 1 - DMA несколькими передачами.

Режим 0 называется также режимом 16450 и выбирается, когда буферы FIFO запрещены битом 0 регистра управления FIFO (FIFO Control Register - FCR) или когда буферы FIFO разрешены, но DMA Mode Select = 0 (бит 3 регистра FCR). В этом режиме сигнал готовности к приему (Receive Ready - RXRDY) имеет активный низкий уровень, когда в буфере приемника есть хотя бы один символ (байт). На выходе RXRDY формируется пассивный высокий уровень, когда в буфере приемника символов нет. Выходной сигнал готовности к передаче (Transmit Ready - TXRDY) имеет активный низкий уровень, когда нет символов в буфере передатчика, и формирует пассивный высокий уровень после загрузки первого символа (байта) в буфер передатчика.

Режим 1 действует, когда буферы FIFO активны и DMA Mode Select = 1. В этом режиме сигнал RXRDY будет иметь активный низкий уровень, когда достигается уровень запуска или когда возникает таймаут микросхемы 16550, и переходит на пассивный высокий уровень, когда в FIFO не осталось символов. Сигнал TXRDY будет активным, когда нет символов в буфере передатчика, и пассивным, когда FIFO буфера передатчика полностью заполнено.

Все сигналы микросхемы UART являются ТТЛ-совместимыми. К ним относятся и сигналы TD, RD, RI, DCD, DSR, CTS, DTR и RTS, служащие интерфейсом с разъемом обычно D-типа последовательного порта. Поэтому применяются преобразователи уровня стандарта RS232 (см. далее). Для микросхем DS1489 и DS1488 преобразователей используется питание +12 В и -12 В. Эти микросхемы преобразуют ТТЛ-уровни к уровням стандарта RS232.

Для работы микросхемы UART требуется синхронизация. На карте обычно есть кварц на 1.8432 МГц или 18.432 МГц. Кварц подключается к контактам XIN-XOUT с дополнительными компонентами, помогающими ему начать генерацию. Эта частота используется для программируемого генератора скорости в бодах (Programmable Baud Rate Generator), который непосредственно соединен со схемами синхронизации передачи, но не прямо со схемами синхронизации приема. Для синхронизации приема необходимо внешне соединить контакт 15 (BaudOut) с контактом 9 (Receiver clock in). Частота сигнала синхронизации равна Baudrate * 16.

Подробные сведения о микросхеме UART 16550 можно получить на сайте компании National Semiconductors (http://www.natsemi.com). Справочные данные представлены в удобном формате .pdf. Компания Texas Instruments (http://www.ti.com) выпускает более совершенный UART 16750, который имеет буферы FIFO емкостью 64 байта.

Типы UART для персональных компьютеров


8250 Первый UART в данной серии. Не имеет рабочего регистра (scratch register). Микросхема 8250A была улучшенной версией микросхемы 8250, которая работает быстрее со стороны шины.
8250A Этот UART быстрее микросхемы 8250 со стороны шины. Программно выглядит точно так же, как микросхема 16450.
8250B Эта микросхема очень похожа на микросхему 8250.
16450 Этот UART применялся в компьютерах IBM PC/AT (повышена скорость по сравнению с 8250.
16550 Эта микросхема представляет собой первое поколение буферированных UART - она имела 16-байтовый буфер FIFO. Вскоре была заменена на микросхему 16550A, так как буферы не работали.
16550A Самый распространенный UART для коммуникации со скоростью 28.8 Кб/с. Буферы FIFO работают.
16650 Новая микросхема UART. Имеет 32-байтовые буферы FIFO, поддерживает программируемые символы XOn/XOff и управление мощностью.
16750 Выпускается компанией Texas Instruments. Имеет 64-байтовые буферы FIFO.

Регистры последовательного порта


Адреса и линии запросов прерываний последовательных портов


В таблице слева приведены стандартные адреса последовательных (коммуникационных - COMmunications) портов РС. Аналогично параллельным портам LPT двухбайтовые базовые адреса COM-портов можно считать из области данных BIOS, как показано в таблице справа.

Название
Адрес
Линия IRQ
COM 1
3F8
4
COM 2
2F8
3
COM 3
3E8
4
COM 4
2E8
3
Начальный адрес
Функция
0000:0400
Базовый адрес COM1
0000:0402
Базовый адрес COM2
0000:0404
Базовый адрес COM3
0000:0406
Базовый адрес COM4

Таблица регистров


Базовый
адрес
DLAB
Read/Write
Сокр.
Название регистра
+ 0
=0
Write
THR
Регистр хранения передатчика (Transmitter Holding Register)
=0
Read
RDR
Регистр данных приемника (Receiver Data Register)
=1
Read/Write
-
Младший байт защелки делителя (Divisor Latch Low Byte)
+ 1
=0
Read/Write
IER
Регистр разрешения прерывания (Interrupt Enable Register)
=1
Read/Write
-
Старший байт защелки делителя (Divisor Latch High Byte)
+ 2
-
Read
IIR
Регистр идентификации прерывания (Interrupt Identification Register)
-
Write
FCR
Регистр управления FIFO (FIFO Control Register)
+ 3
-
Read/Write
LCR
Регистр управления линии (Line Control Register)
+ 4
-
Read/Write
MCR
Регистр управления модема (Modem Control Register)
+ 5
-
Read
LSR
Регистр состояния линии (Line Status Register)
+ 6
-
Read
MSR
Регистр состояния модема (Modem Status Register)
+ 7
-
Read/Write
-
Рабочий регистр (Scratch Register)

Столбец DLAB


В таблице регистров имеется столбец DLAB. Когда DLAB установлен в 1 или 0, меняются функции некоторых регистров. Благодаря этому UART имеет 12 регистров (включая рабочий), но только восемь адресов портов. DLAB означает бит доступа к защелке делителя (Divisor Latch Access Bit). Когда бит DLAB через регистр управления линией LCR установлен в 1, становятся доступными два регистра, позволяющие определить скорость коммуникации в бит/с.

Микросхема UART работает от кварца с частотой около 1.8432 МГц. Внутренний делитель (счетчик) делит частоту входного сигнала на 16. При частоте кварца 1.8432 МГц получается максимальная скорость передачи и приема 115 000 бит/с. Этого достаточно для самых быстрых модемов, но для обычной скорости слишком много. Поэтому в микросхеме UART имеется программируемый генератор скорости в бодах (Programmable Baud Rate Generator), которым управляют два регистра-защелки делителя.

Скорость, бит/с
Делитель
(десятичный)
Старший
байт
Младший
байт
50
2304
09h
00h
300
384
01h
80h
600
192
00h
C0h
2400
48
00h
30h
4800
24
00h
18h
9600
12
00h
0Ch
19200
6
00h
06h
38400
3
00h
03h
57600
2
00h
02h
115200
1
00h
01h

Предположим, например, что требуется скорость коммуникации 9600 бит/с. Тогда для ее получения необходимо разделить 115 000 на 12. "Делитель" 12 хранится в двух регистрах, управляемых битом доступа к защелке делителя (Divisor Latch Access Bit - DLAB). Делитель может быть любым 16-битовым числом, т.е. от 0 до 65 535. Микросхема UART имеет 8-битовую шину данных, поэтому используются два регистра.

Первый регистр (База + 0, когда DLAB = 1) сохраняет младший байт защелки делителя, а второй регистр (База + 1, когда DLAB = 1) сохраняет старший байт защелки делителя.

В таблице приведены некоторые распространенные значения скорости коммуникации и требуемое для их получения содержание старшего и младшего байта защелки делителя. Отметим, что значения делителей показаны как 16-ричные числа.

Регистр разрешения прерывания (IER)


Бит
Примечания
Бит 7
Зарезервирован
Бит 6
Зарезервирован
Бит 5
Разрешает маломощный режим (16750)
Бит 4
Разрешает режим "засыпания" (sleep) (16750)
Бит 3
Разрешает прерывание по состоянию модема
Бит 2
Разрешает прерывание по приемной линии
Бит 1
Разрешает прерывание
по пустому регистру хранения передатчика
Бит 0
Разрешает прерывание
по доступности принятых данных

Регистр разрешения прерывания (Interrupt Enable Register - IER) является самым простым регистром микросхемы UART. Установка бита 0 в 1 разрешает прерывание по доступности принятых данных UART генерирует прерывание, когда приемный регистр приемника или буфер FIFO содержат данные, подлежащие считыванию процессором.

Бит 1 разрешает прерывание по пустому регистру хранения передатчика (Transmit Holding Register - THR). Микросхема UART формирует запрос прерывания процессора, буферный регистр передатчика пустой.

Бит 2 разрешает прерывание по состоянию приемной линии. Микросхема UART формирует прерывание процессора, когда изменяется состояние приемной линии. Аналогично бит 3 разрешает прерывание по состоянию модема. Биты 6 и 7 зарезервированы, а биты 4 и 5 позволяют экономить потребляемую мощность.

Регистр идентификации прерывания (IIR)


Бит
Примечания
Биты 6 и 7
Бит 6
Бит 7
 
0
0
Нет FIFO
0
1
FIFO разрешено, но не используется
1
1
FIFO разрешено
Бит 5
64-байтовое FIFO разрешено (16750)
Бит 4
Зарезервирован
Бит 3
0
Зарезервирован в 8250, 16450
1
Ожидает прерывание таймаута 16550
Биты 1 и 2
Бит 2
Бит 1
 
0
0
Прерывание по состоянию модема
0
1
Прерывание по пустому
регистру хранения передатчика
1
0
Прерывание по доступности
принятых данных
1
1
Прерывание по состоянию
приемной линии
Бит 0
0
Есть ожидающее прерывание
1
Нет ожидающего прерывания

Регистр идентификации прерывания (Interrupt Identification Register - IIR) является только считываемым. Биты 6 и 7 показывают состояние буфера FIFO. Когда оба бита содержат 0, нет активных буферов FIFO. Это единственный результат от микросхем 8250 и 16450. Если бит 7 установлен в 1, а бит 6 содержит 0, то буферы FIFO разрешены, но не используются (это результат ошибки в микросхеме 16550, сделавшей FIFO бесполезным). Если оба бита содержат 1, буферы FIFO разрешены и полностью работоспособны.

Биты 4 и 5 зарезервированы. Бит 3 показывает состояние таймаута прерывания в микросхеме 16550 или выше.

Бит 0 показывает, возникло ли прерывание. Если оно имеется, его причину показывают биты 1 и 2. Прерывания действуют с учетом приоритетов. Высший приоритет имеет прерывание по состоянию приемной линии, а затем идут прерывание по доступности данных, прерывание по пустому регистру хранения передатчика и прерывание по состоянию модема, которое имеет имеющее низший приоритет.

Регистр управления FIFO (FCR)


Бит
Примечания
Биты 6 и 7
Бит 7
Бит 6
Уровень запуска прерывания
0
0
1 байт
0
1
4 байта
1
0
8 байтов
1
1
14 байтов
Бит 5
Разрешение 64-байтового FIFO (16750)
Бит 4
Зарезервирован
Бит 3
Выбор режима DMA. Изменение состояния
контактов RXRDY и TXRDY с режима 1 на режим 2.
Бит 2
Очистка передающего FIFO
Бит 1
Очистка приемного FIFO
Бит 0
Разрешение FIFO

Регистр управления FIFO (FIFO Control Register - FCR) является только записываемым регистром, который применяется для управления буферами FIFO (микросхема 16550). Бит 0 разрешает работу FIFO приемника и передатчика. При записи 0 в этот бит буферы запрещаются и все находящиеся в них данные теряются.

Биты 1 и 2 управляют очисткой буферов FIFO (бит 1 - приемного буфера и бит 2 - передающего буфера). Запись 1 в эти биты очищает содержание только буфера FIFO и не влияет на регистры сдвига. Оба эти бита сбрасываются автоматически (self-resetting), поэтому после записи в них 1 не нужно сбрасывать их в 0.

Бит 3 разрешает выбор режима DMA (микросхема 16550 и выше). Бит 5 зарезервирован. Биты 6 и 7 используются для установки уровня запуска в приемном FIFO. Если бит 7 содержит 1, а бит 6 содержит 0, то уровень запуска установлен на восемь байтов. Когда в приемном FIFO оказываются восемь байтов, в регистре идентификации прерывания (IIR) устанавливается прерывание по доступности принятых данных.

Регистр управления линии (LCR)


Бит 7
1
Бит доступа к защелке делителя
0
Доступ к буферу приемника, буферу
передатчика и регистру разрешения
прерывания
Бит 6
Установка разрешения разрыва
Биты 3, 4 и 5
Бит 5
Бит 4
Бит 3
Выбор паритета
X
X
0
Нет паритета
0
0
1
Нечетный паритет
0
1
1
Четный паритет
1
0
1
Высокий уровень (sticky)
1
1
1
Низкий уровень (sticky)
Бит 2
Длина стопового бита
0
Один стоповый бит
1
2 стоповых бита для слов длиной
6, 7 или 8 битов или 1.5 стоповых
бита для слова 5 битов
Биты 0 и 1
Бит 1
Бит 0
Длина слова
0
0
5 битов
0
1
6 битов
1
0
7 битов
1
1
8 битов

Регистр управления линии (Line Control Register - LCR) задает основные параметры коммуникации. Бит 7 - это бит доступа к защелке делителя (Divisor Latch Access Bit - DLAB). Функция этого бита рассмотрена ранее. При установке бита 6 в 1 линия TD переходит в состояние Space, которое вызывает "разрыв" (конец коммуникации) в принимающей микросхеме UART. Установка этого бита в 0 запрещает разрыв.

Биты 3, 4 и 5 выбирают контроль по паритету. Если изучить эти три бита, то окажется, что бит 3 управляет паритетом: если он сброшен в 0, паритет не применяется, а при установке в 1 паритет используется. Нетрудно заметить, что бит 5 управляет "зависшим" (sticky) паритетом. Зависший паритет просто означает, что бит паритета всегда передается и проверяется как 1 или 0. Конечно, зависший паритет практически не помогает в контроле ошибок.

Сброс бита 5 в 0 разрешает обычный контроль по паритету, если бит 3 установлен в 1. Нечетный паритет реализуется, когда бит паритета передается как 1 или 0 так, чтобы во всей посылке было нечетное число единиц. Четный паритет получается, когда бит паритета обеспечивает в посылке четное число единиц. Контроль по паритету обнаруживает однобитовые ошибки, а в общем ошибки нечетной кратности. Остальные ошибки, например искажение двух битов, паритет не обнаруживает. Контроль по паритету ненадежный, поэтому в последовательной коммуникации часто применяется программный контроль.

Бит 2 определяет длину (число) стоповых битов. Сброс этого бита в 0 вызывает формирование одного стопового бита, что сейчас общепринято. При установке бита 2 в 1 формируются 1.5 или 2 стоповых бита в зависимости от длины слова. Отметим, что приемник контролирует только первый стоповый бит.

Биты 0 и 1 устанавливают длину слова. Сейчас длина слова обычно равна 8.

Регистр управления модема (MCR)


Бит
Примечания
Бит 7
Зарезервирован
Бит 6
Зарезервирован
Бит 5
Разрешение автоматического
управления потоком (16750)
Бит 4
Режим закольцовывания
Бит 3
Дополнительный выход 2
Бит 2
Дополнительный выход 1
Бит 1
Форсирование Request to Send
Бит 0
Форсирование Data Terminal Ready

Регистр управления модема (Modem Control Register - MCR) допускает операции считывания и записи. Биты 5, 6 и 7 зарезервированы. Бит 4 активизирует режим "закольцовывания" (шлейфа) - последовательный выход передатчика переводится в состояние Mark, а вход приемника отключается. Внутри микросхемы выход передатчика подается на вход приемника. Сигналы DSR, CTS, RI и DCD отключаются, а сигналы DTR, RTS, OUT1 и OUT2 подключаются к входам управления модемом. Выходы управления модемом переводятся в пассивное состояние. В этом режиме все данные, помещенные в регистры передатчика для вывода, принимаются схемой приемника и доступны в его буфере. Этот режим применяется для тестирования работы микросхемы UART.

Дополнительный выход можно подключить к внешней схеме, которая управляет процессом прерывания микросхемой UART процессора. Дополнительный выход 1 обычно отключается, но в некоторых картах он применяется для переключения кварца с частотой 1.8432 МГц на кварц с частотой 4 МГц, который применяется для MIDI. Биты 0 и 1 просто управляют соответствующими линиями. Например, установка бита 1 в 1 делает формирует активный сигнал на линии Request To Send.

Регистр состояния линии (LSR)


Бит
Примечания
Бит 7
Ошибка в приемном FIFO
Бит 6
Пустые регистры хранения данных
Бит 5
Пустой регистр хранения передатчика
Бит 4
Прерывание по разрыву
Бит 3
Ошибка кадра
Бит 2
Ошибка паритета
Бит 1
Ошибка перегрузки
Бит 0
Готовность данных

Регистр состояния линии (Line Status Register - LSR) является только считываемым. Бит 7 показывает ошибку в приемном буфере FIFO. Этот бит содержит 1, когда обнаружена ошибка (разрыва, паритета или кадра) в байте, который содержится в FIFO.

Когда бит 6 находится в состоянии 1, регистр хранения передатчика и регистр сдвига пустые. Регистр хранения передатчика в микросхеме UART содержит следующий байт данных, загруженный в него параллельно. Регистр сдвига используется для преобразования байта в последовательный формат для передачи по линии. Когда установлен в 1 бит 5, пустым является только регистр хранения передатчика. В чем же различие между этими битами? Когда бит 6 находится в состоянии 1, оба регистра хранения и сдвига передатчика пустые, преобразование не производится, поэтому нет никакой активности на линии TD. Когда же бит 5 находится в состоянии 1, регистр хранения передатчика пустой, поэтому в в него можно загрузить следующий байт данных, но последовательное преобразование в регистре сдвига производится.

Прерывание по разрыву (бит 4) возникает, когда линия RD находится в состоянии Space (логический 0) дольше, чем время передачи полного слова; при этом учитываются стартовый бит, биты данных, бит паритета и стоповые биты.

Ошибка кадра (Framing Error) в бите 3 фиксируется, когда последний бит из-за ошибки синхронизации не является стоповым битом. Наиболее часто эта ошибка возникает при соединении двух компьютеров нуль-модемом, когда скорость передачи данных отличается от скорости их приема, заданной в микросхеме UART.

Ошибка перегрузки (Overrun Error) возникает, когда программа не может достаточно быстро считывать из порта. Если достаточно быстро не извлечь принятый байт из регистра данных приемника и принят второй байт, то неизвлеченный байт теряется и фиксируется ошибка перегрузки.

Бит 0 показывает готовность данных - байт данных принят микросхемой UART и регистр данных приемника готов для считывания.

Регистр состояния модема (MSR)


Бит
Примечания
Бит 7
Обнаружение несущей (Carrier Detect)
Бит 6
Индикатор звонка (Ring Indicator)
Бит 5
Готовность модема (Data Set Ready)
Бит 4
Сброс для передачи (Clear To Send)
Бит 3
Дельта Data Carrier Detect
Бит 2
Задний фронт индикатора звонка
Бит 1
Дельта Data Set Ready
Бит 0
Дельта Clear to Send

Бит 0 в регистре состояния модема (Modem Status Register - MSR) показывает дельта (изменение) Clear To Send и означает, что было изменение на линии CTS после последнего считывания из этого регистра. Такой же смысл имеют биты 1 и 3 - они показывают изменение линии Data Set Ready и линии Data Carrier Detect. Бит 2 - это задний фронт индикатора звонка, который показывает, что был переход от низкого состояния к высокому на линии индикатора звонка (Ring Indicator).

Биты 4-7 показывают текущее состояние линий данных в момент считывания: Carrier Detect (бит 7), Ring Indicator (бит 6), Data Set Ready (бит 5) и Clear To Send (бит 4).

Рабочий регистр


Рабочий регистр (scratch register) не применяется для коммуникации, а используется как место для хранения байта данных. Единственное его полезное применение - определить, является ли UART микросхемой 8250/8250B или 8250A/16450 и сейчас мало полезен, так как микросхемы 8250/8250B никогда не рассчитывались на компьютеры IBM PC/АТ и не успевали за скоростью шины.

Интерфейс устройств с портами RS232C


Формы сигналов RS232C

До сих пор мы говорили о последовательной коммуникации применительно к РС, а сейчас остановимся на особенностях интерфейса устройств. Коммуникация в стандарте RS232C является асинхронной, т.е. сигналы синхронизации с данными не передаются. Каждое слово синхронизируется с помощью стартового бита (start bit), а внутренние генераторы синхронизации на каждой стороне поддерживают правильную коммуникацию.


На рисунке слева показана форма сигналов от микросхемы UART при использовании наиболее распространенного сейчас формата 8N1 - восемь битов данных: отсутствие (No) паритета и один стоповый бит (stop bit). Линия RS232C в холостом режиме находится в состоянии Mark (логическая 1). Передача начинается со стартового бита, имеющего уровень логического 0. Затем по линии передается каждый бит данных, причем первым передается младший бит. Для завершения передачи добавляется стоповый бит (логическая 1).

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

Говорят, что передаваемые рассмотренным способом данные оформлены в кадр (frame).

Данные представлены кадром между стартовым и стоповым битами. Если стоповый бит принимается как логический 0, возникает ошибка кадра (Framing Error - FE). Такая ошибка характерна для ситуаций, когда передающая и приемная стороны работают с различной скоростью.

Приведенный рисунок показывает сигнал непосредственно на выходном контакте микросхемы UART. Логические уровни стандарта RS232С используют диапазон от +3 В до +25 В для представления "Space" (логического 0) и диапазон от -3 В до -25 В для представления "Mark" (логической 1). Значения напряжений между этими областями, т.е. между +3 В и -3 В считаются неопределенными. Следовательно, выходной сигнал микросхемы UART необходимо пропустить через преобразователь уровня RS232C (конвертор уровня - level converter). В результате получается следующий выходной сигнал порта RS232C компьютера:


Такие сигналы действуют на линиях передаваемых TD и принимаемых RD данных порта RS232C. Эти линии переносят последовательные данные, поэтому и весь порт называется последовательным (serial port). В порту RS232C имеются и другие линии, которые, в сущности, являются параллельными линиями, - это линии RTS, CTS, DCD, DSR, DTR, RTS и RI. Логические уровни на этих линиях соответствуют стандарту RS232С.

Конверторы уровней RS232C


Почти все используемые в РС цифровые устройства требуют логических уровней ТТЛ или CMOS. Поэтому первый этап подключения устройства к порту RS232C заключается в преобразовании уровней RS232C в логические уровни 0 В и +5 В. Для этого применяются конверторы уровней RS232C.

В качестве конверторов уровней RS232C часто применятся микросхемы 1488 RS232С драйвер (передатчик) и 1489 RS232С приемник. Каждая микросхема содержит четыре инвертора одного типа - драйвера или приемника. Драйвер требует два напряжения питания в диапазоне от +7.5 В до +15 В и от -7.5 В до -15 В.


В качестве конвертора уровней применяется также микросхема MAX-232. Достоинство этой микросхемы заключается в том, что она имеет специальную внутреннюю схему, которая формирует напряжения +10 В и -10 В из одного напряжения питания +5 В. В корпусе микросхемы содержатся два приемника и два передатчика. Это удобно, когда требуется использовать только линии передаваемых TD и принимаемых RD данных. В этом случае не нужны две микросхемы.


На рисунке слева показано типичное включение микросхемы MAX-232.






Наверх