4. Модемы

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

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

Эти устройства, выполняющие модуляцию и демодуляцию передаваемого сигнала, называются модемами.

4.1. Типы модемов

В настоящее время выпускается огромное количество всевозможных модемов, начиная от простейших, обеспечивающих скорость передачи около 300 бит/сек, до сложных факс-модемных плат, позволяющих вам послать с вашего компьютера факс или звуковое письмо в любую точку мира. Естественно, объема данной книги не хватит для того, чтобы описать все возможные типы модемов.

В нашей книге мы коснемся только так называемых hayes-совместимых модемов. Эти модемы поддерживают разработанный фирмой Hayes набор AT-команд управления модемами. В настоящее время эти модемы широко используются во всем мире для связи персональных компьютеров IBM PC/XT/AT, PS/2 через телефонные линии.

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

К телефонной линии модем подключается либо непосредственно (через разъем RJ11-C), либо при помощи микрофона и динамика с присосками к обычной телефонной трубке. Надо заметить, что модемы, подключаемые к телефонной трубке (так называемые акустические модемы) обладает очень низким качеством и не позволяет устанавливать скорость больше чем 300 бит/сек.

Типичный модем содержит следующие компоненты: специализированный микропроцессор, управляющий работой модема; оперативную память, хранящую значения регистров модема и буферизующие входную/выходную информацию; постоянную память; динамик, позволяющий выполнять звуковой контроль связи, а также другие вспомогательные элементы (трансформатор, резисторы, конденсаторы, разъемы). Если у вас достаточно современный модем, то он скорее всего дополнительно содержит электрически перепрограммируемую постоянную память, в которой может быть сохранена конфигурация модема даже при выключении питания.

Кроме того, внутренние модемы имеют несколько переключателей и перемычек, расположенных на плате. Эти переключатели позволяют установить номер асинхронного последовательного порта ввода/вывода, к которому будет подключен модем, а также используемую им линию прерываний IRQ. Более подробно эти переключатели мы рассмотрим в следующей главе.

4.2. COM-порт и номера IRQ

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

Каждый раз, когда модем получает или передает символ, он сообщает об этом компьютеру сигналом по линии IRQ. Компьютер класса IBM PC имеет восемь таких линий, а компьютер класса IBM AT - шестнадцать. Как правило, COM1 и COM3 используют IRQ4, а COM2 и COM4 - IRQ3. Однако некоторые внутренние модемы позволяют отдельно установить номер COM-порта и номер IRQ. Например, вы можете использовать COM3 и IRQ5.

Вы можете использовать COM1 и COM2 или COM3 и COM4 одновременно, так как они имеют различные линии IRQ. Если вам надо одновременно иметь три или больше COM-портов, то вам необходимо использовать другие IRQ (не только IRQ3 и IRQ4). Лучше всего использовать для этих целей IRQ5 и IRQ7. Линия IRQ7 предназначена для принтера и используется только программами фоновой печати, а IRQ5 - для жесткого диска.

Если вам не надо использовать одновременно три или больше COM-портов, то лучше использовать IRQ3 и IRQ4 для всех ваших COM-портов. Таким образом вы избавите себя от неприятностей с коммуникационными программами, которые не позволяют отдельно задавать номер линии IRQ и используют только IRQ3 и IRQ4.

Кроме определенного IRQ за каждым COM-портом закреплен адрес порта, через который программы могут взаимодействовать с ним. Существует четыре зарезервированных адреса - 3F8H, 2F8H, 3E8h и 2E8h, используемых для COM-портов на машинах всех фирм-производителей. В большинстве внутренних модемов специальные перемычки задают одновременно номер COM-порта, на который устанавливается модем и используемый им номер IRQ.

Существует некое несоответствие в том, как BIOS определяет адреса регистров данного COM-порта. Если во время операции начальной загрузки (POST) BIOS не обнаружит регистров асинхронного адаптера с базовым адресом 3F8h (обычно являющегося портом COM1), но обнаружит их по адресу 2F8h (обычно являющегося портом COM2), то он определит его как порт COM1. В добавление к этому для порта COM1 зарезервирована линия IRQ4, а для COM2 - IRQ3. Так что если вы используете для работы с данным COM-портом функции Basic, Pascal или DOS, то может возникать несоответствие между номером COM-порта, номером линии IRQ и базовым адресом регистров. Таким образом, используйте следующее правило - "не устанавливайте COM2 без COM1".

Ниже мы приводим адреса первых четырех COM-портов и номера линий IRQ, которые они обычно используют:

Номер COM порта Используемые адреса Номер IRQ
COM1 3F8h - 3FFh IRQ4
COM2 2F8h - 2FFh IRQ3
COM3 3E8h - 3EFh IRQ4
COM4 2E8h - 2EFh IRQ3

Теперь мы приведем небольшую программу, определяющую, какие последовательные адаптеры установлены на вашем компьютере. Данная программа сначала отображает на экране адреса COM-портов, определенные в переменных BIOS, а затем проверяет наличие последовательных портов по адресам 3F8h, 2F8h, 3E8h, 2E8h. Для этого производится запись с последующим считыванием в управляющий регистр для каждого предполагаемого порта. Если записанное и считанное значения совпадают, значит, COM-порт по данному адресу существует.

Итак, текст программы:

// COM_PORT.C

#include "sysp_com.h"

