Последовательные порты РС
Интерфейс последовательного порта (serial port) сложнее интерфейса параллельного порта (parallel port). Обычно для любого устройства, подключаемого к последовательному порту, приходится преобразовывать вводимые последовательные данные в параллельные, а выводимые параллельные данные в последовательные. Для этого применяется специальная программируемая микросхема универсального асинхронного приемопередатчика (Universal Asynchronous Transmitter/Receiver - UART). Кроме того, последовательный порт имеет больше регистров, чем параллельный (Standard Parallel Port - SPP).
Каковы же преимущества применения последовательной передачи данных по сравнению с параллельной?
- Кабели последовательного порта могут быть длиннее кабелей параллельного порта. Последовательный порт передает логическую "1" как уровень напряжения от -3 до -25 В и логический "0" как уровень напряжения от +3 до +25 В, а параллельный порт использует ТТЛ-уровни: "0" - 0 В и "1" - +5 В. Размах напряжения у последовательного порта составляет до 50 В, а у параллельного - всего 5 В. Поэтому проблемы потерь в последовательном кабеле стоят менее остро.
- Для последовательной передачи используется меньше проводников, чем для параллельной передачи. Если периферийное устройство необходимо размещать далеко от компьютера, то трехпроводный кабель в так конфигурации пустого модема (null modem) намного дешевле 25-проводного параллельного кабеля.
- Сейчас все большую популярность завоевывают инфракрасные (infra-red) устройства, например в лаптопах и ноутбуках. Для коммуникации с ними применяется последовательная передача. Первая спецификация инфракрасной коммуникации IrDA-1 обеспечивает скорость передачи данных до 115.2 Кб/с.
- Интерфейс последовательной коммуникации (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, который определяет много параметров:
- Логический "0" (Space) представляется напряжением из диапазона от +3 В до +25 В.
- Логическая "1" (Mark) представляется напряжением из диапазона от -3 В до -25 В.
- Область между уровнями напряжения +3 В и -3 В считается неопределенной.
- Напряжение разомкнутой цепи (относительно земли) никогда не должно превышать 25 В.
- Ток короткого замыкания не должен превышать 500 мА. Драйвер должен выдерживать его без повреждения.
Конечно, стандарт RS232C определяет намного больше характеристик, например в нем определены также емкость линии, максимальная скорость в бодах (всего 20 000 бит/с!). Новый стандарт RS-232D определяет значительно лучшие характеристики последовательной коммуникации.
Последовательные порты имеют два "размера": 25-контактный разъем D-типа 9-контактный разъем D-типа оба со штырьками и находятся на задней стенке РС. В следующей таблице приведены функции контактов разъемов.
Функции контактов
Сокращение | Полное название | Функция | ||
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, как показано в таблице справа.
|
|
Таблица регистров
адрес | ||||
Регистр хранения передатчика (Transmitter Holding Register) | ||||
Регистр данных приемника (Receiver Data Register) | ||||
Младший байт защелки делителя (Divisor Latch Low Byte) | ||||
Регистр разрешения прерывания (Interrupt Enable Register) | ||||
Старший байт защелки делителя (Divisor Latch High Byte) | ||||
Регистр идентификации прерывания (Interrupt Identification Register) | ||||
Регистр управления FIFO (FIFO Control Register) | ||||
Регистр управления линии (Line Control Register) | ||||
Регистр управления модема (Modem Control Register) | ||||
Регистр состояния линии (Line Status Register) | ||||
Регистр состояния модема (Modem Status Register) | ||||
Рабочий регистр (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), которым управляют два регистра-защелки делителя.
(десятичный) |
байт | байт | |
Предположим, например, что требуется скорость коммуникации 9600 бит/с. Тогда для ее получения необходимо разделить 115 000 на 12. "Делитель" 12 хранится в двух регистрах, управляемых битом доступа к защелке делителя (Divisor Latch Access Bit - DLAB). Делитель может быть любым 16-битовым числом, т.е. от 0 до 65 535. Микросхема UART имеет 8-битовую шину данных, поэтому используются два регистра.
Первый регистр (База + 0, когда DLAB = 1) сохраняет младший байт защелки делителя, а второй регистр (База + 1, когда DLAB = 1) сохраняет старший байт защелки делителя.
В таблице приведены некоторые распространенные значения скорости коммуникации
и требуемое для их получения содержание старшего и младшего байта защелки
делителя. Отметим, что значения делителей показаны как 16-ричные числа.
Регистр разрешения прерывания (IER)
Зарезервирован | |
Зарезервирован | |
Разрешает маломощный режим (16750) | |
Разрешает режим "засыпания" (sleep) (16750) | |
Разрешает прерывание по состоянию модема | |
Разрешает прерывание по приемной линии | |
Разрешает прерывание по пустому регистру хранения передатчика | |
Разрешает прерывание по доступности принятых данных |
Регистр разрешения прерывания (Interrupt Enable Register - IER) является самым простым регистром микросхемы UART. Установка бита 0 в 1 разрешает прерывание по доступности принятых данных UART генерирует прерывание, когда приемный регистр приемника или буфер FIFO содержат данные, подлежащие считыванию процессором.
Бит 1 разрешает прерывание по пустому регистру хранения передатчика (Transmit Holding Register - THR). Микросхема UART формирует запрос прерывания процессора, буферный регистр передатчика пустой.
Бит 2 разрешает прерывание по состоянию приемной линии. Микросхема UART
формирует прерывание процессора, когда изменяется состояние приемной линии.
Аналогично бит 3 разрешает прерывание по состоянию модема. Биты 6 и 7
зарезервированы, а биты 4 и 5 позволяют экономить потребляемую мощность.
Регистр идентификации прерывания (IIR)
Нет FIFO | |||
FIFO разрешено, но не используется | |||
FIFO разрешено | |||
64-байтовое FIFO разрешено (16750) | |||
Зарезервирован | |||
Зарезервирован в 8250, 16450 | |||
Ожидает прерывание таймаута 16550 | |||
Прерывание по состоянию модема | |||
Прерывание по
пустому регистру хранения передатчика | |||
Прерывание по
доступности принятых данных | |||
Прерывание по
состоянию приемной линии | |||
Есть ожидающее прерывание | |||
Нет ожидающего прерывания |
Регистр идентификации прерывания (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)
Уровень запуска прерывания | |||
1 байт | |||
4 байта | |||
8 байтов | |||
14 байтов | |||
Разрешение 64-байтового FIFO (16750) | |||
Зарезервирован | |||
Выбор режима DMA. Изменение
состояния контактов RXRDY и TXRDY с режима 1 на режим 2. | |||
Очистка передающего FIFO | |||
Очистка приемного FIFO | |||
Разрешение 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)
Бит доступа к защелке делителя | ||||
Доступ к буферу приемника, буферу передатчика и регистру разрешения прерывания | ||||
Установка разрешения разрыва | ||||
Выбор паритета | ||||
Нет паритета | ||||
Нечетный паритет | ||||
Четный паритет | ||||
Высокий уровень (sticky) | ||||
Низкий уровень (sticky) | ||||
Длина стопового бита | ||||
Один стоповый бит | ||||
2 стоповых бита для слов длиной 6, 7 или 8 битов или 1.5 стоповых бита для слова 5 битов | ||||
Длина слова | ||||
5 битов | ||||
6 битов | ||||
7 битов | ||||
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)
Зарезервирован | |
Зарезервирован | |
Разрешение автоматического управления потоком (16750) | |
Режим закольцовывания | |
Дополнительный выход 2 | |
Дополнительный выход 1 | |
Форсирование Request to Send | |
Форсирование 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)
Ошибка в приемном FIFO | |
Пустые регистры хранения данных | |
Пустой регистр хранения передатчика | |
Прерывание по разрыву | |
Ошибка кадра | |
Ошибка паритета | |
Ошибка перегрузки | |
Готовность данных |
Регистр состояния линии (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)
Обнаружение несущей (Carrier Detect) | |
Индикатор звонка (Ring Indicator) | |
Готовность модема (Data Set Ready) | |
Сброс для передачи (Clear To Send) | |
Дельта Data Carrier Detect | |
Задний фронт индикатора звонка | |
Дельта Data Set Ready | |
Дельта 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.