Когда DTE может принять данные, он подает сигнал по линии RTS. Если при этом DCE готово для принятия данных, оно возвращает сигнал CTS. Если напряжение на линиях RTS и CTS падает, то это сообщает передающей системе, что получающая система не готова для приема данных.
Однако на практике не все так просто. Соединить компьютер и модем не составляет труда, т. к. интерфейс RS-232C как раз для этого и предназначен. Но если вы захотите связать вместе два компьютера при помощи такого же кабеля, который вы использовали для связи модема и компьютера, то у вас возникнут проблемы. Для соединения двух терминальных устройств — двух компьютеров — как минимум необходимо перекрестное соединение линий TR и RD. Однако часто этого недостаточно, т. к. для устройств DTE и DCE функции, выполняемые линиями DSR, DTR, DCD, CTS, RTS асимметричны.
Устройство DTE подает сигнал DTR и ожидает получения сигналов DSR и DCD. В свою очередь, устройство DCE подает сигналы DSR, DCD и ожидает получения сигнала DTR. Таким образом, если соединить вместе два устройства DTE кабелем, который вы использовали для соединения устройств DTE и DCE, то они не смогут договориться друг с другом.
Теперь перейдем к сигналам RTS и CTS, управления потоком данных. Иногда для соединения двух устройств DTE эти линии соединяют вместе на каждом конце кабеля. В результате получаем то, что другое устройство всегда готово для получения данных. Поэтому, если при большой скорости передачи принимающее устройство не успевает принимать и обрабатывать данные, возможна потеря данных.
Чтобы решить все эти проблемы для соединения двух устройств типа DTE используется специальный кабель, в обиходе называемый null-modem.
При передаче данных на большие расстояния без использования специальной аппаратуры из-за помех, наводимых электромагнитными полями, возможно возникновение ошибок. Вследствие этого накладываются ограничения на длину соединительного кабеля между устройствами DTR-DTR и DTR-DCE.
Официальное ограничение по длине для соединительного кабеля по стандарту RS-232C составляет 15,24 метра. Однако на практике это расстояние может быть значительно больше. Оно непосредственно зависит от скорости передачи данных.
Таблица 1: Зависимость скорости передачи данных от длины соединительного кабеля
Скорость (bod) | Длина кабеля экранированного (м) | Длина кабеля неэкранированного (м) |
110 | 1524 | 914,4 |
300 | 1524 | 914,4 |
1200 | 914,4 | 914,4 |
2400 | 304,8 | 152,4 |
4800 | 304,8 | 76,2 |
9600 | 76,2 | 76,2 |
Уровни напряжения на линиях разъема составляют для логического нуля -15. – -3 В, для логической единицы +3. – +15 В. Промежуток от -3 до +3 В соответствует неопределенному значению.
Порты асинхронного адаптера. На этапе инициализации системы, модуль POST BIOS тестирует имеющиеся асинхронные порты RS-232C и инициализирует их. В зависимости от версии BIOS инициализируются первые два или четыре порта. Их базовые адреса располагаются в области данных BIOS, начиная с адреса 0000:0400h.
Первый адаптер COM1 имеет базовый адрес 3F8h и занимает диапазон адресов от 3F8h до 3FFh. Второй адаптер COM2 имеет базовый адрес 2F8h и занимает адреса 2F8h, 2FFh.
Асинхронные адаптеры могут вырабатывать прерывания:
· COM1,COM3 — IRQ4;
· COM2, COM4 — IRQ3.
Для управления портами используются 7 основных регистров:
1. Регистр данных расположен непосредственно по базовому адресу порта RS-232C и используется для обмена данными и для задания скорости обмена.
Для передачи данных в этот регистр необходимо записать передаваемый байт данных. После приема данных от внешнего устройства принятый байт можно прочитать из этого же регистра.
В зависимости от состояния старшего бита управляющего регистра (расположенного по адресу base_adr+3, где base_adr соответствует базовому адресу порта RS-232C) назначение этого регистра может изменяться. Если старший бит равен нулю, регистр используется для записи передаваемых данных. Если же старший бит равен единице, регистр используется для ввода значения младшего байта делителя частоты тактового генератора. Изменяя содержимое делителя, можно изменять скорость передачи данных.
Старший байт делителя записывается в регистр управления прерываниями по адресу base_adr+1.
Максимальная скорость обмена информацией, которую можно достичь при использовании асинхронного адаптера, достигает 115200 бод, что соответствует 14,4 Кбайт в секунду.
2. Регистр управления прерываниями используется либо для управления прерываниями от асинхронного адаптера, либо (после вывода в управляющий регистр байта с установленным в 1 старшим битом) для вывода значения старшего байта делителя частоты тактового генератора.
3. Регистр идентификации прерывания. Считывая его содержимое, программа может определить причину прерывания.
4. Управляющий регистр доступен по записи и чтению. Этот регистр управляет различными U-характеристиками UART: скоростью передачи данных, контролем четности, передачей сигнала BREAK, длиной передаваемых слов (символов).
5. Регистр управления модемом управляет состоянием выходных линий DTR, RTS и линий, специфических для модемов — OUT1 и OUT2, а также запуском диагностики, при соединенных вместе входе и выходе асинхронного адаптера.
6. Регистр состояния линии определяет причину ошибок, которые могут возникнуть при передаче данных между компьютером и микросхемой UART.
7. Регистр состояния модема определяет состояние управляющих сигналов, передаваемых модемом асинхронному порту компьютера.
Первое, что должна сделать программа, работающая с асинхронным адаптером — установить формат и скорость передачи данных. После загрузки операционной системы для асинхронных адаптеров устанавливается скорость 2400 бод, не выполняется проверка на четность, используются один стоповый и восьмибитовая длина передаваемого символа. Можно изменить этот режим командой MS-DOS MODE.
Выполнив ввод из управляющего регистра, программа может получить текущий режим адаптера. Для установки нового режима измените нужные вам поля и запишите новый байт режима обратно в управляющий регистр.
Если вам надо задать новое значение скорости обмена данными, перед записью байта режима установите старший бит этого байта в 1, при этом регистр данных и управляющий регистр используются для задания скорости обмена. Затем последовательно двумя командами ввода загрузите делитель частоты тактового генератора. Младший байт запишите в регистр данных, а старший — в регистр управления прерываниями.
Перед началом работы необходимо также проинициализировать регистр управления прерываниями, даже если в вашей программе не используются прерывания от асинхронного адаптера. Для этого сначала надо перевести регистр данных и регистр управления прерываниями в обычный режим, записав ноль в старший бит управляющего регистра. Затем можно устанавливать регистр управления прерываниями. Если прерывания вам не нужны, запишите в этот порт нулевое значение.
После выпуска американской фирмой Hayes модемов серии Smartmodem, система команд, использованная в ней, стала неким стандартом, которого придерживаются остальные фирмы — разработчики модемов. Система команд, применяемая в этих модемах, носит название hayes-команд, или AT-команд. При этом некоторые производители, например Motorola, дополняют hayes-команды рядом своих, подходящих лишь для модемов собственного производства.
Со времени выпуска первых AT-совместимых модемов набор их команд несколько расширился, но все основные команды остались без изменения.
Все команды, передаваемые компьютером модему, надо начинать префиксом AT (ATtention — внимание) и заканчивать символом возврата каретки (<CR>). Только команда А/ и Escape-последовательность "+++" не требуют для себя префикса AT. После префикса AT могут идти одна или сразу несколько команд. Для ясности эти команды могут быть отделены друг от друга символами пробела, тире, скобками. В большинстве случаев команды могут быть написаны как заглавными, так и строчными буквами.
При передаче модему команд они сначала заносятся во внутренний буфер, который, как правило, имеет размер 40 символов. Команды, записанные в буфер модема, исполняются после поступления символа возврата каретки. Вследствие ограниченности размера буфера не следует передавать модему слишком длинные команды (больше размера буфера). Длинные команды можно разбивать на части и передавать в несколько заходов. При этом каждая часть должна начинаться префиксом АТ и заканчиваться символом возврата каретки.
Если при наборе команды допущена ошибка, то ее можно исправить, используя клавишу BackSpace.
После выполнения каждой команды модем посылает обратно компьютеру ответ в виде числа или слова. Этот ответ означает, выполнена ли команда или произошла ошибка.
Доступ к модему производится через последовательный асинхронный порт. При этом для передачи модему команд их необходимо просто записать в регистр данных COM-порта, на котором находится модем. Ответ от модема также поступает через последовательный порт. Передавая модему команды, его можно проинициализировать, перевести в режим автоответа или заставить набрать номер.
Когда модем наберет номер удаленного абонента или когда модему в режиме автоответа придет вызов, он попытается установить связь с удаленным модемом. После установления связи модем передает компьютеру через COM-порт специальное сообщение и переключится из командного режима в режим передачи данных. После этого данные, передаваемые модему, перестают восприниматься им как команды и сразу передаются по телефонной линии на удаленный модем.
Итак, после установления связи с удаленным модемом, коммуникационная программа может начинать обмен данными. Обмен данными так же, как и передача команд, осуществляется через COM-порт. Затем при помощи специальной Escape-последовательности можно переключить модем из режима передачи данных обратно в командный режим и положить трубку, разорвав связь с удаленным модемом.