void main(void) {

   unsigned adr;
   int port;

   printf(" Программа определения адресов асинхронных портов.\n\n");

   printf(" Определяем адреса портов по области переменных BIOS:\n\n");

   // смотрим адрес каждого из четырех COM-портов в области
   // переменных BIOS

   for( port = 0; port < 4; port++ ) {

      // определяем адрес порта port

      adr = com_address( port ); 

      if( adr != 0 )
         printf("\n    COM%d - базовый адрес %Xh", port + 1, adr );

      // если соответствующая переменная BIOS содержит
      // нулевое значение считаем, что порт отсутствует

      else
         printf("\n    COM%d - отсутствует", port + 1);
   }


   // проверяем все зарезервированные базовые адреса
   // последовательных портов - 3F8h, 2F8h, 3E8h, 2E8h.

   printf("\n\n Тестируем зарезервированные адреса для регистров COM портов:\n\n");

   for( port = 0; port < 4; port++ ) {

      int port_address[] = { 0x3F8, 0x2F8, 0x3E8, 0x2E8 };

      // определяем адрес порта port

      adr = port_address[port];

      printf("    COM-порт с базовым адресом %Xh %s\n", adr,
            ( test_com( adr ) == 0 )? "отсутствует": "обнаружен");
   }
}
// TEST_COM.C

#include "sysp_com.h"

/**
*.Name         test_com
*
*.Title        Определяет наличие последовательного порта.
*
*.Descr        Эта функция определяет наличие последовательного
*              асинхронного порта по заданному базовому адресу.
*
*.Proto        int  test_com( unsigned base_adr );
*
*.Params       unsigned base_adr - базовый адрес предполагаемого
*              асинхронного адаптера.
*
*.Return       Если порт не установлен, возвращается 1,
*              если порт отсутствует, то возвращается 0.
*
*.Sample       test_com.c
**/

int test_com( unsigned base_adr ) {

   unsigned  save_reg;

   // определяем наличие асинхронного порта по заданному базовому
   // адресу путем записи с последующим чтением и сравнением
   // содержимого управляющего регистра

   // сохраняем содержимое управляющего регистра

   save_reg = inp( base_adr + LCR_N );

   // производим запись с последующим сравнением числа 0xA5
   // в управляющий регистр

   outp( base_adr + LCR_N, 0xA5 );
   if( 0xA5 != inp( base_adr + LCR_N ) )
      return( 0 );

   // производим запись с последующим сравнением числа 0x5A
   // в управляющий регистр

   outp( base_adr +  LCR_N, 0x5A );
   if( 0x5A != inp( base_adr + LCR_N ) )
      return( 0 );

   // восстанавливаем содержимое управляющего регистра

   outp( base_adr + LCR_N, save_reg );

   return( 1 );
}

Предупреждение!

Несколько COM-портов с различными номерами могут использовать одну и ту же линию IRQ. Если у вас есть несколько устройств, использующих одну линию IRQ, то вам надо соблюдать осторожность.

Обычно модем не может разделять IRQ с устройствами, программное обеспечение которых остается резидентным. Например, вы не должны устанавливать модем на линию IRQ, которая используется мышью. Если на вашем компьютере наблюдается конфликт по линии IRQ, советуем вам переустановить IRQ одного из конфликтующих устройств.

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

4.3. Подключение модема к компьютеру и телефонной сети

Итак, способ подключения модема к компьютеру зависит от того, внутренний модем вы имеете или внешний.

В случае внешнего модема вы должны просто подключить его к какому-либо COM-порту вашего компьютера. Если же компьютер не имеет COM-порта (что очень маловероятно), то вам необходимо его специально приобрести.

Затем подключите питание к модему. Большинство внешних модемов поставляются с отдельным блоком питания, который вам надо подключить к местной электросети.

Если же у вас внутренний модем, то надо установить его на материнской плате компьютера в любой свободный слот. Затем надо подключить модем к телефонной линии и к телефону, если вы хотите также использовать эту телефонную линию для передачи голосовых сообщений (т.е. пользоваться телефоном). Для подключения модема к телефонной линии и телефону на задней панели модема имеется два разъема RJ11-C. Один разъем обозначен как "LINE" и подключается к телефонной линии, а другой - как "PHONE", и в него вы можете вставить разъем телефона.

Как правило, с модемом поставляется специальный кабель для подключения модема к телефонной линии. Здесь следует отметить, что разъем RJ11-C не подходит к стандартным телефонным розеткам, используемым в нашей стране. Кроме того, разъем RJ11-C имеет четыре линии, а обычная городская телефонная линия только две. Если у вас нет специального переходника, вы можете изготовить его сами (из кабеля, поставляемого с модемом и обычной телефонной вилки и розетки) в соответствии со следующим рисунком:

Согласно рисунку, вам надо подключить к телефонной линии (телефону) два средних провода. Оставшиеся два провода надо оставить неподключенными.

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

Если все нормально, включите питание компьютера и модема (в случае внешнего модема) и проверьте работу телефона. Если телефон не работает, проверьте разъемы и кабели. Если они в порядке, обратитесь к документации модема, возможно, что модем неисправен.

Затем вы можете приступить собственно к проверке самого модема. Для этого вам надо запустить любую коммуникационную программу (MTE, BITCOM, COMIT), находящуюся в вашем распоряжении, и попытаться связаться с другим модемом. Обычно такие программы поставляются вместе с модемом.

4.4. Режимы работы модемов

Модем может работать в двух основных режимах - командном режиме и режиме обмена данными. Как видно из названия, в режиме обмена данными он может принимать и передавать данные между компьютером и удаленным модемом. При этом компьютер принимает и передает данные от модема через асинхронный порт (COM-порт), на котором установлен модем.

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

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

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

Модем переходит из режима передачи данных в командный режим в следующих случаях:

4.5. Система команд hayes-модемов

После выпуска американской фирмой Hayes модемов серии Smartmodem, система команд, использованная в ней, стала неким стандартом, которого придерживаются остальные фирмы - разработчики модемов. Система команд, примененная в этих модемах, носит название hayes-команд, или AT-команд.

Со времени выпуска первых AT-совместимых модемов набор их команд несколько расширился, но основные команды остались без изменения.

