April 19, 2019

New HOWTO: Modem-HOWTO - page 9

Table of Contents

  • April 12, 2001
  8.  Modem Configuration (excluding serial port)

  8.1.  Finding Your Modem

  Before spending a lot of time deciding how to configure your modem,
  you first need to make sure it can be found and that AT-commands and
  the like can be sent to it.  So I suggest you first give it a very
  simple configuration using the communication program you will be using
  on the port and see it it works.  If this works you may then want to
  improve on the configuration, If not then see ``My Modem is Physically
  There but Can't be Found''.  A winmodem may be hard to find and will
  not work under Linux.

  8.2.  AT Commands

  While the serial port on which a modem resides requires configuring,
  so does the modem itself.  The modem is configured by sending AT
  commands (or the like) to it on the same serial line that is used to
  send data.

  Most modems use an AT command set.  These are cryptic and short ASCII
  commands where all command strings must be prefaced by the letters AT.
  AT means: ATtention, expect a command to follow.  For example:
  ATZ&K3  This is an AT-command string with two commands here: Z
  and &K3.  Z is short for Z0 and a few modems require that you use Z0
  instead of just Z.  It's like this for other commands ending in 0.
  The command string is terminated by a return character (use the
   key if you are manually typing it).  A string that's too long
  (40 or more characters) may not work on older modems.  You may use
  either uppercase or lowercase letters.

  Unfortunately there are many different variations of the AT command
  set so that what works for one modem may or may not work for another
  modem.  Thus there is no guarantee that the AT commands given in this
  section will work on your modem.

  Such command strings are either automatically sent to the modem by
  communication programs or are manually typed in by you.  Most
  communication programs provide a screen where you may change (edit)
  and save the init string that the communication program will use.  The
  modem itself has a stored configuration (profile) which is like a long
  init string.  It represents the configuration of the modem when it's
  first tuned on.  You may change it to suit your taste.  In most cases
  there are a few different such configurations (profiles) and there are
  ways to designate one of them to be active.

  If you have a manual for your modem (either on paper or on floppy
  disk) you might find AT-commands there.  3Com modems (and others ??)
  have AT-Command help files built into the modem so if you type say
  "AT$" to the modem it will display some "online help".

  You can also find info on AT commands on the Internet.  You should
  first try a site for your modem manufacturer.  If this doesn't work
  out then you can search the Internet using terms that are from AT
  commands such as &C1, &D3, etc.  This will tend to find sites that
  actually list AT-Commands instead of sites that just talk about them
  in general.  You might also try a few of the sites listed in the
  subsection ``Web Sites''.  Be warned that the AT-commands for a
  different brand of modem may be somewhat different.

  8.3.  Init Strings: Saving and Recalling

  The examples given in this subsection are from the Hayes AT modem
  command set.  All command strings must be prefaced by the two letters
  AT.  For example: AT&C1&D3^M (^M is the return character).  When a
  modem is powered on, it automatically configures itself with one of
  the configurations it has stored in its non-volatile memory.  If this
  configuration is satisfactory there is nothing further to do.

  If it's not satisfactory, then one may either alter the stored
  configuration or configure the modem each time you use it by sending
  it a string of commands known as an "init string" (= initialization
  string).  Normally, a communication program does this.  What it sends
  will depend on how you configured the communications program.  Your
  communication program should allow you to edit the init string and
  change it to whatever you want.  Sometimes the communications program
  will let you select the model of your modem and then it will use an
  init string that it thinks is best for that modem.

  The configuration of the modem when it's first powered on may be
  expressed by an init string.  You might think of this as the default
  "string" (called a profile).  If your communications program sends the
  modem another string (the init string), then this string will modify
  the default configuration.  For example, if the init string only
  contains two commands, then only those two items will be changed.
  However, some commands will recall a stored profile from inside the
  modem so a single such command in the init string can thereby change
  everything in the configuration.

  Modern modems have a few different stored profiles to choose from that
  are stored in the modem's non-volatile memory (it's still there when
  you turn it off).  In my modem there are two factory profiles (0 and
  1, neither of which you can change) and two user defined profiles (0
  and 1) that the user may set and store.  Your modem may have more.  To
  view some of these profiles send the command &V.  At power-up one of
  the user-defined profiles is loaded.  For example, if you type the
  command &Y0 (just Y0 for a 3Com modem) then in the future profile 0
  will be used at power-on.

  There are also commands to load (activate) any of the stored profiles.
  Such a load command may be put in an init string.  Of course if it
  loads the same profile that was automatically loaded at power-up,
  nothing is changed (unless the active profile has been modified since
  power-up).  Since your profile could have thus been modified it's a
  good idea to use some kind of an init string even if it does nothing
  more than load a stored profile.

  Examples of loading saved profiles:
  Z0 loads user-defined profile 0 and resets (hangs up, etc.)
  &F1 loads factory profile 1

  Once you have sent commands to the modem to configure it the way you
  want (such as loading a factory profile and modifying it a little) you
  may save this as a user-defined profile:
  &W0 saves the current configuration to user-profile 0.

  Many people don't bother saving a good configuration in their modem,
  but instead, send the modem a longer init string each time the modem
  is used.  Another method is to restore the factory default by &F1 at
  the start of the init string and then modify it a little by adding a
  few other commands to the end of the init string.  Since there is no
  way to modify the factory default this prevents anyone from changing
  the configuration by modifying (and saving) the user-defined profile.

  You may choose an init string supplied by someone else that they think
  is right for your modem.  Some communication programs have a library
  of init strings to select from.  The most difficult method (and one
  which will teach you the most about modems) is to study the modem
  manual and write one yourself.  You could save this configuration
  inside the modem so that you don't need an init string.  A third
  alternative is to start with an init string that someone else wrote,
  but modify it to suit your purposes.

  If you look at init strings used by communication programs you may see
  symbols which are not valid modem commands.  These symbols are
  commands to the communication program itself and will not be sent to
  the modem.  For example,   may mean to pause briefly.

  8.3.1.  Where is my "init string" so I can modify it ?

  This depends on your communication program (often a PPP program).  If
  this is the latest version of Modem-HOWTO send me info for other

  �  Gnome: run pppsetup

  �  wvdial: edit /etc/wvdial.conf

  �  minicom: hit ^Ao (or possibly ALT-o), then select "Modem and

  8.4.  Other AT Modem Commands

  For dial-in see ``Dial-in Modem Configuration''.  The rest of this
  section is mostly what was in the old Serial-HOWTO.  All strings must
  start with AT.  Here's a few Hayes AT codes that should be in the
  string (if they are not set by using a factory default or by a saved

  �  E1       command echo ON

  �  Q0       result codes are reported

  �  V1       result codes are verbose

  �  S0=0     never answer (uugetty does this with the WAITFOR option)

  Here's some more AT commands for special purposes:

  �  &C1   CD is only on when you're connected

  �  &S0     DSR is always on

  �  &X3     Dial even if there is no dialtone (Use where dial-tones
     don't exist).

  Greg Hankins had a collection of setups for different types of modems.
  It's not currently maintained and covers modems prior to 1998.

  Note: to get his USR Courier V.34 modem to reset correctly when DTR
  drops, Greg Hankins had to set &D2 and S13=1 (this sets bit 0 of
  register S13).  This has been confirmed to work on USR Sportster V.34
  modems as well.

  Note: some Supra modems treat CD differently than other modems.  If
  you are using a Supra, try setting &C0 and not &C1.  You must also set
  &D2 to handle DTR correctly.

  8.5.  Blacklisting

  If phone number is dialed a few times with no success, some modems may
  blacklist a phone number.  After a certain time you may try again.
  Some countries require this to reduce needless repeated dialing.  To
  view the blacklist try %B.  To delete the blacklist use these AT

  �  SR Robotics o 3COM: s40=2 or if NG try s40=7

  �  Lucent:  %t21,18,0

  �  Rockwell:  %tcb

  �  Cirrus Logic: *nc9

  8.6.  What AT Commands are Now Set in my Modem?

  You may try to use minicom for viewing your modem profile.  It's best
  not to have any other process running on the modem port when you do
  this.  If you have set up minicom for your modem, then you may type on
  the command line: minicom -o to start minicom without restoring the
  saved modem profile.  Then type at&v to display the profile.  To exit
  minicom without disturbing this profile, use the q (quit) command for
  exiting without resetting.

  The above may not work for various reasons.  If the modem has been set
  not to echo result codes it may not even display any profile.  If
  there is another process running on the modem port at the same time,
  some of what the modem sends to you is likely to be read by the other
  process so you will see only part of the profile.  Is there some way
  to temporarily stop the other process on the port so it will not
  interfere?  I tried the "stop" signal using the "kill" command but it
  didn't work.  If this is the latest version of this HOWTO, let me know
  if you find a way to do it.

  If you have at least one process running on the modem port and kill
  them, the modem's profile may be reset so you will not observe what
  the original profile was.  This will happen if you kill getty (or it's
  replacements: login or bash) and have &D3 set.  The killing of getty
  (or the like) will drop DTR and reset the modem's profile to the
  power-on state.   To keep getty from respawning when killed, comment
  it out in /etc/inittab and do an "init q".

  8.7.  Modem States (or Modes)

  Since the channel for sending AT commands to the modem is the same
  channel that is used for the flow of data (files, packets, etc.) then
  it's important to cleanly separate the AT commands from the data.

  When the modem is first turned on it's in the command mode (also
  called terminal mode, idle state or AT-command mode).  Anything sent
  to it from the PC is assumed to be an AT command and not data.  Then
  if a dial command is sent to it (ATD...), it dials and connects to
  another modem.  It's now in the on-line data mode (connected) and
  sends and receives data (such as Internet pages).  In this mode AT
  command one trys to send it will not work but will be transmitted to
  the other modem instead.  Except for the escape command.  This is +++
  with a minimum time delay both at the start and end.  The time delay
  allows the modem to determine that it is likely a real escape and not
  just +++ in a file being transmitted.

  So we have two states so far: AT-command and on-line data.  But there
  is a third important state which is sort of a combination of these
  two.  It's the on-line command mode.  This is when the modem maintains
  a connection (without sending/receiving data) but anything sent from
  the PC is interpreted as an AT command.  This is the state reached
  with a +++ escape signal or by a DTR drop from the PC provided the &D1
  has been set.  Then one can send AT commands to the modem including
  commands which will leave this state and go to one of the other two

  There are other states also: dialing state and handshaking state but
  they normally lead to the connected (on-line) state.  If they don't
  then the modem should hang up, thereby returning to the initial AT-
  command (or idle) state.

Most Popular LinuxPlanet Stories