Следующий Предыдущий Содержание

## 8. Настройка модема

## 8.1 Наличие доступа к модему

Прежде чем тратить время на настройку модема, убедитесь сперва в том, что Вы имеет к нему доступ и можете отсылать ему AT-команды и пр. данные. Т.е. я предлагаю Вам сначала сделать простенькую настройку через программу, которую Вы будете использовать для установки соединения, и посмотреть, как работает модем. Если работает, то можно будет попробовать улучшить настройки. Если нет, см. Я подключил модем, но никак не могу его найти. С винмодемом вероятно будет непросто -- он вообще может не работать под Linux.

## 8.2 AT-команды

Не только последовательный порт, но и, конечно же, сам модем требуют настройки. Модем настраивается AT-командами (или другими), передаваемыми по той же линии, что и данные.

Большинство модемов используют набор команд AT (известный также под именем Hayes -- прим. перев.). Команды AT представляют собой короткие строки символов ASCII, начинающиеся с букв AT. AT означает: Внимание (ATtention), даю команду. Пример: ATZ&K3<возврат>. Данная строка содержит в себе две AT-команды: Z и &K3 (можно сразу задавать несколько команд -- пояснение перев.). Z -- короткая форма команды Z0, некоторые модемы понимают только Z0 и не понимают Z. То же может быть справедливо и для других команд, оканчивающихся нулем. Командная строка завершается символом возврата (при вводе с клавиатуры надо нажать клавишу <Enter>). Устаревшие модемы могут не воспринимать слишком длинные строки (более 40 символов). Вводить можно как прописные, так и строчные буквы.

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

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

Перечень и назначение AT-команд можно найти в руководстве, прилагаемом к Вашему модему. Модемы 3Com/USR (и не только ??) имеют встроенную справку по AT-командам: если Вы наберете "AT$", то увидите "интерактивную справку" от модема.

Информацию по AT-командам можно также найти в Интернет. Сперва посмотрите на сайте производителя Вашего модема. Если там не найдете (нехороший производитель -- комм. перев.), то "погуглите" (воспользуйтесь поиском -- др. вариант перев. :)) Интернет по некоторым AT-командам, например &C1, &D3 и т.д. В этом случае Вы попадете на сайты, содержащие перечень AT-команд, а не общую информацию о них. Несколько ссылок есть в разделе Web-сайты. Учтите, что AT-команды для различных марок модемов могут также в чем-то отличаться.

## 8.3 Строки инициализации: задание и сохранение

Примеры в данном разделе даны для набора команд Hayes AT. Все командные строки должны начинаться с двух букв AT, например: AT&C1&D3^M (^M -- символ возврата). При включении питания модем автоматически себя настраивает, загружая один изхранящихся в его энергонезависимой памяти наборов настроек. Если эти настройки устраивают, то делать ничего не надо (как говорится, не навреди -- прим. перев.).

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

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

Современные модемы хранят в своей энергонезависимой памяти несколько различных профилей. В моем модеме есть два заводских профиля (0 и 1, их изменить нельзя) и два пользовательских профиля (0 и 1), которые можно задать и сохранить. В Вашем модеме профилей может быть больше. Чтобы посмотреть свои профили, пошлите команду &V. Номер профиля, который будет загружаться при включении питания, задается пользователем. К примеру, если дать команду &Y0 (для модемов 3Com/USR просто Y0), то будет использоваться профиль 0.

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

Примеры команд загрузки сохраненных профилей:
Z0 загружает пользовательский профиль 0 и осуществляет сброс
&F1 загружает заводской профиль 1

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

Многие пользователи вместо сохранения своих настроек в модем задают длинную строку инициализации, каждый раз отсылаемую модему. Можно в начале строки инициализации командой &F1 восстановить заводские настройки, после которой добавить желаемые команды для их правки. Заводские настройки защищены от каких-либо изменений -- изменение (и сохранение) пользовательского профиля на них не влияет.

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

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

### Где мне подправить мою строку инициализации?

Это зависит от того, какую программу Вы используете для установки соединения (обычно по протоколу PPP).

- Gnome: запустите pppsetup
- wvdial: в /etc/wvdial.conf
- minicom: введите ^Ao (или ALT-o), затем выберете "Modem and Dialing"

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

## 8.4 Другие AT-команды

Касаемо приема звонков см. Настройка модема на прием звонков. Оставшаяся часть данного раздела в основном позаимствована из раннего Serial-HOWTO. Все строки должны начинаться с AT. Вот несколько Hayes AT-команд, которые крайне желательно задавать (если соответствующие настройки отсутствуют в заводском или пользовательском профиле):