Мы рассмотрим сначала расширенный набор AT-команд, а затем в главе "Протоколы коррекции ошибок нижнего уровня" дополнительные команды, применяемые в модемах с аппаратной коррекцией ошибок.

Расширенный набор AT-команд

Все команды, передаваемые компьютером модему, надо начинать префиксом AT (ATtention - внимание), At, at, aT и заканчивать символом возврата каретки (<CR>). Только команда A/ и Escape-последовательность "+++" не требуют для себя префикса AT.

После префикса AT могут идти одна или сразу несколько команд. Для ясности эти команды могут быть отделены друг от друга символами пробела, тире, скобками. В большинстве случаев команды могут быть написаны как заглавными, так и строчными буквами.

При передаче модему команд они сначала заносятся во внутренний буфер, который, как правило, имеет размер 40 символов. Команды, записанные в буфер модема, исполняются после поступления символа возврата каретки (<CR>). Вследствие ограниченности размера буфера не следует передавать модему слишком длинные команды (больше размера буфера). Длинные команды можно разбивать на части и передавать в несколько заходов. При этом каждая часть должна начинаться префиксом AT и заканчиваться символом возврата каретки.

Если вы допустили ошибку при наборе команды, то ее можно исправить, используя клавишу Backspace.

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

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

По этим индикаторам вы можете узнать, в каком состоянии находится модем: занимает ли он телефонную линию, передает или принимает данные. Ниже мы приведем их названия и краткое описанние:

MR Modem Ready Модем готов к обмену данными. Если этот индикатор не горит, то надо проверить линию питания модема
TR Terminal Ready Компьютер готов к обмену данными с модемом Этот индикатор горит, когда модем получил от компьютера сигнал DTR.
CD Carrier Detect Индикатор зажигается, когда модем обнаружил несущую частоту на линии. Индикатор должен гореть на протяжении всего сеанса связи и гаснуть, когда один из модемов освободит линию (положит трубку)
SD Send Data Индикатор мигает, когда модем получает данные от компьютера
RD Receave Data Индикатор мигает, когда модем передает данные компьютеру
HS High Speed Модем работает на максимально возможной для него скорости
AA Auto Answer Модем находится в режиме автоответа. То есть модем автоматически будет отвечать на приходящие звонки. Когда модем обнаружит звонок (вызов) на телефонной линии, этот индикатор замигает
OH Off-Hook Этот индикатор горит, когда модем снял трубку (занимает линию)

Теперь мы приведем описание расширенной системы команд hayes-модемов. Команды приведены в алфавитном порядке. Для каждой команды дано ее краткое описание и рекомендации по ее использованию.

AT - начало (префикс) командной строки. После получения этой команды модем автоматически подстраивает скорость передачи и формат данных к параметрам компьютера.

A - автоответ. Если режим автоматического ответа выключен (регистр S0 = 0), команда используется для ответа на звонок от удаленного модема. Команда заставляет модем снять трубку (подключиться к линии) и установить связь с удаленным модемом.

A/ - модем повторяет последнюю введенную команду. Команда передается на модем без префикса AT и исполняется модемом немедленно, не ожидая прихода символа возврата каретки <CR>. Если вы передадите модему строку AT A/ <CR>, то модем укажет на ошибку и вернет слово ERROR.