- E1 включает возврат символов в командном режиме
- Q0 включает выдачу кодов выполнения команд (OK, ERROR и т.д.)
- V1 -- коды выполнения выдаются в словесной форме
- S0=0 -- модем не будет отвечать на входящие звонки (uugetty для этого надо задать опцию WAITFOR)

Вот еще несколько AT-команде для определенных целей:

- &C1 -- CD устанавливается только после соединения
- &S0 -- DSR присутствует постоянно
- X3 -- набор номера осуществляется и при отсутствии сигнала в линии (набор вслепую). Используется на линиях, не имеющих сигнала готовности (непрерывный гудок)

Замечание: чтобы заставить свой старый модем USR Courier V.34 правильно осуществлять сброс после падения DTR, Грэгу Хэнкинсу пришлось задать `&D2` и `S13=1` (последней командой он установил 0-й бит регистра S13). Есть подтверждение, что это же требуется и для модемов USR Sportster V.34.

Замечание: некоторые старые модемы Supra воспринимают CD иначе, чем другие модемы. Если у Вас модем Supra, то попытайтесь задать `&C0`, а не `&C1`. Также для правильной обработки сигнала DTR задайте `&D2`.

## 8.5 Занесение в черный список

Некоторые модемы после нескольких неудачных попыток набора определенного номера могут занести его в черный список. Вновь набрать данный номер можно будет только спустя определенное время. Это обусловлено требованиями некоторых стран во избежание излишней нагрузки на телефонную сеть (я так это понял -- замеч. перев.). Для просмотра черного списка телефонных номеров есть команда %B. Для удаления черного списка используются команды:

- US Robotics или 3COM: s40=2 или, если не сработает, s40=7
- Lucent: %t21,18,0
- Rockwell: %tcb
- Cirrus Logic: *nc9

## 8.6 Как посмотреть настройки моего модема?

Посмотреть набор настроек (профиль) модема можно в minicom'е. При этом следует позаботиться, чтобы никакой другой процесс не использовал в данный момент времени порт модема. Если minicom у Вас уже установлен, то наберите в командной строке: `minicom -o`, так Вы запустите minicom, не загружая в модем сохраненный профиль. Чтобы отобразить профиль, напечатайте `at&v` (или atI4, если модем 3Com/USR). Чтобы выйти из minicom, не трогая этот профиль, используйте команду q (quit, выход без сброса).

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

При завершении командой kill какого-нибудь процесса, запущенного на модемном порте, настройки модема могут быть сброшены. Так произойдет, если Вы "убьете" getty (или одну из его производных: login или bash) при заданной модему &D3. "Убийство" getty приведет к падению DTR и перезагрузке модема (установится начальный профиль). Чтобы getty не перезапускался, закомментируйте его вызов в /etc/inttab и выполните "init q" (init перечитает /etc/inittab -- поясн. для перев.).

## 8.7 Режимы работы модема

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

После включения модем находится в командном режиме (также называемом терминальным, состоянием незанятости или режимом ввода AT-команд): все, посылаемое ему от ПК, воспринимается как AT-команда, а не как данные. Если модему дать команду набора номера (ATD...), то после набора номера и установления соединения с другим модемом он перейдет в режим передачи и приема данных (наподобие Интернет-страничек). В этом режиме модем не будет выполнять отданную ему AT-команду, а просто передаст ее (так что, смело можете пересылать этот файл по телефонной линии с содержащимися в нем AT-командами -- несколько ни к чему не обязывающих доп. байт от перев. ;)). Исключение составляет т.н. Escape-последовательность +++ с определенными временными задержками до и после. Временные задержки позволяют модему определить, что это действительно Escape-последовательность, а не сочетание трех плюсов в передаваемом файле.

Итак, модем имеет два режима: командный и приема-передачи данных. Но есть и третий важный режим, являющийся как бы комбинацией первых двух. Это командный режим при установленном соединении. Во время него модем не разрывает соединение, но прием/передачу данных приостанавливает и все, идущее от ПК, принимает как AT-команду. Переход в данное состояние (режим) осуществляется по Escape-последовательности +++ или по падению сигнала DTR при заданной &D1. Можно отдавать любые AT-команды, включая команды выхода из данного режима и перехода в один из двух основных режимов.

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

Следующий Предыдущий Содержание