Bn - команда производит выбор стандарта, согласно которому будет происходить обмен данными между модемами. При скорости передачи 300 бит/с происходит выбор между стандартами BELL 103 и CCITT V.21, при скорости 1200 бит/с - между BELL 212A и CCITT V.22 bis. При скорости 2400 бит/с эта команда игнорируется и используется стандарт CCITT V.22. Если n = 0, устанавливаются стандарты CCITT V.21/V.22, а если n = 1 - стандарты BELL 103/212A.

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

  P или T. Эти модификаторы производят выбор между импульсной и тоновой системой набора номера (в нашей стране используется импульсная система, если вы будете использовать префикс T, то АТС не сможет вас соединить). Импульсная система означает, что цифры телефонного номера, идущие после символа P, модем должен набирать импульсами (символы 0..9). Тоновая система означает, что цифры телефонного номера, идущие после символа T, модем должен набирать частотными сигналами (разрешено использовать символы 0..9, A..D,* ,#).

  , Символ запятой вызывает паузу при наборе номера. Длительность паузы определяется содержимым регистра S8.

  ; Символ точки с запятой, если он находится в конце командной строки набора номера, переводит модем после набора номера в командный режим.

  @ Модем ожидает пятисекундной тишины на линии в течение заданного промежутка времени. Промежуток времени, в течение которого модем ожидает тишины, задается в регистре S7. Если в течение этого времени паузы тишины не было, модем отключается и отвечает NO ANSWER.

  ! Если знак ! стоит перед знаками последовательности набора, модем переходит в состояние ON HOOK (кладет трубку) на 0,5 секунды, а затем снова переходит в состояние OFF HOOK (снимает трубку).

  S Модем набирает телефонный номер, записанный в его памяти. Эта команда выполняется только для модемов, имеющих встроенную энергонезависимую память и возможность записи в нее номеров телефонов (смотри команду &Zn).

  R После набора номера переводит модем в режим автоответа. Этот модификатор должен находиться в конце набираемого номера.

  W Перед дальнейшим набором телефонного номера модем ожидает длинный гудок из линии. Причем время ожидания гудка содержится в регистре S7. Если в отведенное время гудок не появился, модем прекращает набор номера и возвращает сообщение NO DIALTONE. Этот параметр может быть полезен при наборе междугородных номеров.

En - управление эхо-выводом команд, передаваемых модему. После команды E1 модем возвращает каждый знак, передаваемый ему, обратно компьютеру, что позволяет узнать, как работает связь модема и компьютера. Команда E0 запрещает эхо-вывод.

Fn - переключение между дуплексным/полудуплексным режимами. При n = 0 модем переходит в полудуплексный режим, а при n = 1 - в дуплексный.

Hn - Эта команда используется для управления телефонной линией. Если n = 0, то происходит отключение модема от линии, если n = 1, модем подключается к линии.

In - выдает идентификационный код модема и контрольную сумму содержимого памяти модема. Если n = 0, модем сообщяет свой идентификационный код, если n = 1 модем проводит подсчет контрольной суммы ROM (EPROM) и передает ее компьютеру, n = 2, - модем проверяет состояние внутренней памяти ROM и возвращает сообщение OK или CHECKSUM ERROR (ошибка контрольной суммы). При n = 3 выдается состояние модема. Возвращаемое значение передается компьютеру через COM-порт, к которому подключен модем.

Ln - установка громкости сигнала внутреннего динамика модема. n = 0, 1 соответствует низкой громкости, n = 2 - средней и n = 3 - максимальной.

Mn - управление внутренним динамиком. При n = 0 динамик всегда выключен. При n = 1 динамик включен только во время набора номера и выключается после обнаружения несущей. При n = 2 динамик включен все время. При n = 3 динамик включается после набора последней цифры номера и выключается после обнаружения несущей отвечающего модема.

Qn - управление ответом модема на AT-команды. При n = 0 ответ разрешен, при n = 1 ответ запрещен. Независимо от состояния Q0 или Q1 модем всегда сообщает содержание S-регистров, свой идентификационный код, контрольную сумму памяти и результаты теста (команды S, I).

On - команда переводит модем из командного режима в режим передачи данных. При этом модем отвечает CONNECT. Команда О и О0 переводят модем в режим передачи данных без инициирования последовательности сигналов проверки линии связи. Команда О1 переводит модем в режим передачи данных и заставляет модем передать последовательности сигналов проверки линии связи, т.е. производить повторное квитирование с удаленным модемом.

Sr? - чтение содержимого регистра модема, имеющего номер r.

Sr = n - запись в регистр модема с номером r числа n. Число n может иметь значения от 0 до 255. Все команды модифицируют содержимое одного или более S-регистров. Некоторые S-регистры содержат временные параметры, которые можно поменять только командой S.

Vn - производит выбор вида ответа модема на AT-команды. При n = 0 ответ происходит цифровым кодом, а при n = 1 модем отвечает в символьном виде на английском языке. Использование цифровой формы ответа облегчает обработку результатов выполнения команды при написании собственных программ управления модемом.

  Цифровой код результата оканчивается символом перевода строки, а символьный код начинается и заканчивается символами перевода строки и возврата каретки.

Стандартный набор ответов модема

Ответ в символьном виде Ответ цифровым кодом Значение ответа
OK 0 Модем выполнил команду без ошибок
CONNECT 1 Модем установил связь со скоростью 300 bps (после выполнения команд X1, X2, X3, X4) или со скоростью 600, 1200, 2400 bps (после выполнения команды X0)
RING 2 Модем обнаружил сигнал звонка на телефонной линии. Это сообщение модем передает компьютеру каждый раз, когда по телефонной линии поступает сигнал вызова (звонок)
NO CARRIER 3 Модем потерял несущую или не получил ответ от удаленного модема
ERROR 4 Ошибка в командной строке, командный буфер переполнен или ошибка в контрольной сумме (команда I2)
CONNECT 1200 5 Модем установил связь со скоростью 1200 bps, (смотри команды X1, X2, X3, X4)
NO DIALTONE 6 Отсутствие сигнала станции при снятии трубки (смотри команды X2, X4)
BUSY 7 Модем обнаружил сигнал"занято" после набора номера
NO ANSWER 8 Ответ получается в случае использования в командной пятисекундной тишины
CONNECT 600 9 Модем установил связь со скоростью 600 bps (смотри команды X1, X2, X3, X4)
CONNECT 2400 10 Модем установил связь со скоростью 2400 bps (смотри команды X1, X2, X3, X4)

Xn - определяет набор сообщений модема, управляет определением сигнала "занято" и наличием гудков на линии.

Сообщение Скорость, bps
CONNECT 300
CONNECT 600 600
CONNECT 1200 1200
CONNECT 2400 2400

  Номер набирается модемом после паузы, вне зависимости от присутствия гудка на линии. Состояние "занято" не определяется.

Ниже приводится таблица с возможными сообщениями от модема для каждой X-команды:

Сообщение Команды
X0 X1 X2 X3 X4


Смысл
CONNECT + + + + + соединение
RING + + + + + пришел звонок
NO CARRIER + + + + + потеря или неудачная попытка связи
ERROR + + + + + ошибка в команде, неправильная команда
CONNECT 1200 + + + + соединение на скорости 1200
NO DIALTONE + + после снятия модемом телефонной трубки не обнаружен сигнал коммутатора (длинный гудок)
BUSY + + номер занят
NO ANSWER + + + при использовании команды @, модем не обнаружил пятисекундной паузы (тишины) на линии или вызываемый модем не отвечает

Yn - способ отключения модема от линии. Существуют два способа отключения модема от линии: стандартный, когда модем получает неактивный сигнал DTR от компьютера, и принудительный, когда модем получает от удаленного модема сигнал перерыва BREAK. Команда ATH0 направляет удаленному модему сигнал перерыва BREAK, который длится 4 s. При n = 0 модем отключается стандартно (см. команду &D). При n = 1 модем отключается после получения из линии сигнала BREAK.

Z - сбрасывает конфигурацию модема. При этом во все регистры загружаются значения, принятые по умолчанию. Значения регистров, принятые по умолчанию берутся из энергонезависимой памяти модема или, если модем такой памяти не имеет, из постоянной памяти или определяется исходя из состояния переключателей на плате модема.

+++ - Escape-последовательность, используемая для перехода в командный режим работы модема. Благодаря этой команде можно перейти из режима передачи данных модемом в командный режим работы без разрыва связи. Модем требует тишины перед и после направления этой Escape-последовательности. Величина этого промежутка тишины определена в регистре S12 (в заводской установке S12 = 50 - 1 секунда). Десятичную величину знака ASCII, который является знаком последовательности выхода, содержит регистр S2 (в заводской установке S2 = 43, т.е. '+').

&Cn - данная команда управляет сигналом DCD порта RS-232-C. При n = 0 сигнал DCD всегда активен, а при n = 1 сигнал DCD устанавливается только тогда, когда модем обнаруживает несущую частоту от удаленного модема.

&Dn - управление сигналом DTR. При n = 0 - модем игнорирует DTR, n = 1 при потере сигнала DTR модем переходит в командный режим работы, n = 2 - при потере сигнала DTR модем прекращает связь, отключается от линии, отключает режим автоответа и переходит в командный режим работы, n = 3 - при потере сигнала DTR автоматически сбрасывается конфигурация модема, как при выполнении команды ATZ. Модем обнаруживает потерю сигнала DTR, если сигнал DTR отсутствует дольше времени, определенного в регистре модема S25.

&F - Модем устанавливает конфигурацию, записанную в постоянной памяти.

&Gn - включение/выключение защитной частоты: n = 0 - защитная частота выключена, n = 1 - модем генерирует защитную частоту 550 Hz, n = 2 - модем генерирует защитную частоту 1800 Hz. Использование данной команды зависит от особенностей телефонной линии.

&Ln - вид линии связи. При n = 0 передача по обычным телефонным (коммутируемым) линиям связи, n = 1 - передача по выделенным каналам связи.

&Mn - установка асинхронного/синхронного режима работы. При n = 0 устанавливается асинхронный режим; при n = 1, 2, 3 устанавливается синхронный режим. Особенности использования данной команды вы можете посмотреть в описании модема.

&Pn - установка импульсного коэффициента набора номера в соответствии с различными стандартами. При n = 0 - коэффициент заполнения замыкание/интервал 39/61 (американский стандарт), n = 1 - коэффициент заполнения замыкание/интервал 33/67% (английский стандарт).

&Rn - управление сигналом CTS: n = 0 - сигнал CTS переходит в активное состояние после получения сигнала RTS. Данные, передаваемые модему до поступления сигнала RTS, игнорируются. Если n = 1, модем игнорирует RTS. Во время асинхронной передачи данных (команда &M0) сигнал CTS всегда активен. Особенности использования данной команды вы можете посмотреть в описании модема.

&Sn - управление сигналом DSR порта RS-232-C. При n = 0 сигнал DSR активен всегда, пока модем включен, а при n = 1 сигнал DSR активизируется только после окончания этапа установления связи между модемами (квитирования).

&Tn - используется для тестирования модема.

С помощью команды &T0 можно прервать выполнение теста модема в любой момент. Если модем выполняет локальный аналоговый тест или удаленный цифровой тест, то перед передачей команды &T0 надо с помощью Escape-последовательности перевести модем в командный режим.

По команде &T1 модем начинает выполнять локальный аналоговый тест. Продолжительность теста определяется регистром S18. В ходе локального аналогового теста проверяется и модем и компьютер:

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

Команда &T4 дает согласие на начало удаленного цифрового теста, который запрашивает удаленный модем.

Команда &T5 не дает согласия удаленному модему на начало удаленного цифрового теста.

Команда &T6 вызывает выполнение удаленного цифрового теста. При этом происходит проверка локального компьютера, локального модема удаленного модема и линии связи:

По команде &T7 модем выполняет удаленный цифровой тест с самодиагностикой. Модем сам генерирует тестовые сообщения и подсчитывает число ошибок.

По команде &T8 - локальный аналоговый тест с самодиагностикой. При этом модем сам генерирует тестовые сообщения и подсчитывает число ошибок.

&V - модем показывает свою текущую конфигурацию и телефонные номера, записанные в энергонезависимой памяти.

&W - модем записывает свою текущую конфигурацию в энергонезависимую память. При сбросе модема будет загружена именно эта конфигурация.

&Zn..... - используется для записи телефонного номера в энергонезависимую память модема. Количество номеров зависит от конкретной модели модема.

  Например, для записи в энергонезависимую память номера 325-48-17 можно передать модему следующую команду:

AT &Z1 3254817

  Тогда для набора этого номера можно передать модему следующую команду:

AT DP S=1

4.6. Регистры модемов

Hayes-совместимые модемы имеют набор регистров, определяющих различные характеристики модема. Содержимое большинства этих регистров можно считывать и изменять программным способом. Как мы рассказали в предыдущей главе, для чтения и записи регистров модема можно использовать соответственно AT-команды ATSr? и ATSr = n, где r - номер регистра, а n - число, которое в него записывается.

Ниже мы даем описание 28 регистров модема. Для каждого регистра мы приводим его описание, диапазон возможных значений и значение, записываемое в него по умолчанию.

S0 (0..255) Регистр управляет режимом автоответа. Регистр задает количество звонков, которое модем ждет до ответа на вызов. Если S0 = 0, то режим автоответа выключен. Когда режим автоответа выключен и приходит звонок, чтобы снять трубку, надо специально передать модему команду ATA. Содержимое регистра сохраняется в энергонезависимой памяти (если, конечно, она есть у вашего модема).

S1 - Счетчик сигналов звонка. Значение регистра увеличивается каждый раз, когда модему поступает сигнал звонка из телефонной линии. По истечении восьми секунд с момента последнего звонка содержимое регистра сбрасывается. Значение регистра не сохраняется в энергонезависимой памяти.

S2 (0..255) - Данный регистр содержит ASCII-код Escape-символа, используемого в последовательности перехода в командный режим ("+++"). Обычно он имеет значение 43, что соответствует ASCII символу '+'. Вы можете переопределить Escape-символ, записав в этот регистр ASCII-код другого символа. В случае, если значение регистра S2 больше чем 127, происходит блокировка последовательности возврата. При этом вы не сможете переключиться из режима передачи данных в командный режим без потери связи с удаленным модемом. Содержимое регистра не сохраняется в энергонезависимой памяти.

S3 (0..127) - Регистр содержит ASCII-код символа возврата каретки - <CR>. По умолчанию регистр содержит ASCII-код 13 (Control-M). Вы можете переопределить этот символ, записав в регистр новое значение. Содержимое регистра не сохраняется в энергонезависимой памяти. Это гарантирует, что после выключения питания вы снова сможете использовать символ с ASCII-кодом, равным 13, для ввода команд.

S4 (0..127) - Регистр содержит ASCII-код символа перевода строки - <LF>. По умолчанию регистр содержит ASCII-код 10 (Control-J). Вы можете переопределить этот символ, записав в регистр другое значение. При задании S4 = 0 символ <LF> не используется. Содержимое регистра не сохраняется в энергонезависимой памяти.

S5 (0..127) - Регистр содержит ASCII-код символа Backspace (возврат на один символ назад). По умолчанию регистр содержит ASCII-код 8 (Control-H). Вы можете переопределить этот символ, записав в регистр новое значение. Заметим, однако, что если вы запишете в регистр ASCII-код от 31 до 127, то вы не сможете использовать символ с этим кодом в командном режиме. Содержимое регистра не сохраняется в энергонезависимой памяти.

S6 (2..255) - Определяет время в секундах, в течении которого при снятии трубки на линии должен появиться гудок . По умолчанию регистр содержит значение два. В энергонезависимой памяти регистр не сохраняется.

S7 (1..255) - Определяет время в секундах после набора номера, в течение которого модем должен выполнить соединение (обнаружить несущую частоту от удаленного модема). По умолчанию регистр содержит значение 30. Если в течение этого времени модем установит связь, он выдает сообщение CONNECT согласно команде ATXn. Если связь не будет установлена, модем отвечает NO CARRIER. В энергонезависимой памяти регистр не сохраняется.

S8 (0..255) - Время задержки при наборе номера (в секундах), которая происходит по модификатору ',' команды ATD. По умолчанию время задержки две секунды. В энергонезависимой памяти регистр не сохраняется.

S9 (1..255) Определяет время, в течение которого для установки связи должна приниматься несущая частота от удаленного модема. Если несущая принималась в течение этого времени, модем передает компьютеру сигнал DCD. Содержимое регистра задает время в десятых долях секунды. По умолчанию для установки DCD модем должен принимать несущую 0,6 секунды, то есть регистр содержит число 6. В энергонезависимой памяти значение регистра не сохраняется.

S10 (1..255) Определяет промежуток времени, в течение которого может отсутствовать несущая от удаленного модема и при этом не произойдет разрыв связи. Содержимое регистра задает время в десятых долях секунды. По умолчанию несущая частота может отсутствовать 0,7 секунды, то есть регистр содержит число 7. В энергонезависимой памяти значение регистра не сохраняется. Заметим, что значение регистра S10 должно быть больше значения регистра S9, иначе связь будет невозможно установить.

S11 (50..255) Используется при наборе номера по тоновой системе. Регистр определяет длительность (в миллисекундах) передачи одной цифры номера и промежутка между ними. Значение регистра не оказывает влияния на набор номера в импульсном режиме. В импульсном режиме модем набирает номер со скоростью 10 импульсов в секунду.

S12 (20..255) Регистр определяет задержку, которую необходимо выдержать при передаче модему Escape-последовательности "+++" для перевода модема из режима передачи данных в командный режим. Регистр задает временной промежуток в 0,02 сотых секунды. По умолчанию регистр содержит 50.

S13 - Регистр не используется.

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

S14 - состояние модема.

 7 6 5 4 3 2 1 0
--T-T-T-T-T-T-T-¬
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
LT+T+T+T+T+T+T+T-
 ¦ ¦ ¦ ¦ ¦ ¦ ¦ L== Не используется
 ¦ ¦ ¦ ¦ ¦ ¦ ¦
 ¦ ¦ ¦ ¦ ¦ ¦ L==== Эхо-вывод. При D1 = 0 эхо-вывод не
 ¦ ¦ ¦ ¦ ¦ ¦       выполняется, при D1 = 1 выполняется
 ¦ ¦ ¦ ¦ ¦ ¦
 ¦ ¦ ¦ ¦ ¦ L====== Управление ответом модема; при D2 = 0
 ¦ ¦ ¦ ¦ ¦         вывод разрешен, при D2 = 1 - запрещен.
 ¦ ¦ ¦ ¦ ¦
 ¦ ¦ ¦ ¦ L======== Управление формой ответа модема. Если
 ¦ ¦ ¦ ¦           данный бит равен нулю, ответ выполняется
 ¦ ¦ ¦ ¦           в сокращенной (цифровой) форме. В
 ¦ ¦ ¦ ¦           противном случае модем отвечает словами
 ¦ ¦ ¦ ¦           на английском языке
 ¦ ¦ ¦ ¦
 ¦ ¦ ¦ L========== Не используется
 ¦ ¦ ¦
 ¦ ¦ L============ Система набора номера. При D4 = 0 модем
 ¦ ¦               использует тоновую систему, а при
 ¦ ¦               D4 = 1 - импульсную
 ¦ ¦
 ¦ L============== Не используется
 ¦
 L================ Данный бит отражает текущее состояние
                   модема. При D7 = 0 модем находится в
                   состоянии ответа, а при D7 = 1 - в
                   состоянии вызова другого модема

S15 - Не используется.

S16 - Параметры тестирования модема.

S17 - Не используется.

S18 (0..255) - Данный регистр задает длительность теста модема в секундах.

S19 - Не используется.

S20 - Не используется.

S21 - Регистр имеет различные форматы для модемов различных фирм-изготовителей.

 7 6 5 4 3 2 1 0
--T-T-T-T-T-T-T-¬
¦ ¦ ¦ ¦   ¦ ¦ ¦ ¦
LT+T+T+T+T+T+T+T-
 ¦ ¦ ¦ LT- ¦ ¦ L== Тип используемого для телефонной
 ¦ ¦ ¦  ¦  ¦ ¦     линии разъема
 ¦ ¦ ¦  ¦  ¦ ¦
 ¦ ¦ ¦  ¦  ¦ L==== Не используется
 ¦ ¦ ¦  ¦  ¦       
 ¦ ¦ ¦  ¦  L====== Управление сигналами RTS/CTS
 ¦ ¦ ¦  ¦          
 ¦ ¦ ¦  L========= Управление сигналом DTR
 ¦ ¦ ¦
 ¦ ¦ L============ Управление сигналом DCD
 ¦ ¦
 ¦ L============== Управление сигналом DSR
 ¦
 L================ Управление режимом разрыва связи по тайм-
                   ауту (по истечении лимита времени при
                   потере несущей)

S22 - Регистр управляет выбором набора ответов модема и динамиком.

 7 6 5 4 3 2 1 0
--T-T-T-T-T-T-T-¬
¦ ¦     ¦   ¦   ¦
LT+T+-+T+T+T+T+T-
 ¦ L=T=- LT- L=¦
 ¦   ¦    ¦    L== Эти биты устанавливают уровень громкости
 ¦   ¦    ¦        на встроенном динамике модема:
 ¦   ¦    ¦           00 - не используется;
 ¦   ¦    ¦           01 - низкий уровень звука;
 ¦   ¦    ¦           10 - средний уровень звука;
 ¦   ¦    ¦           11 - высокий уровень звука
 ¦   ¦    ¦
 ¦   ¦    L======= Управление динамиком:
 ¦   ¦                00 - динамик отключен все время;
 ¦   ¦                01 - динамик включен до момента
 ¦   ¦                     определения несущей;
 ¦   ¦                10 - динамик включен все время;
 ¦   ¦                11 - динамик включается после набора
 ¦   ¦                     номера до определения несущей
 ¦   ¦             
 ¦   L============ Данные биты определяют набор ответов,
 ¦                 используемых модемом:
 ¦                    000 - набор соответствует X0;
 ¦                    100 - набор соответствует X1;
 ¦                    101 - набор соответствует X2;
 ¦                    110 - набор соответствует X3;
 ¦                    111 - набор соответствует X4
 ¦    
 L================ Бит управляет скоростью набора номера при
                   тональной системе вызова:
                      0 - американский стандарт;
                      1 - английский (европейский) стандарт

S23 - Регистр определяет различные параметры модема:

 7 6 5 4 3 2 1 0
--T-T-T-T-T-T-T-¬
¦   ¦   ¦ ¦   ¦ ¦
LT+T+T+T+T+T+T+T-
 LT- LT- ¦ LT- ¦ 
  ¦   ¦  ¦  ¦  L== Управление удаленным тестированием
  ¦   ¦  ¦  ¦      модема. D0  = 0 - тестирование
  ¦   ¦  ¦  ¦      запрещено. D0 = 1 тестирование
  ¦   ¦  ¦  ¦      разрешено
  ¦   ¦  ¦  ¦      
  ¦   ¦  ¦  L===== Отражает скорость передачи данных
  ¦   ¦  ¦         модемом:
  ¦   ¦  ¦            00 - скорость 0..300 бит/сек;
  ¦   ¦  ¦            01 - скорость 600 бит/сек;
  ¦   ¦  ¦            10 - скорость 1200 бит/сек;
  ¦   ¦  ¦            11 - скорость 2400 бит/сек
  ¦   ¦  ¦
  ¦   ¦  L======== Не используется
  ¦   ¦
  ¦   L=========== Управление контролем четности
  ¦                передаваемых данных:
  ¦                   00 - проверка на четность;
  ¦                   01 - бит четности всегда равен 0;
  ¦                   10 - проверка на нечетность;
  ¦                   11 - бит четности всегда равен 1
  ¦                
  L=============== Устанавливает частоту защитного
                   сигнала:
                      00 - защитный сигнал не генерируется;
                      01 - защитный сигнал 550 герц;
                      10 - защитный сигнал 1800 герц;
                      11 - не используется

S24 - Не используется.

S25 - Регистр задает время задержки сигнала DTR в сотых долях секунды. Так, если регистр содержит число 5, то время задержки равно 5 * 0,001 = 0,005 секунды.

S26 - Регистр задает время между сигналами RTS и CTS в сотых долях секунды. Зависит от команды &R0.

S27 - Регистр задает различные параметры режима передачи данных модемом:

 7 6 5 4 3 2 1 0
--T-T-T-T-T-T-T-¬
¦ ¦ ¦   ¦ ¦ ¦   ¦
LT+T+T+T+T+T+T+T-
 ¦ ¦ LT- ¦ ¦ L=¦
 ¦ ¦  ¦  ¦ ¦   L== Управляет режимом передачи данных:
 ¦ ¦  ¦  ¦ ¦          00 - асинхронный;
 ¦ ¦  ¦  ¦ ¦          01 - синхронный;
 ¦ ¦  ¦  ¦ ¦          10 - синхронный с набором номера из
 ¦ ¦  ¦  ¦ ¦               памяти;
 ¦ ¦  ¦  ¦ ¦          11 - синхронный с набором номера 
 ¦ ¦  ¦  ¦ ¦               AT-командой
 ¦ ¦  ¦  ¦ ¦       
 ¦ ¦  ¦  ¦ L====== D2 = 0 при передаче по телефонной линии,
 ¦ ¦  ¦  ¦         D2 = 1 при передаче по выделенному
 ¦ ¦  ¦  ¦                каналу
 ¦ ¦  ¦  ¦         
 ¦ ¦  ¦  L======== Не используется
 ¦ ¦  ¦            
 ¦ ¦  L=========== Зарезервирован
 ¦ ¦             
 ¦ L============== Выбор протокола обмена:
 ¦                    0 - CCITT;
 ¦                    1 - Bell
 ¦                 
 L================ Не используется

4.7. Какой модем выбрать?

Рекомендации CCITT

Чтобы модемы могли обмениваться друг с другом информацией, надо чтобы они использовали одинаковые способы передачи данных по телефонным линиям. Для разработки стандартов передачи данных был создан специальный международный консультативный комитет по телеграфии и телефонии (CCITT). Ниже мы приводим рекомендации CCITT серии V.

Рекомендация CCITT Скорость передачи, бит/сек
V.21 300
V.22 1200
V.22bis 2400
V.23 600/1200
Рекомендация Bell Скорость передачи, бит/сек
Bell 103 300
Bell 212A 1200

Рассмотрим теперь данные рекомендации более подробно.

CCITT V.21

Модем, регламентированный данной рекомендацией, предназначен для передачи данных по выделенным и коммутируемым линиям.

Он работает в асинхронном дуплексном режиме. Для передачи и приема данных используется способ частотной модуляции.

CCITT V.22

Модем, работающий в соответствии с данной рекомендацией, использует асинхронно-синхронный дуплексный режим передачи данных. Асинхронно-синхронный режим означает, что компьютер передает модему данные в асинхронном режиме. Модем удаляет из потока данных компьютера стартовые и стоповые биты. И уже в синхронном виде передает их удаленному компьютеру.

Для модуляции передаваемого сигнала применяется метод дифференциальной фазовой модуляции.

CCITT V.22bis

Дуплексный модем, со скоростью передачи данных 2400 бит/сек. При передаче данных со скоростью 2400 бит/сек используется метод квадратурной модуляции, а при скорости 1200 - метод дифференциальной фазовой модуляции.

На скорости 1200 бит/сек модем CCITT V.22bis совместим с CCITT V.22.

CCITT V.23

Асинхронный модем, использующий метод частотной модуляции. Модем может работать в дуплексном режиме со скоростью передачи данных по прямому каналу - 600/1200 бит/сек, а по обратной - только 75 бит/сек. Отметим, что этот стандарт не совместим с CCITT V.21, V.22 и V.22bis.

Bell 103, Bell 212A

Bell - это американский стандарт, не совместимый со стандартами CCITT.

Выбор модема

При покупке модема в первую очередь надо определить его стандарт передачи по телефонным линиям. Необходимо, чтобы модем как минимум поддерживал один из стандартов CCITT V.21, V.22 или V.22bis. В противном случае вам не удастся обмениваться данными с большинством модемов, установленных на BBS, узловых станциях сетей и т.д.

Затем следует определить систему команд модема. Для совместимости с большинством коммуникационных программ необходима возможность использования hayes-команд.

Не советуем вам покупать модемы, не полностью отвечающие предъявленным требованиям.

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

И наконец, вам желательно опробовать модем именно с тем программным обеспечением, с которым вы его желаете использовать. Таким образом вы сможете обнаружить неблагоприятные особенности данного модема.

Например, модем Smart One 2400B имеет следующую интересную особенность: при выполнении команды ATZ он на короткое время устанавливает сигнал на линии DCD. В результате коммуникационные программы, использующие эту линию для определения факта соединения с удаленным модемом, будут введены в заблуждение. Так, при передаче из программы MTE модему Smart One 2400B команды ATZ вместо ответа "OK" на экране отображается "CONNECT".

Преимущества и недостатки внутренних и внешних модемов

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

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

Мы приведем несколько основных различий между внутренними и внешними модемами, в соответствии с которыми вы можете выбрать тот или иной модем.

Сначала приведем соображения в пользу внешнего модема.

Во-первых, внешние модемы являются более мобильными, чем внутренние. Внешний модем вы легко можете отсоединить от одного компьютера и подключить к другому. Для этого надо только переключить один разъем. В случае же внутреннего модема надо отключать его питание, отсоеденить массу разъемов, открыть корпус компьютера...

Во-вторых, внутренний модем ограничивает вас в выборе самого компьютера или, наоборот, сам компьютер ограничивает вас в выборе модема. Некоторые модемы выполнены в виде плат полной длины, которые можно вставить только в длинные разъемы на материнской плате компьютеров IBM PC/XT/AT. Если же у вас компьютер в миникорпусе, например Tandy 1000, или вы переходите от IBM PC/XT/AT к IBM PS/2, то вы уже не сможете использовать свой старый, хорошо проверенный модем. Кроме того, если вы имеете компьютер типа Laptop или Notebook, то вы принципиально не сможете подключить к нему внутренний модем (правда, такие компьютеры, как правило, уже имеют встроенные модемы). В этом случае вам нужен внешний модем.

Более того, внутренний модем будет занимать внутри корпуса компьютера отдельный слот, в который вы могли бы вставить другие платы расширения (например, дополнительную память).

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

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

С другой стороны, внутренние модемы, как правило, дешевле внешних, так как для них не нужен специальный корпус, дополнительный блок питания и соединительный кабель с разъемами RS-232. У вас также не будет путаницы из-за проводов. Внутрений модем не будет занимать места на вашем столе. И вам не надо будет помнить о необходимости выключить питание у внешнего модема после окончания работы. Внешний модем занимает разъем COM-порта, который мог бы быть использован для подключения мыши, принтера или чего-либо еще.