home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / Serial-HOWTO < prev    next >
Text File  |  1999-05-24  |  121KB  |  2,773 lines

  1.   The Linux Serial HOWTO
  2.   David S.Lawyer   bf347@lafn.org original by Greg Hankins
  3.   v2.00 May 1999
  4.  
  5.   This document describes serial port features other than those which
  6.   should be covered by Modem-HOWTO, PPP-HOWTO, Serial-Programming-HOWTO,
  7.   or Text-Terminal-HOWTO.  It lists info on multiport serial cards.  It
  8.   contains technical info about the serial port itself in more detail
  9.   than found in the above HOWTOs and should be best for troubleshooting
  10.   when the problem is the serial port itself.  It doesn't yet cover PnP
  11.   serial ports but this is covered in Modem-HOWTO.  If you are dealing
  12.   with a Modem, PPP (used for Internet access on a phone line), or Text-
  13.   Terminal, those HOWTOs should be consulted first.
  14.   ______________________________________________________________________
  15.  
  16.   Table of Contents
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.   1. Introduction
  68.  
  69.      1.1 Copyright, Disclaimer, & Credits
  70.         1.1.1 Copyright
  71.         1.1.2 Disclaimer
  72.         1.1.3 Credits
  73.      1.2 Release Notes
  74.      1.3 New Versions of this Serial-HOWTO
  75.      1.4 Related HOWTO's re the Serial Port
  76.      1.5 Feedback
  77.      1.6 What is a Serial Port?
  78.  
  79.   2. How It Works --Overview
  80.  
  81.      2.1 Transmitting
  82.      2.2 Receiving
  83.      2.3 The Large Serial Buffers
  84.  
  85.   3. Serial Port Basics
  86.  
  87.      3.1 What is a Serial Port ?
  88.         3.1.1 Introduction
  89.         3.1.2 Pins and Wires
  90.         3.1.3 RS-232 or EIA-232, etc.
  91.      3.2 I/O Address & IRQ
  92.      3.3 Interrupts
  93.      3.4 Data Flow (Speeds)
  94.      3.5 Flow Control
  95.         3.5.1 Flow Control Explained by an Example
  96.         3.5.2 Symptoms of No Flow Control
  97.         3.5.3 Hardware vs. Software Flow Control
  98.      3.6 Data Flow Path, Buffers
  99.      3.7 Complex Flow Control Example
  100.  
  101.   4. Is the Serial Port Obsolete?
  102.  
  103.      4.1 Introduction
  104.      4.2 EIA-232 Cable Is Low Speed & Short Distance
  105.      4.3 Inefficient Interface to the Computer
  106.  
  107.   5. Multiport Serial Boards/Cards
  108.  
  109.      5.1 Standard PC Serial Boards
  110.      5.2 Dumb Multiport Serial Boards (with 8250/16450/16550A UART's)
  111.      5.3 Intelligent Multiport Serial Boards
  112.  
  113.   6. Configuring the I/O Address, IRQ, and Name
  114.  
  115.      6.1 Introduction
  116.      6.2 Set I/O Address & IRQ
  117.      6.3 Can I Use More Than Two Serial Devices?  Interrupt Conflicts
  118.         6.3.1 Choosing Serial IRQs (required only if your kernel version < 2.2)
  119.         6.3.2 Setting Serial Device Addresses
  120.         6.3.3 Giving the IRQ and IO Address to Setserial
  121.      6.4 Can Linux Configure The Serial Devices Automagically?
  122.      6.5 Notes For Multiport Boards
  123.      6.6 Devices: modem, mouse
  124.      6.7 The cua Device
  125.      6.8 Serial Port Devices and Numbers in the /dev directory
  126.         6.8.1 Creating Devices In the /dev Directory
  127.      6.9 Notes For Dumb Multiport Boards
  128.      6.10 Notes For Intelligent Multiport Boards
  129.  
  130.   7. Interesting Programs You Should Know About
  131.  
  132.      7.1 Serial Monitoring/Diagnostics Programs
  133.      7.2 Changing Interrupt Priority
  134.      7.3 What is Setserial ?
  135.         7.3.1 Introduction
  136.         7.3.2 Probing
  137.         7.3.3 Boot-time Configuration
  138.         7.3.4 IRQs
  139.      7.4 What is isapnp ?
  140.  
  141.   8. Speed (Flow Rate)
  142.  
  143.      8.1 Can't Set a High Enough Speed
  144.      8.2 Higher Serial Throughput
  145.  
  146.   9. Communications Programs And Utilities
  147.  
  148.      9.1 List of Software
  149.      9.2 kermit and zmodem
  150.  
  151.   10. Serial Tips And Miscellany
  152.  
  153.      10.1 Line Drivers
  154.      10.2 Known Defective Hardware
  155.         10.2.1 Problem with IBM 8514 Video Board
  156.         10.2.2 Problem with AMD Elan SC400 CPU (PC-on-a-chip)
  157.      10.3 What Are Lock Files ?
  158.  
  159.   11. Troubleshooting
  160.  
  161.      11.1 Serial Electrical Test Equipment
  162.         11.1.1 Breakout Gadgets, etc.
  163.         11.1.2 Measuring Voltages
  164.         11.1.3 Taste Voltage
  165.      11.2 Serial Monitoring/Diagnostics
  166.      11.3 My Serial Port is Physically There but Can't be Found
  167.      11.4 Slow: Text appears on the screen slowly after long delays
  168.      11.5 The Startup Screen Show Wrong IRQs for the Serial Ports.
  169.  
  170.   12. Interrupt Problem Details
  171.  
  172.      12.1 Mis-set Interrupts
  173.      12.2 Interrupt Conflict
  174.      12.3 Resolving Interrupt Problems
  175.  
  176.   13. What Are UARTs?
  177.  
  178.   14. Pinout and Signals
  179.  
  180.      14.1 Pinout
  181.      14.2 Signals May Have No Fixed Meaning
  182.      14.3 Cabling Between Serial Ports
  183.      14.4 RTS/CTS and DTR/DSR Flow Control
  184.         14.4.1 The DTR and DSR Pins
  185.      14.5 Preventing a Port From Opening
  186.  
  187.   15. Voltage Waveshapes
  188.  
  189.      15.1 Voltage for a Bit
  190.      15.2 Voltage Sequence for a Byte
  191.      15.3 Parity Explained
  192.      15.4 Forming a Byte (Framing)
  193.      15.5 How "Asynchronous" is Synchronized
  194.  
  195.   16. Other Serial Devices (not async EIA-232)
  196.  
  197.      16.1 Successors to EIA-232
  198.      16.2 EIA-422-A (balanced) and EIA-423-A (unbalanced)
  199.      16.3 EIA-485
  200.      16.4 EIA-530
  201.      16.5 EIA-612/613
  202.      16.6 The Universal Serial Bus (USB)
  203.      16.7 Synchronization & Synchronous
  204.         16.7.1 Defining Asynchronous vs Synchronous
  205.         16.7.2 Synchronous Communication
  206.  
  207.   17. Other Sources of Information
  208.  
  209.      17.1 Books
  210.      17.2 Serial Software
  211.      17.3 Linux Documents
  212.      17.4 Usenet newsgroups:
  213.      17.5 Serial Mailing List
  214.      17.6 Internet
  215.  
  216.  
  217.   ______________________________________________________________________
  218.  
  219.   1.  Introduction
  220.  
  221.   This HOWTO covers basic info on the Serial Port and multiport serial
  222.   cards.  Information specific to modems and text-terminals has been
  223.   moved to Modem-HOWTO and Text-Terminal-HOWTO.  Info on getty has been
  224.   also moved to these HOWTOs since mgetty and uugetty are best for
  225.   modems while agetty is best for text-terminals.  In the future, some
  226.   general info on getty troubleshooting will be put in this HOWTO.  If
  227.   you are dealing with a modem, text terminal, or printer, then you may
  228.   not need to consult this HOWTO.  But if you are using the serial port
  229.   for some other device, using a multiport serial card, trouble-shooting
  230.   the serial port itself, or want to understand more technical details
  231.   of the serial port, then you may need to use this HOWTO as well as
  232.   some of the other HOWTOs.  (See ``Related HOWTO's'')  This HOWTO lists
  233.   info on various multiport serial cards since they may be used for
  234.   either modems or text-terminals.  This HOWTO addresses Linux running
  235.   on Intel x86 hardware, although it might work for other architectures.
  236.  
  237.  
  238.   1.1.  Copyright, Disclaimer, & Credits
  239.  
  240.   1.1.1.  Copyright
  241.  
  242.   Copyright (c) 1993-1997 by Greg Hankins, 1998-1999 by David S. Lawyer.
  243.   This document may be distributed under the terms set forth in the LDP
  244.   license at http://metalab.unc.edu/LDP/COPYRIGHT.html.  This document
  245.   may not be distributed in modified form without consent of the author
  246.   (unless after a good faith effort the author can't be contacted).
  247.  
  248.  
  249.   1.1.2.  Disclaimer
  250.  
  251.   While I haven't intentionally tried to mislead you, there are likely a
  252.   number of errors in this document.  Please let me know about them.
  253.   Since this is free documentation, it should be obvious that I cannot
  254.   be held legally responsible for any errors.
  255.  
  256.  
  257.   1.1.3.  Credits
  258.  
  259.   Most of the original Serial-HOWTO was written by  Greg Hankins.
  260.   gregh@cc.gatech.edu He also rewrote many contributions by others in
  261.   order to maintain continuity in the writing style and flow.  He wrote:
  262.   "Thanks to everyone who has contributed or commented, the list of
  263.   people has gotten too long to list (somewhere over one hundred).
  264.   Special thanks to Ted T'so for answering questions about the serial
  265.   drivers." Approximately half of v2.00 is from Greg Hankins HOWTO and
  266.   the other half is by David Lawyer.
  267.  
  268.  
  269.   1.2.  Release Notes
  270.  
  271.   This is a major revision which has removed info on Terminals and
  272.   Modems from the old Serial-HOWTO and put such info into:
  273.  
  274.   ╖  Text-Terminal-HOWTO
  275.  
  276.   ╖  Modem-HOWTO
  277.  
  278.      I still haven't checked out the info on multiport cards to see if
  279.      it's up-to-date.  More info has been added on how the serial port
  280.      works, the electrical properties of the serial port,
  281.      troubleshooting, and some brief info on non-RS-232 serial ports.
  282.      Much of this info was lifted directly from the above HOWTOs.  The
  283.      fact that this HOWTO was pieced together from various sources has
  284.      resulted in a certain lack of integration.  This will hopefully be
  285.      improved on in future versions.
  286.  
  287.  
  288.   1.3.  New Versions of this Serial-HOWTO
  289.  
  290.   New versions of the Serial-HOWTO will be available to browse and/or
  291.   download at LDP mirror sites.  For a list of mirror sites see:
  292.   <http://metalab.unc.edu/LDP/mirrors.html>.  Various formats are
  293.   available.  If you only want to quickly check the date of the latest
  294.   version look at:  <http://metalab.unc.edu/LDP/HOWTO/Serial-
  295.   HOWTO.html>.
  296.  
  297.  
  298.   1.4.  Related HOWTO's re the Serial Port
  299.  
  300.   Modems, Text-Terminals, some printers, and other peripherals run off
  301.   the serial port.  Get these HOWTOs from the nearest mirror site as
  302.   explained above.
  303.  
  304.  
  305.   ╖  Modem-HOWTO is about installing and configuring modems
  306.  
  307.   ╖  Printing-HOWTO has info on using a serial printer
  308.  
  309.   ╖  Serial-Programming-HOWTO helps you write C programs (or parts of
  310.      them) that handle the serial port.  You may program the equivalent
  311.      of "stty ...", open ports in various modes, and more.
  312.  
  313.   ╖  Text-Terminal-HOWTO is about how they work, how to install
  314.      configure, and repair them.
  315.  
  316.  
  317.   1.5.  Feedback
  318.  
  319.   Please send me any questions, comments, suggestions, or additional
  320.   material.  I'm always eager to hear about what you think about this
  321.   HOWTO.  I'm also always on the lookout for improvements!  Tell me
  322.   exactly what you don't understand, or what could be clearer.  You can
  323.   reach me at name="bf347@lafn.org (David Lawyer)"> via email.
  324.  
  325.  
  326.   1.6.  What is a Serial Port?
  327.  
  328.   The conventional serial port (not the newer USB port) is a very old
  329.   I/O port.  Almost all PC's have them.  But Macs (Apple Computer) after
  330.   mid 1998 (with colored cases) only have the USB port.  The common
  331.   specification is RS-232 (or EIA-232).  The connector for the serial
  332.   port is often seen as one or two 9-pin connectors (in some cases
  333.   25-pin) on the back of a PC.  But the serial port is is more than just
  334.   that.  It includes the associated electronics which must produce
  335.   signals conforming to the EIA-232 specification.  See ``Voltage
  336.   Waveshapes''.  One pin is used to send out data bytes and another to
  337.   receive data bytes.  Another pin is a common signal ground.  The other
  338.   "useful" pins are used mainly for signalling purposes with a steady
  339.   negative voltage meaning "off" and a steady positive voltage meaning
  340.   "on".
  341.  
  342.   The UART (Universal Asynchronous Receiver-Transmitter) chip does most
  343.   of the work.  Today, the functionality of this chip is usually built
  344.   into another chip.  See ``What Are UARTs?'' These have improved over
  345.   time and old models (several years old) are now obsolete.
  346.  
  347.   The serial port was originally designed for connecting modems but it's
  348.   used to connect many other devices also such as mice, text-terminals,
  349.   some printers, etc. to a computer.  You just plug these devices into
  350.   the serial port using the correct cable.  Many internal modems card
  351.   have a built-in serial port so when you install one inside your PC
  352.   it's as if you just installed another serial port in your PC.
  353.  
  354.  
  355.   2.  How It Works --Overview
  356.  
  357.   2.1.  Transmitting
  358.  
  359.   Transmitting is sending bytes out of the serial port away from the
  360.   computer.  What follows is an explanation of how older obsolete serial
  361.   ports work (with only 1-byte hardware buffers).  Once you understand
  362.   the old ones it will be easy to understand the more modern ones.  When
  363.   the computer wants to send a byte out the serial port the CPU sends
  364.   the byte on the bus inside the computer to the I/O address of the
  365.   serial port.  The serial port takes the byte, and sends it out one bit
  366.   at a time (a serial bit-stream) on the transmit pin of the serial
  367.   connector.  For what a bit (and byte) look like electrically see
  368.   ``Voltage Waveshapes''.
  369.  
  370.   Here's a replay of the above in some more (but not full) detail.  Most
  371.   of the work at the serial port is done by the UART chip (or the like).
  372.   The device driver program, running on the CPU, sends a byte to the
  373.   serial's I/O address.  This byte goes into a 1-byte transmit buffer in
  374.   the serial port.  When the port is ready to transmit it, it moves this
  375.   byte to its transmit shift register and sends it out the transmit pin
  376.   bit-by-bit.  Now the transit buffer is empty and another byte may be
  377.   put in it while the original byte is being transmitted from the
  378.   transmit shift register.  Once a byte is completely transmitted, the
  379.   port takes another byte out of its transmit buffer and sends that bit-
  380.   by-bit also.  It continues doing this as long as it finds a new byte
  381.   in the transmit buffer.
  382.  
  383.   But that's not the whole story.  In order for there not to be any gaps
  384.   in transmission, the CPU must keep the 1-byte transmit buffer supplied
  385.   with bytes.  It does this by utilizing interrupts.  As soon as a byte
  386.   has been moved out of the 1-byte transmit buffer (and is about to be
  387.   transmitted from the transmit shift register), the transmit buffer is
  388.   empty and needs another byte.  The serial port then issues an
  389.   interrupt to say it is ready for the next byte.  The interrupt is
  390.   actually a voltage put on a dedicated wire used only by that serial
  391.   port (although in some cases the same wire may be shared by more than
  392.   one port).
  393.  
  394.   The device driver is notified about the interrupt and checks registers
  395.   at I/0 addresses to find out what has happened.  It finds out that the
  396.   serial's transmit buffer is empty and waiting for another byte.  So if
  397.   there are more bytes to send, it sends the next byte to the serial's
  398.   I/0 address.  This next byte should arrive when the previous byte is
  399.   still in the transmit shift register and still being transmitted bit-
  400.   by-bit.  This new byte goes into the transmit buffer but it can't be
  401.   moved into the transmit shift register until the previous byte there
  402.   has been completely sent out.  When the last bit has been sent out the
  403.   following 3 things happen almost simultaneously:
  404.  
  405.   1. Another new byte is moved from the transmit buffer into the
  406.      transmit shift register
  407.  
  408.   2. The transmission of this new byte (bit-by-bit) begins
  409.  
  410.   3. Another interrupt is issued to tell the device driver to send
  411.      another byte to the transmit buffer.
  412.  
  413.   We thus say the serial port is interrupt driven.  Each time the serial
  414.   port issues an interrupt, the CPU sends it another byte.  Once a byte
  415.   has been sent to the transmit buffer by the CPU, then the CPU is free
  416.   to pursue some other activity until it gets the next interrupt.  The
  417.   serial port transmits bits at a fixed rate which is selected by the
  418.   user.  It's sometimes called the baud rate.  The serial port adds
  419.   extra bits to each byte so there are often 10 bits sent per byte.  At
  420.   a rate (also called speed) of 19,200 bits per second (bps), there are
  421.   thus 1,920 bytes/sec (and also 1,920 interrupts/sec).
  422.  
  423.   Doing all this is a lot of work for the CPU.  This is true for many
  424.   reasons.  First, just sending one 8-bit byte at a time over a 32-bit
  425.   data bus (or even 64-bit) is not a very efficient use of bus width.
  426.   Also, there is a lot of overhead in handing each interrupt.  When the
  427.   interrupt is received, the device driver only knows that something
  428.   caused an interrupt at the serial port but doesn't know that it's
  429.   because a character has been sent.  The device driver has to make
  430.   various checks to find out what happened.  The same interrupt could
  431.   mean that a character was received, one of the control lines changed
  432.   state, etc.
  433.  
  434.   One improvement over the above has been the enlargement of the buffer
  435.   size of the serial port.  Most serial ports today have 16-byte buffers
  436.   instead of just 1-byte buffers.  This means that when the CPU gets an
  437.   interrupt it gives the serial port up to 16 new bytes to transmit.
  438.   This is fewer interrupts to service but data must still be transferred
  439.   one byte at a time over a wide bus.
  440.  
  441.  
  442.   2.2.  Receiving
  443.  
  444.   Receiving bytes by a serial port is similar to sending them only it's
  445.   in the opposite direction.  It's also interrupt driven.  For the
  446.   obsolete type of serial port with 1-byte buffers, when a byte is fully
  447.   received it goes into the 1-byte receive buffer.  Then the port gives
  448.   the CPU an interrupt to tell it to pick up that byte so that the
  449.   serial port will have room for storing the byte which is currently
  450.   being received.  For newer serial ports with 16-byte buffers, this
  451.   interrupt may be sent after 14 bytes are in the receive buffer.  The
  452.   CPU then stops what it was doing, runs the interrupt service routine,
  453.   and picks up 14 or more bytes from the port.  It will be more than 14
  454.   if any additional bytes arrive after the interrupt was issued.  But if
  455.   3 or more new bytes have arrived, then the 16 byte buffer will overrun
  456.   since it can't store 17 (14 + 3) or more bytes.
  457.  
  458.  
  459.   2.3.  The Large Serial Buffers
  460.  
  461.   We've talked about small (1 or 16 byte) serial port buffers in the
  462.   hardware but there are also much larger buffers in main memory.  When
  463.   the CPU takes a byte (or say 14 bytes) out of the receive buffer of
  464.   the hardware, it puts it into a huge (say 8K-byte) receive buffer in
  465.   main memory.  Then a program that is getting bytes from the serial
  466.   port takes the bytes it's receiving out of that large buffer (using a
  467.   "read" statement in the program).  A similar situation exists for
  468.   bytes that are to be transmitted.  When the CPU needs to fetch some
  469.   bytes to be transmitted it takes them out of a large (8K-byte)
  470.   transmit buffer in main memory and puts them into the small transmit
  471.   buffer (1 or 16 bytes) in the hardware.
  472.  
  473.  
  474.   3.  Serial Port Basics
  475.  
  476.   You don't have to understand the basics to use the serial port But
  477.   understanding it may help to determine what is wrong if you run into
  478.   problems.  This section not only presents new topics but also repeats
  479.   much of what was said in the previous section ``How It Works
  480.   --Overview'' but in greater detail.
  481.  
  482.  
  483.   3.1.  What is a Serial Port ?
  484.  
  485.   3.1.1.  Introduction
  486.  
  487.   The serial port is an I/O (Input/Output) device.  An I/O device is a
  488.   way to get data into and out of a computer.  There are many types of
  489.   I/O devices such as serial ports, parallel ports, disk drive
  490.   controllers, ethernet boards, universal serial buses, etc.  Most PC's
  491.   have one or two serial ports.  Each has a 9-pin connector (sometimes
  492.   25-pin) on the back of the computer.  Computer programs can send data
  493.   (bytes) to the transmit pin and receive bytes from the receive pin.
  494.   The other pins are for control purposes and ground.
  495.  
  496.   The serial port is much more than just a connector.  It converts the
  497.   data from the parallel to serial and changes the electrical
  498.   representation of the data.  Inside the computer, data bits flow in
  499.   parallel (using many wires at the same time).  Serial flow is a stream
  500.   of bits over a single wire (such as on the transmit or receive pin of
  501.   the serial connector).  For the serial port to create such a flow, it
  502.   must convert data from parallel (inside the computer) to serial (and
  503.   conversely).
  504.  
  505.   Most of the electronics of the serial port is found in a computer chip
  506.   (or a section of a chip) known as a UART.  For more details on UARTs
  507.   see the section ``What Are UARTs?  How Do They Affect Performance?''.
  508.   But you may want to finish this section first so that you will
  509.   hopefully understand how the UART fits into the overall scheme of
  510.   things.
  511.  
  512.  
  513.   3.1.2.  Pins and Wires
  514.  
  515.   Old PC's used 25 pin connectors but only about 9 pins were actually
  516.   used so today most connectors are only 9-pin.  Each of the 9 pins
  517.   connects to a wire.  Besides the single wires used for transmitting
  518.   and receiving data, another pin (wire) is signal ground.  The voltage
  519.   on any wire is measured with respect to this ground.  There are still
  520.   more wires which are for control purposes (signalling) only and not
  521.   for sending bytes.  All of these signals could have been sent on a
  522.   single wire, but instead, there is a separate dedicated wire for every
  523.   type of signal.  Some (or all) these control wires are called "modem
  524.   control lines".  Modem control wires are either in the asserted state
  525.   (on) of +12 volts or in the negated state (off) of -12 volts.  One of
  526.   these wires are is a wire to signal the computer to stop sending bytes
  527.   out the serial port cable.  Conversely, another wire signals the
  528.   device attached to the serial port to stop sending bytes to the
  529.   computer.  If the attached device is a modem, other wires may tell the
  530.   modem to hang up the telephone line or tell the computer that a
  531.   connection has been made or that the telephone line is ringing
  532.   (someone is attempting to call in).  See section ``Pinout and
  533.   Signals'' for more details.
  534.  
  535.  
  536.   3.1.3.  RS-232 or EIA-232, etc.
  537.  
  538.   The serial port (not the USB) is usually a RS-232-C, EIA-232-D, or
  539.   EIA-232-E.  These three are almost the same thing.  The original RS
  540.   (Recommended Standard) prefix became EIA (Electronics Industries
  541.   Association) and later EIA/TIA after EIA merged with TIA
  542.   (Telecommunications Industries Association).  The EIA-232 spec
  543.   provides also for synchronous (sync) communication but the hardware to
  544.   support sync is almost always missing on PC's.  The RS designation is
  545.   obsolete but is still widely used.  EIA will be used in this howto.
  546.   Some documents use the full EIA/TIA designation.  For info on other
  547.   (non-EIA-232) serial ports see the section ``Other Serial Devices (not
  548.   async EIA-232)''
  549.  
  550.  
  551.   3.2.  I/O Address & IRQ
  552.  
  553.   Since the computer needs to communicate with each serial port, the
  554.   operating system must know that each serial port exists and where it
  555.   is (its I/O address).  It also needs to know what wire (IRQ number)
  556.   the serial port is to use to request service from the computer's CPU.
  557.   It requests service by sending an interrupt on this wire.  Thus every
  558.   serial port device must store in its non-volatile memory both its I/O
  559.   address and its Interrupt ReQuest number: IRQ.  See ``Interrupts''.
  560.   For the PCI bus it doesn't work exactly this way since the PCI bus has
  561.   its own system of interrupts.  But since the PCI-aware BIOS sets up
  562.   chips to map these PCI interrupts to IRQs, it seemingly behaves just
  563.   as described above.
  564.  
  565.   The serial ports are labeled ttyS0, ttyS1, etc. (corresponding to
  566.   COM1, COM2, etc. in DOS/Windows).  Which one of these names refers to
  567.   certain physical serial port is determined by the I/O address stored
  568.   inside the hardware chip of the physical port.  This mapping of names
  569.   (such as ttyS1) to I/O addresses and IRQ's may be set by the
  570.   "setserial" command.  ``What is Setserial''.  This does not set the
  571.   I/O address and IRQ on the hardware itself (which is set by jumpers or
  572.   by plug-and-play software).
  573.  
  574.   I/O addresses are not the same as memory addresses.  When an I/O
  575.   addresses is put onto the computer's address bus, another wire is
  576.   energized.  This both tells main memory to ignore the address and
  577.   tells all devices which have I/O addresses (such as the serial port)
  578.   to listen to the address to see if it matches.  If the address
  579.   matches, then the I/O device reads the data on the data bus.
  580.  
  581.  
  582.   3.3.  Interrupts
  583.  
  584.   When the serial port gets a byte (or sometimes after it gets say 8 or
  585.   14 bytes) it signals the CPU to fetch it (them) by sending an
  586.   electrical signal known as an interrupt on a dedicated conductor.  It
  587.   will also send this interrupt if there is an unexpected delay while
  588.   waiting for the next byte to arrive (known as a timeout).
  589.  
  590.   Each interrupt conductor (inside the computer) has a number (IRQ) and
  591.   the serial port must know which conductor to use to signal on.  For
  592.   example, ttyS0 normally uses IRQ number 4 known as IRQ4 (or IRQ 4).  A
  593.   list of them and more will be found in "man setserial" (search for
  594.   "Configuring Serial Ports").  Interrupts are issued whenever the
  595.   serial port needs to get the CPU's attention.  It's important to do
  596.   this in a timely manner since the buffer inside the serial port can
  597.   hold only 16 (1 in old modems) incoming bytes.  If the CPU fails to
  598.   remove such received bytes promptly, then there will not be any space
  599.   left for any more incoming bytes and overflow (overrunning) may occur
  600.   (bytes will be lost).  There is no ``Flow Control'' to prevent this.
  601.  
  602.   Interrupts are also issued when the serial port has just sent out all
  603.   16 of its bytes from its small transmit buffer out the external cable.
  604.   It then has space for 16 more outgoing bytes.  The interrupt is to
  605.   notify the CPU of that fact so that it may put more bytes in the small
  606.   transmit buffer to be transmitted.  Also, when a modem control line
  607.   changes state an interrupt is issued.
  608.  
  609.   Interrupts convey a lot of information but only indirectly.  The
  610.   interrupt itself just tells a chip called the interrupt controller
  611.   that a certain serial port needs attention.  The interrupt controller
  612.   then signals the CPU.  The CPU runs a special program (part of the
  613.   serial driver software) to service the serial port called an interrupt
  614.   service routine (or interrupt handler).  It tries to find out what has
  615.   happened at the serial port and then deals with the problem such a
  616.   transferring bytes from (or to) the serial port's hardware buffer.
  617.   This program can easily find out what has happened since the serial
  618.   port has registers at I/O addresses known to the the serial driver
  619.   software.  These registers contain status information about the serial
  620.   port.  The software reads these registers and by inspecting the
  621.   contents, finds out what has happened and takes appropriate action.
  622.  
  623.  
  624.   3.4.  Data Flow (Speeds)
  625.  
  626.   Data (bytes representing letters, pictures, etc.) flows into and out
  627.   of your serial port.  Flow rates (such as 56k (56000) bits/sec) are
  628.   (incorrectly) called "speed".  But almost everyone says "speed"
  629.   instead of "flow rate".
  630.  
  631.   It's important to understand that the average speed is often less than
  632.   the specified speed.  Waits (or idle time) result in a lower average
  633.   speed.  These waits may include long waits of perhaps a second due to
  634.   ``Flow Control''.  At the other extreme there may be very short waits
  635.   (idle time) of several micro-seconds between bytes.  If the device on
  636.   the serial port (such as a modem) can't accept the full serial port
  637.   speed, then the average speed must be reduced.
  638.  
  639.  
  640.   3.5.  Flow Control
  641.  
  642.   Flow control means the ability to stop the flow of bytes in a wire.
  643.   It also includes provisions to restart the flow without any loss of
  644.   bytes.  Flow control is needed for modems to allow a jump in flow
  645.   rates.
  646.  
  647.  
  648.   3.5.1.  Flow Control Explained by an Example
  649.  
  650.   For example, consider the case where you connect a 36.6k modem to your
  651.   serial port  that simply sends and receives bytes over the phone line
  652.   at exactly 36.6k bits per second (bps).  It's not doing any data
  653.   compression or error correction.  You have set the serial port speed
  654.   to 115,200 bits/sec (bps), and you are sending data from your computer
  655.   to the phone line.  Then the flow from the your computer to your modem
  656.   is at 115.2k bps.  However the flow from your modem out the phone line
  657.   is at best only 33.6k bps.  Since a faster flow (115.2k) is going into
  658.   your modem than is coming out of it, the modem is storing the excess
  659.   flow (115.2k -33.6k = 81.6k bps) in one of its buffers.  This buffer
  660.   would eventually overrun (run out of storage space) unless the 115.2k
  661.   flow is stopped.
  662.  
  663.   But now flow control comes to the rescue.  When the modem's buffer is
  664.   almost full, the modem sends a stop signal to the serial port.  The
  665.   serial port passes on the stop signal on to the device driver and the
  666.   115.2k bps flow is halted.  Then the modem continues to send out data
  667.   at 33.6k bps drawing on the data it previous accumulated in its (the
  668.   modem's) buffer.  Since nothing is coming into the buffer, the level
  669.   of bytes in it starts to drop.  When almost no bytes are left in the
  670.   buffer, the modem sends a start signal to the serial port and the
  671.   115.2k flow from the computer to the modem resumes.  In effect, flow
  672.   control creates an average flow rate (in this case 33.6k) which is
  673.   significantly less than the "on" flow rate of 115.2k bps.  This is
  674.   "start-stop" flow control.
  675.  
  676.   The above is a simple example of flow control for flow from the
  677.   computer to a modem , but there is also flow control which is used for
  678.   the opposite direction of flow: from a modem to a computer.  This is
  679.   the essence of flow control but there are many more details to
  680.   explain.
  681.  
  682.   Note that the transmit buffer in the modem as mentioned above is in
  683.   addition to the two transmit buffers of the serial port: the small
  684.   hardware buffer and the large one in main memory.  Flow control
  685.   protects certain buffers from overflowing.  The small hardware buffers
  686.   are not protected in this way but rely instead on a fast response to
  687.   the interrupts they issue.
  688.  
  689.  
  690.   3.5.2.  Symptoms of No Flow Control
  691.  
  692.   Understanding flow-control theory can be of practical use.  The
  693.   symptom of no flow control is chunks of data missing from files sent
  694.   without the benefit of flow control.  This is because when overflow
  695.   happens, it's usually more than just a few bytes that overflow and are
  696.   lost.  Often hundreds or even thousands of bytes get lost, and all in
  697.   contiguous chunks.
  698.  
  699.  
  700.   3.5.3.  Hardware vs. Software Flow Control
  701.  
  702.   For modems, it's best to use "hardware" flow control that uses two
  703.   dedicated "modem control" wires to send the "stop" and "start" voltage
  704.   signals.  See ``RTS/CTS, DTR and DTR/DSR Hardware Flow Control''.
  705.   Software flow control uses the main receive and transmit wires to send
  706.   the start and stop signals.  It uses the ASCII control characters DC1
  707.   (start) and DC3 (stop) for this purpose.  They are just inserted into
  708.   the regular stream of data.  Software flow control is not only slower
  709.   in reacting but also does not allow the sending of binary data thru
  710.   the modem since binary data will likely contain the control characters
  711.   DC1 and DC3 used for flow control.
  712.  
  713.  
  714.   3.6.  Data Flow Path, Buffers
  715.  
  716.   In addition to the pair of 16-byte serial port buffers (in the
  717.   hardware)  there is still another pair of buffers.  These are large
  718.   buffers (perhaps 8k) in main memory also known as serial port buffers.
  719.   When an application program sends bytes to the serial port they first
  720.   get stashed in the the transmit serial port buffer in main memory.
  721.   The pair consists of both this transmit buffer and a receive buffer
  722.   for the opposite direction of byte-flow.
  723.  
  724.   The serial device driver takes out say 16 bytes from this transmit
  725.   buffer, one byte at a time and puts them into the 16-byte transmit
  726.   buffer in the serial hardware for transmission.  Once in that transmit
  727.   buffer, there is no way to stop them from being transmitted.  They are
  728.   then transmitted out of the serial port.  When the device driver (on
  729.   orders from flow control) stops the flow of outgoing bytes from the
  730.   computer, what it actually stops is the flow of outgoing bytes from
  731.   the large transmit buffer in main memory.  Even after this has
  732.   happened and the outgoing serial flow has stopped, an application
  733.   program may keep sending bytes to the 8k transmit buffer until it
  734.   becomes fill.  When it gets fill, the application program can't send
  735.   any more bytes to it (a "write" statement in a C_program blocks) and
  736.   the application program temporarily stops running and waits until some
  737.   buffer space becomes available.  Thus a flow control "stop" is
  738.   ultimately able to stop the program that is sending the bytes.  Even
  739.   though this program stops, the computer does not necessarily stop
  740.   computing.  It may switch to running other processes while it's
  741.   waiting at a flow control stop.  The above was a little oversimplified
  742.   since there is another alternative of having the application program
  743.   itself do something else while it is waiting to "write".
  744.  
  745.  
  746.   3.7.  Complex Flow Control Example
  747.  
  748.   For many situations, there is a transmit path involving several links,
  749.   each with its own flow control.  For example, I type at a text-
  750.   terminal connected to a PC with a modem to access a BBS.  For this I
  751.   use the application program "minicom" which deals with 2 serial ports:
  752.   one connected to a modem and another connected to the text-terminal.
  753.   What I type at the text terminal goes into the first serial port to
  754.   minicom, then from minicom out the second serial port to the modem,
  755.   and then onto the telephone line to the BBS.  The text-terminal has a
  756.   limit to the speed at which bytes can be displayed on its screen and
  757.   issues a flow control "stop" from time to time to slow down the flow.
  758.   What happens when such a "stop" is issued?  Let's consider a case
  759.   where the "stop" is long enough to get thru to the BBS and stop the
  760.   program at the BBS which is sending out the bytes.
  761.  
  762.   Let's trace out the flow of this "stop" (which may be "hardware" on
  763.   some links and "software" on others).  First, suppose I'm "capturing"
  764.   a long file from the BBS which is being sent simultaneously to both my
  765.   text-terminal and a to file on my hard-disk.  The bytes are coming in
  766.   faster than the terminal can handle them so it sends a "stop" out its
  767.   serial port to the first serial port on my PC.  The device driver
  768.   detects it and stops sending bytes from the 8k serial buffer (in main
  769.   memory) to the terminal.  Now minicom still keeps sending out bytes
  770.   for the terminal into this 8k buffer.
  771.  
  772.   When this 8k transmit buffer (on the first serial port) is full,
  773.   minicom must stop writing to it.  Minicom stops and waits.  But this
  774.   also causes minicom to stop reading from the 8k receive buffer on the
  775.   2nd serial port connected to the modem.  Flow from the modem continues
  776.   until this 8k buffer too fills up and sends a different "stop" to the
  777.   modem.  Now the modem's buffer ceases to send to the serial port and
  778.   also fills up.  The modem (assuming error correction is enabled) sends
  779.   a "stop signal" to the other modem at the BBS.  This modem stops
  780.   sending bytes out of its buffer and when its buffer gets fill, another
  781.   stop signal is sent to the serial port of the BBS.  At the BBS, the
  782.   8-k (or whatever) buffer fills up and the program at the BBS can't
  783.   write to it anymore and thus temporarily halts.
  784.  
  785.   Thus a stop signal from a text terminal has halted a programs on a BBS
  786.   computer.  What a Rube Goldberg (complex) sequence of events!  Note
  787.   that the stop signal passed thru 4 serial ports, 2 modems, and one
  788.   application program (minicom).  Each serial port has 2 buffers (in one
  789.   direction of flow): the 8k one and the hardware 16-byte one.  The
  790.   application program may have a buffer in its C_code.  This adds up to
  791.   11 different buffers the data is passing thru.  Note that the small
  792.   serial hardware buffers do not participate directly in flow control.
  793.   If the terminal speed limitation is the bottleneck in the flow from
  794.   the BBS to the terminal, then its flow control "stop" is actually
  795.   stopping the program that is sending from the BBS as explained above.
  796.   But you may ask: How can a "stop" last so long that 11 buffers (some
  797.   of them large) all get filled up?   It can actually happen this way if
  798.   all the buffers were near their upper limits when the terminal sent
  799.   out the "stop".
  800.  
  801.   But if you were to run a simulation on it you would discover that it's
  802.   usually more complicated than this.  At an instant of time some links
  803.   are flowing and others are stopped (due to flow control).  A "stop"
  804.   from the terminal seldom propagates back to the BBS neatly as
  805.   described above.  It may take a few "stops" from the terminal to
  806.   result in one "stop" at the BBS.  To understand what is going on you
  807.   really need to observe a simulation which can be done for a simple
  808.   case with coins on a table.  Use only a few buffers and set the upper
  809.   level for each buffer at only a few coins.
  810.  
  811.   Does one really need to understand all this?  Well, understanding this
  812.   explained to me why capturing text from a BBS was loosing text.  The
  813.   situation was exactly the above example but modem-to-modem flow
  814.   control was disabled.  Chunks of captured text that were supposed to
  815.   also get to my hard-disk never got there because of an overflow at my
  816.   modem buffer due to flow control "stops" from the terminal.  Even
  817.   though the BBS had a flow path to the hard-disk without bottlenecks,
  818.   the overflow due to the terminal happened on this path and chunks of
  819.   text were lost and never even made it to the hard-disk.  Note that the
  820.   flow to the hard-disk passed thru my modem and since the overflow
  821.   happened there, bytes intended for the hard-disk were lost.
  822.  
  823.  
  824.   4.  Is the Serial Port Obsolete?
  825.  
  826.   4.1.  Introduction
  827.  
  828.   The answer is yes, the serial port is obsolete but it's still needed,
  829.   especially for Linux.  The serial port has many shortcomings but
  830.   almost all new PC's seem to come with them them.  Linux supports
  831.   ordinary telephone modems only if they work thru a serial port.
  832.  
  833.   The serial port must pass data between the computer and the external
  834.   cable.  Thus it has two interfaces and both of these interfaces are
  835.   slow.  First we'll consider the interface via external cable to the
  836.   outside world.
  837.  
  838.  
  839.   4.2.  EIA-232 Cable Is Low Speed & Short Distance
  840.  
  841.   The conventional EIA-232 serial port is inherently low speed and is
  842.   severely limited in distance.  Ads often read "high speed" but it can
  843.   only work at "high speed" over very short distances such as to a modem
  844.   located right next to the computer.  Compared to a network card, even
  845.   this "high speed" is low speed.  All of the serial cable wires use a
  846.   common ground return wire so that twisted-pair technology (needed for
  847.   high speeds) can't be used without additional hardware.  More modern
  848.   interfaces for serial ports exist but they are not very popular.  See
  849.   ``Successors to EIA-232''.
  850.  
  851.   It is somewhat tragic that the RS-232 standard from 1969 did not use
  852.   twisted pair technology which could operate about a hundred times
  853.   faster.  Twisted pairs have been used in telephone cables since the
  854.   late 1800's.  In 1888 (over 110 years ago) the "Cable Conference"
  855.   reported its support of twisted-pair (for telephone systems) and
  856.   pointed out its advantages.  But over 80 years after this approval by
  857.   the "Cable Conference", RS-232 failed to utilize it.   Since RS-232
  858.   was originally designed for connecting a terminal to a low speed modem
  859.   located nearby, the need for high speed and longer distance
  860.   transmission was apparently not recognized.
  861.  
  862.  
  863.   4.3.  Inefficient Interface to the Computer
  864.  
  865.   To communicate with the computer, any I/O device needs to have an
  866.   address so that the computer can write to it and read from it.  For
  867.   this purpose many I/O devices (such as serial ports) use a special
  868.   type of address known as an I/O addresses (sometimes called an I/O
  869.   port).   It's actually a range of addresses and the lower address in
  870.   this range is the base address.  If someone only says (or writes)
  871.   "address" it likely really means "base address"
  872.  
  873.   Instead of using I/O, addresses some (non-serial) I/O devices read and
  874.   write directly from/to main memory.  This provides more bandwidth
  875.   since the serial I/O system only moves a byte at a time.  There are
  876.   various ways to read/write directly to main memory.  One way is called
  877.   shared memory I/O (where the shared memory is usually on the same card
  878.   as the I/O device).  Other methods are DMA (direct memory access) on
  879.   the ISA bus and  what is about the same as DMA (only much faster):
  880.   "bus mastering" on the PCI bus.  These methods are a lot faster than
  881.   those used for the serial port.  Thus the conventional serial port
  882.   with it's interrupt driven (every 14 bytes) interface and single bytes
  883.   transfers on a bus which could accommodate 4 (or 8) bytes at a time is
  884.   not suited for very high speed I/O.
  885.  
  886.  
  887.   5.  Multiport Serial Boards/Cards
  888.  
  889.   5.1.  Standard PC Serial Boards
  890.  
  891.   Standard PC serial boards (COM1 - COM4) can be used to, to connect
  892.   external serial devices (modems, serial mice, etc...).  Since PC's no
  893.   longer come with them (but have the chips for this purpose mounted on
  894.   the motherboard), they are hard to find in retail stores.  An internal
  895.   modem for the ISA bus may include a built-in serial port.
  896.  
  897.  
  898.   Note: due to address conflicts, you cannot use COM4 and IBM8514 video
  899.   board (or clones) simultaneously.  This is due to a bug in the IBM8514
  900.   board.
  901.  
  902.  
  903.   5.2.  Dumb Multiport Serial Boards (with 8250/16450/16550A UART's)
  904.  
  905.   They are also called "serial adapters".
  906.   * =>  "setserial" shows details of configuring
  907.  
  908.   ╖  AST FourPort and clones (4 ports) *
  909.  
  910.   ╖  Accent Async-4 (4 ports) *
  911.  
  912.   ╖  Arnet Multiport-8 (8 ports)
  913.  
  914.   ╖  Bell Technologies HUB6 (6 ports)
  915.  
  916.   ╖  Boca BB-1004 (4 ports), BB-1008 (8 ports), BB-2016 (16 ports; See
  917.      the mini-howto) *
  918.  
  919.   ╖  Boca IOAT66 or? ATIO66 (6 ports, Linux doesn't support it's IRQ
  920.      sharing ??  Uses odd-ball 10-cond RJ45-like connectors)
  921.  
  922.   ╖  Boca 2by4 (4 serial ports, 2 parallel ports)
  923.  
  924.  
  925.   ╖  Byterunner (claims low prices)
  926.  
  927.   ╖  Computone ValuePort V4-ISA (AST FourPort compatible) *
  928.  
  929.   ╖  Digi PC/8 (8 ports)
  930.  
  931.   ╖  GTEK BBS-550 (8 ports; See the mini-howto)
  932.  
  933.   ╖  HUB-6 See Bell Technologies.
  934.  
  935.   ╖  Longshine LCS-8880, Longshine LCS-8880+ (AST FourPort compatible) *
  936.  
  937.   ╖  Moxa C104, Moxa C104+ (AST FourPort compatible) *
  938.  
  939.   ╖  PC-COMM (4 ports)
  940.  
  941.   ╖  Sealevel Systems <http://www.sealevel.com> COMM-2 (2 ports), COMM-4
  942.      (4 ports) and COMM-8 (8 ports)
  943.  
  944.   ╖  SIIG I/O Expander 2S IO1812 (4 ports)
  945.  
  946.   ╖  STB-4COM (4 ports)
  947.  
  948.   ╖  Twincom ACI/550
  949.  
  950.   ╖  Usenet Serial Board II (4 ports) *
  951.  
  952.   In general, Linux will support any serial board which uses a 8250,
  953.   16450, 16550, 16550A, 16650 (or compatible) UART, or an internal modem
  954.   which emulates one of the above UARTs.
  955.  
  956.   Note: the BB-1004 and BB-1008 do not support DCD and RI lines, and
  957.   thus are not usable for dialin modems.  They will work fine for all
  958.   other purposes.   Hayes ESP is supported after kernel version 2.1.15.
  959.  
  960.  
  961.   5.3.  Intelligent Multiport Serial Boards
  962.  
  963.   Make sure that a Linux compatible driver is available.  This list is a
  964.   little out of date.
  965.  
  966.   ╖  Comtrol RocketPort (36MHz ASIC; 4, 8, 16 or 32 ports)
  967.      contact: info@comtrol.com or http://www.comtrol.com
  968.      driver status: supported by Comtrol
  969.      driver location: ftp://tsx-11.mit.edu/pub/linux/packages/comtrol
  970.  
  971.   ╖  Computone IntelliPort II (16MHz 80186; 4, 8, or 16 ports),
  972.      IntelliPort II EXpandable (20MHz 80186; 16 - 64 ports)
  973.      contact: Michael H. Warfield, mhw@wittsend.atl.ga.us
  974.      driver status: pre-ALPHA
  975.  
  976.   ╖  Cyclades Cyclom-Y (Cirrus Logic CD1400 UARTs; 8 - 32 ports),
  977.      Cyclom-Z (25MHz MIPS R3000; 8 - 128 ports)
  978.      contact: sales@cyclades.com or http://www.cyclades.com
  979.      driver status: supported by Cyclades
  980.      driver location: ftp://ftp.cyclades.com/pub/cyclades and included
  981.      in Linux kernel since version 1.1.75
  982.  
  983.   ╖  Decision PCCOM8 (8 ports)
  984.      contact: pccom8@signum.se
  985.      driver location: ftp://ftp.signum.se/pub/pccom8
  986.  
  987.  
  988.   ╖  Digi PC/Xi (12.5MHz 80186; 4, 8, or 16 ports),
  989.      PC/Xe (12.5/16MHz 80186; 2, 4, or 8 ports),
  990.      PC/Xr (16MHz IDT3041; 4 or 8 ports),
  991.      PC/Xem (20MHz IDT3051; 8 - 64 ports)
  992.      contact: sales@dgii.com or http://www.dgii.com
  993.      driver status: supported by Digi
  994.      driver location: ftp://ftp.dgii.com/drivers/linux and included in
  995.      Linux kernel since version 2.0
  996.  
  997.   ╖  Digi COM/Xi (10MHz 80188; 4 or 8 ports)
  998.      contact: Simon Park, si@wimpol.demon.co.uk
  999.      driver status: ALPHA
  1000.      note: Simon is often away from email for months at a time due to
  1001.      his job.  Mark Hatle, fray@krypton.mankato.msus.edu has graciously
  1002.      volunteered to make the driver available if you need it.  Mark is
  1003.      not maintaining or supporting the driver.
  1004.  
  1005.  
  1006.   ╖  Equinox SuperSerial Technology (30MHz ASIC; 2 - 128 ports)
  1007.      contact: sales@equinox.com or http://www.equinox.com
  1008.      driver status: supported by Equinox
  1009.      driver location: ftp://ftp.equinox.com/library/sst
  1010.  
  1011.  
  1012.   ╖  GTEK Cyclone (16C654 UARTs; 6, 16 and 32 ports),
  1013.      SmartCard (24MHz Dallas DS80C320; 8 ports),
  1014.      BlackBoard-8A (16C654 UARTs; 8 ports),
  1015.      PCSS (15/24MHz 8032; 8 ports)
  1016.      contact: spot@gtek.com or http://www.gtek.com
  1017.      driver status: supported by GTEK
  1018.      driver location: ftp://ftp.gtek.com/pub
  1019.  
  1020.  
  1021.   ╖  Hayes ESP (COM-bic; 1 - 8 ports)
  1022.      contact: Andrew J. Robinson, arobinso@nyx.net or
  1023.      http://www.nyx.net/~arobinso
  1024.      driver status: Will be supported by Linux kernel (1998).  Also
  1025.      supported by author
  1026.      driver location: http://www.nyx.net/~arobinso and included in Linux
  1027.      kernel since version 2.1.15.  Setserial 2.15+ supports.
  1028.  
  1029.  
  1030.   ╖  Maxpeed SS (Toshiba; 4, 8 and 16 ports)
  1031.      contact: info@maxpeed.com or http://www.maxpeed.com
  1032.      driver status: supported by Maxpeed
  1033.      driver location: ftp://maxpeed.com/pub/ss
  1034.  
  1035.  
  1036.   ╖  Moxa C218 (12MHz 80286; 8 ports),
  1037.      Moxa C320 (40MHz TMS320; 8 - 32 ports)
  1038.      contact: info@moxa.com.tw or http://www.moxa.com.tw
  1039.      driver status: supported by Moxa
  1040.      driver location: ftp://ftp.moxa.com.tw/drivers/c218-320/linux
  1041.  
  1042.  
  1043.   ╖  SDL RISCom/8 (Cirrus Logic CD180; 8 ports)
  1044.      contact: sales@sdlcomm.com or http://www.sdlcomm.com
  1045.      driver status: supported by SDL
  1046.      driver location: ftp://ftp.sdlcomm.com/pub/drivers
  1047.  
  1048.  
  1049.   ╖  Specialix SX (25MHz T225; 8? - 32 ports),
  1050.      SIO/XIO (20 MHz Zilog Z280; 4 - 32 ports)
  1051.      contact:  <mailto:R.E.Wolff@BitWizard.nl>
  1052.      driver status: BETA / Supported by Specialix
  1053.      driver location:  <http://www.BitWizard.nl/specialix/>
  1054.      old driver location:
  1055.      ftp://metalab.unc.edu/pub/Linux/kernel/patches/serial
  1056.  
  1057.   ╖  Stallion EasyIO-4 (4 ports), EasyIO-8 (8 ports), and
  1058.      EasyConnection (8 - 32 ports) - each with Cirrus Logic CD1400
  1059.      UARTs,
  1060.      Stallion (8MHz 80186 CPU; 8 or 16 ports),
  1061.      Brumby (10/12 MHz 80186 CPU; 4, 8 or 16 ports),
  1062.      ONboard (16MHz 80186 CPU; 4, 8, 12, 16 or 32 ports),
  1063.      EasyConnection 8/64 (25MHz 80186 CPU; 8 - 64 ports)
  1064.      contact: sales@stallion.com or http://www.stallion.com
  1065.      driver status: supported by Stallion
  1066.      driver location: ftp://ftp.stallion.com/drivers/ata5/Linux and
  1067.      included in linux kernel since 1.3.27
  1068.  
  1069.  
  1070.   A review of Comtrol, Cyclades, Digi, and Stallion products was printed
  1071.   in the June 1995 issue of the Linux Journal.  The article is available
  1072.   at http://www.ssc.com/lj/issue14.
  1073.  
  1074.  
  1075.   6.  Configuring the I/O Address, IRQ, and Name
  1076.  
  1077.   6.1.  Introduction
  1078.  
  1079.   Configuring can be divided into two parts: The low level configuring
  1080.   is done by assigning the port an I/O address, an IRQ number and a name
  1081.   (such as ttyS1).  It's done by setting jumpers (or using plug-and-play
  1082.   methods to do the equivalent) and by the "setserial" program.  That's
  1083.   the topic of this section.
  1084.  
  1085.   The high level configuring uses the "stty" program (or the equivalent
  1086.   done by an application program).  It assigns the serial port a speed
  1087.   (baud rate), sets up the possible translation of certain characters
  1088.   sent to the serial port, etc.  It's covered (but not in detail) by the
  1089.   manual page "stty".  The meaning of some of the settings used by the
  1090.   stty command are sometimes better explained in the "termios" manual
  1091.   page.
  1092.  
  1093.   In simple cases the serial ports configure themselves without the user
  1094.   doing anything.  Communication programs that use the serial port often
  1095.   do the high level configuring.   If you have a valid name for a serial
  1096.   port such as /dev/ttyS1, then the low level configuring has already
  1097.   been done.  It often is done automatically by a call to "setserial"
  1098.   which is made by a startup file which runs each time you start your
  1099.   computer.  Major distributions of Linux provide such a file with the
  1100.   "setserial" command residing in it.  See ``Boot-time Configuration''.
  1101.  
  1102.  
  1103.   6.2.  Set I/O Address & IRQ
  1104.  
  1105.   See ``I/O Address & IRQ'' for an explanation of what these are.  Each
  1106.   serial port must have an I/O address, and an interrupt (IRQ).  There
  1107.   are the four serial ports corresponding to COM1 - COM4:
  1108.  
  1109.  
  1110.  
  1111.        ttyS0 (COM1) address 0x3f8 IRQ 4
  1112.        ttyS1 (COM2) address 0x2f8 IRQ 3
  1113.        ttyS2 (COM3) address 0x3e8 IRQ 4
  1114.        ttyS3 (COM4) address 0x2e8 IRQ 3
  1115.  
  1116.  
  1117.  
  1118.  
  1119.   When Linux boots, the kernel may detect at least the first two serial
  1120.   ports and display a message to that effect.  Notice that by default
  1121.   these devices have overlapping IRQs.  Unless you use kernel 2.2 or
  1122.   better you cannot use all of the ports in this default configuration,
  1123.   and you must reassign different IRQs.  See section ``Can I Use More
  1124.   Than Two Serial Devices?'' on setting IRQs.
  1125.  
  1126.  
  1127.   6.3.
  1128.  
  1129.   Can I Use More Than Two Serial Devices?  Interrupt Conflicts
  1130.  
  1131.   You don't need to read this section, unless you want to use three or
  1132.   more serial devices... (assuming you don't have a multiport board).
  1133.  
  1134.   The number of serial ports you can use may be limited by the number of
  1135.   port I/O addresses available (and prior to kernel 2.2 by the
  1136.   availability of IRQs).  These limits are not a Linux limitation, but a
  1137.   limitation of the PC architecture.  Each serial device must be
  1138.   assigned it's unique I/O address range (and prior to kernel 2.2 its
  1139.   unique IRQ).  Unless you are using a multiport board designed for
  1140.   interrupt sharing or using a kernel version 2.2 or better, Linux is
  1141.   not designed to share interrupts.  If you try to share an interrupt
  1142.   when you shouldn't it may work out OK provided the two devices are not
  1143.   operating at the same time.  Otherwise, one device may work OK but the
  1144.   other one will not and the program using it will hang (or be very
  1145.   slow).
  1146.  
  1147.  
  1148.   Multiport serial boards (at least the "intelligent" ones) are
  1149.   specially designed to have multiple serial ports that share the same
  1150.   IRQ for all serial ports on the board.  This is one of the reasons why
  1151.   they need special drivers (some of which are built into Linux).  Linux
  1152.   gets data from them by using a different I/O address for each port on
  1153.   the board.
  1154.  
  1155.  
  1156.   6.3.1.  Choosing Serial IRQs (required only if your kernel version <
  1157.   2.2)
  1158.  
  1159.   Even if your kernel version is 2.2 or greater, you may want to set up
  1160.   IRQs to avoid conflicts with other devices, or get slightly greater
  1161.   efficiency by avoiding the sharing of IRQs.  Your PC may normally come
  1162.   with ttyS0 and ttyS2 at IRQ 4, and ttyS1 and ttyS3 at IRQ 3.  You can
  1163.   see what the driver thinks the assigned IRQs are by typing: setserial
  1164.   -g /dev/ttyS*.  These are not necessarily the same as set in the
  1165.   hardware.
  1166.  
  1167.   Looking at /proc/interrupts will show which IRQs are being used by
  1168.   programs currently running.  To use more than two serial devices, you
  1169.   will have to reassign an interrupt.  One choice is to reassign an
  1170.   interrupt from your parallel port (provided it's not already taken by
  1171.   a sound card).  Your PC normally comes with IRQ 5 and IRQ 7 set up as
  1172.   interrupts for your parallel ports, but few people use two parallel
  1173.   ports.  You can reassign one of the interrupts to a serial device, and
  1174.   still happily use a parallel port.  You will need the setserial
  1175.   program to do this.  In addition, you may have to set the jumpers on
  1176.   your boards, or use plug-and-play methods.
  1177.  
  1178.  
  1179.   You should set things up so that there is one, and only one interrupt
  1180.   for each serial device unless you have kernel 2.2 or later.  Here is
  1181.   how Greg set his up in /etc/rc.d/rc.serial - you should do it in a
  1182.   file which runs upon startup:
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.   /sbin/setserial /dev/ttyS0 irq 3        # my serial mouse
  1190.   /sbin/setserial /dev/ttyS1 irq 4        # my Wyse dumb terminal
  1191.   /sbin/setserial /dev/ttyS2 irq 5        # my Zoom modem
  1192.   /sbin/setserial /dev/ttyS3 irq 9        # my USR modem
  1193.  
  1194.  
  1195.  
  1196.  
  1197.   Standard IRQ assignments:
  1198.  
  1199.           IRQ  0    Timer channel 0 (May mean "no interrupt".  See below.)
  1200.           IRQ  1    Keyboard
  1201.           IRQ  2    Cascade for controller 2
  1202.           IRQ  3    Serial port 2
  1203.           IRQ  4    Serial port 1
  1204.           IRQ  5    Parallel port 2, Sound card
  1205.           IRQ  6    Floppy diskette
  1206.           IRQ  7    Parallel port 1
  1207.           IRQ  8    Real-time clock
  1208.           IRQ  9    Redirected to IRQ2
  1209.           IRQ 10    not assigned
  1210.           IRQ 11    not assigned
  1211.           IRQ 12    not assigned
  1212.           IRQ 13    Math coprocessor
  1213.           IRQ 14    Hard disk controller 1
  1214.           IRQ 15    Hard disk controller 2
  1215.  
  1216.  
  1217.  
  1218.   IRQ 0 is special for the serial port.  It tells the driver that there
  1219.   is no interrupt for it and the driver then will use polling methods.
  1220.   This is quite inefficient but can be tried if there is an interrupt
  1221.   conflict or mis-set interrupt.  The advantage of assigning this is
  1222.   that you don't need to know what interrupt is set in the hardware.  It
  1223.   should be used only as a temporary expedient until you are able to
  1224.   find a real interrupt to use.
  1225.  
  1226.   There is really no Right Thing to do when choosing interrupts.  Just
  1227.   make sure it isn't being used by the motherboard, or any other boards.
  1228.   2, 3, 4, 5, or 7  is a good choice.  ``not assigned'' means that
  1229.   currently nothing standard uses these IRQs.  Also note that IRQ 2 is
  1230.   the same as IRQ 9.  You can call it either 2 or 9, the serial driver
  1231.   is very understanding.  If you have a serial board with a 16-bit bus
  1232.   connector, you can also use IRQ 10, 11, 12 or 15.
  1233.  
  1234.  
  1235.   Just make sure you don't use IRQs 1, 6, 8, 13 or 14!  These are used
  1236.   by your mother board.  You will make her very unhappy by taking her
  1237.   IRQs.  When you are done, double-check /proc/interrupts when programs
  1238.   that use interrupts are being run and make sure there are no
  1239.   conflicts.
  1240.  
  1241.  
  1242.   6.3.2.  Setting Serial Device Addresses
  1243.  
  1244.   Next, you must set the port address.  Check the manual on your board
  1245.   for the jumper settings or use plug-and-play methods (See Plug-and-
  1246.   Play-HOWTO).  There can only be one serial device at each address.
  1247.   Your ports will usually come configured as follows:
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.   ttyS0 address 0x3f8
  1256.   ttyS1 address 0x2f8
  1257.   ttyS2 address 0x3e8
  1258.   ttyS3 address 0x2e8
  1259.  
  1260.  
  1261.  
  1262.  
  1263.   Choose which address you want each serial device to have and set the
  1264.   jumpers (or use plug-and-play) accordingly.  Greg had his modem on
  1265.   ttyS2, his mouse and printer on ttyS1, and his text-terminal on ttyS0.
  1266.  
  1267.  
  1268.   6.3.3.  Giving the IRQ and IO Address to Setserial
  1269.  
  1270.   Now you need to edit the "setserial" command which is run each time
  1271.   you start linux.  If it uses the autoconfig option then it will show
  1272.   the type of uart found.  If it reports "unknown" there may be no uart
  1273.   there.  When you reboot, Linux should display the IRQ and IO addresses
  1274.   the serial that driver the serial driver thinks is correct (It may be
  1275.   wrong).
  1276.  
  1277.   If you look at the boot-time messages on the screen, the IRQ Linux
  1278.   first reports may not correspond to the IRQ you gave to setserial.  In
  1279.   this case wait and see if you see the same message later with the
  1280.   correct IRQ.  The first message is when running setserial was
  1281.   initiated by the kernel and not by the setserial command in a file.
  1282.   Linux does not normally do any IRQ detection when it boots, because
  1283.   IRQ detection is dicey and can be fooled.  You can check /proc/ioports
  1284.   to see what I/O port addresses are in use by currently running
  1285.   processes after Linux boots.
  1286.  
  1287.  
  1288.   6.4.  Can Linux Configure The Serial Devices Automagically?
  1289.  
  1290.   Yes.  If it's not already set up like this (or close to it) you may
  1291.   set Linux up to detect and set up the serial devices automatically on
  1292.   startup.  If needed add the line:
  1293.  
  1294.  
  1295.  
  1296.        /sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig
  1297.  
  1298.  
  1299.  
  1300.   to your /etc/rc.d/rc.serial or /etc/rc.boot/0setserial file.  Do this
  1301.   for every serial port you want to auto configure.  Be sure to give a
  1302.   device name that really does exist on your machine.
  1303.  
  1304.  
  1305.   6.5.  Notes For Multiport Boards
  1306.  
  1307.   For board addresses, and IRQs, look at the rc.serial or
  1308.   /etc/rc.boot/0setserial that comes with the setserial program.  It has
  1309.   a lot of detail on multiport boards, including I/O addresses and
  1310.   device names.
  1311.  
  1312.  
  1313.   6.6.  Devices: modem, mouse
  1314.  
  1315.   On some installations, two extra devices will be created, /dev/modem
  1316.   for your modem and /dev/mouse for your mouse.  Both of these are
  1317.   symbolic links to the appropriate device in /dev which you specified
  1318.   during the installation (unless you have a bus mouse, then /dev/mouse
  1319.   will point to the bus mouse device).
  1320.  
  1321.   There has been some discussion on the merits of /dev/mouse and
  1322.   /dev/modem.  I discourage the use of these links.  In particular, if
  1323.   you are planning on using your modem for dialin you may run into
  1324.   problems because the lock files may not work correctly if you use
  1325.   /dev/modem. Use them if you like, but be sure they point to the right
  1326.   device.  However, if you change or remove this link, some applications
  1327.   (minicom for example) might need reconfiguration.
  1328.  
  1329.  
  1330.   6.7.  The cua Device
  1331.  
  1332.   Each ttyS device has a corresponding cua device.  It is planned to
  1333.   abolish cua so it's best to use ttyS instead (unless you know cua is
  1334.   required).  There is a difference between cua and ttyS but a savvy
  1335.   programmer can make a ttyS port behave just like a cua port so there
  1336.   is no real need for the cua anymore.  Except that some older programs
  1337.   may need to use the cua.
  1338.  
  1339.   What's the difference?  The  main difference between cua and ttyS has
  1340.   to do with what happens in a C_program when an ordinary "open" command
  1341.   tries to open the port. If a cua port has been set to check modem
  1342.   control signals, the port can be opened even if the DCD modem control
  1343.   signal says not to.  Astute programming can force a ttyS port to
  1344.   behave this way also.  Thus a cua port can be easily opened for
  1345.   dialing out on a modem even when the modem fails to assert DCD (since
  1346.   no one has called into it and it's not connected).  That's why cua was
  1347.   once used for dial-out and ttyS used for dial-in.
  1348.  
  1349.  
  1350.   6.8.  Serial Port Devices and Numbers in the /dev directory
  1351.  
  1352.  
  1353.  
  1354.        /dev/ttyS0 major 4, minor 64    /dev/cua0 major 5, minor 64
  1355.        /dev/ttyS1 major 4, minor 65    /dev/cua1 major 5, minor 65
  1356.        /dev/ttyS2 major 4, minor 66    /dev/cua2 major 5, minor 66
  1357.        /dev/ttyS3 major 4, minor 67    /dev/cua3 major 5, minor 67
  1358.  
  1359.  
  1360.  
  1361.  
  1362.   Note that all distributions should come with ttyS devices already made
  1363.   correctly (and possibly with cua devices also).  You can verify this
  1364.   by typing:
  1365.  
  1366.  
  1367.        linux% ls -l /dev/cua*
  1368.        linux% ls -l /dev/ttyS*
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.   6.8.1.  Creating Devices In the /dev Directory
  1375.  
  1376.   If you don't have a device, you will have to create it with the mknod
  1377.   command.  Example, suppose you needed to create devices for ttyS0:
  1378.  
  1379.  
  1380.        linux# mknod -m 666 /dev/ttyS0 c 4 64
  1381.        linux# mknod -m 666 /dev/cua0 c 5 64
  1382.  
  1383.  
  1384.  
  1385.  
  1386.   You can use the MAKEDEV script, which lives in /dev.  This simplifies
  1387.   the making of devices.  For example, if you needed to make the devices
  1388.   for ttyS0 you would type:
  1389.  
  1390.  
  1391.        linux# cd /dev
  1392.        linux# ./MAKEDEV ttyS0
  1393.  
  1394.  
  1395.  
  1396.  
  1397.   This should also set the correct permissions.
  1398.  
  1399.  
  1400.   6.9.  Notes For Dumb Multiport Boards
  1401.  
  1402.   The devices your multiport board uses depends on what kind of board
  1403.   you have.  Some of these may be listed in detail in rc.serial or in
  1404.   0setserial.  These files may be in the setserial package.  I highly
  1405.   recommend getting the latest version of setserial if you are trying to
  1406.   use multiport boards.  You will probably need to create these devices.
  1407.   Either use the mknod command, or the MAKEDEV script.  Devices for
  1408.   multiport boards are made by adding ``64 + port number''.  So, if you
  1409.   wanted to create devices for ttyS17, you would type:
  1410.  
  1411.  
  1412.  
  1413.        linux# mknod -m 666 /dev/cua17 c 5 81
  1414.        linux# mknod -m 666 /dev/ttyS17 c 4 81
  1415.  
  1416.  
  1417.  
  1418.  
  1419.   Note that ``64 + 17 = 81''.  Using the MAKEDEV script, you would type:
  1420.  
  1421.  
  1422.        linux# cd /dev
  1423.        linux# ./MAKEDEV ttyS17
  1424.  
  1425.  
  1426.  
  1427.  
  1428.   Note: the SIIG manual for the IO1812 listing for COM5-COM8 is wrong.
  1429.   They should be COM5=0x250, COM6=0x258, COM7=0x260, and COM8=0x268.
  1430.  
  1431.   Note: the Digi PC/8 Interrupt Status Register is at 0x140.
  1432.  
  1433.   Note: for an AST Fourport, you might need to specify skip_test in
  1434.   rc.serial.
  1435.  
  1436.  
  1437.   6.10.  Notes For Intelligent Multiport Boards
  1438.  
  1439.   Read the information that comes with the driver.  These boards use
  1440.   special devices, and not the standard ones.  This information varies
  1441.   depending on your hardware.
  1442.  
  1443.  
  1444.   7.  Interesting Programs You Should Know About
  1445.  
  1446.   Most info on getty has been moved to Modem-HOWTO with a little info on
  1447.   the use of getty with directly connected terminals now found in Text-
  1448.   Terminal-HOWTO.
  1449.  
  1450.  
  1451.  
  1452.  
  1453.   7.1.  Serial Monitoring/Diagnostics Programs
  1454.  
  1455.   A few Linux programs will monitor the modem control lines and indicate
  1456.   if they are positive (1) or negative (0).
  1457.  
  1458.   ╖  statserial
  1459.  
  1460.   ╖  modemstat (only works on Linux PC consoles.  Will coexist with
  1461.      command line)
  1462.  
  1463.   ╖  serialmon (doesn't monitor RTS, CTS, DSR but logs other functions)
  1464.  
  1465.      You may already have them.  If not, download them from Serial
  1466.      Software <http://metalab.unc.edu/pub/Linux/system/serial/>.  As of
  1467.      June 1998, I know of no diagnostic program in Linux for the serial
  1468.      port.
  1469.  
  1470.  
  1471.   7.2.  Changing Interrupt Priority
  1472.  
  1473.  
  1474.  
  1475.   ╖  irqtune will give serial port interrupts higher priority to improve
  1476.      performance.
  1477.  
  1478.   ╖  hdparm for hard-disk tuning may help some more.
  1479.  
  1480.  
  1481.   7.3.  What is Setserial ?
  1482.  
  1483.   7.3.1.  Introduction
  1484.  
  1485.   setserial is a program which allows you to tell the device driver
  1486.   software the I/O address of the serial port, which IRQ is set in the
  1487.   port's hardware, etc.  With appropriate options, it can also probe (at
  1488.   a given I/O address) for a serial port but you must guess the I/O
  1489.   address (or it may use whatever address the driver thinks your
  1490.   /dev/ttySx is at).  Setserial does not set either IRQ's nor I/O
  1491.   addresses in the serial port hardware itself.  You must tell setserial
  1492.   the identical values that have been set in the hardware.  It's set in
  1493.   the hardware either by jumpers or by plug-and-play.  Do not just
  1494.   invent some values that you think would be nice to use.  However, if
  1495.   you know the I/O address but don't know the IRQ you may command
  1496.   setserial to attempt to determine it.
  1497.  
  1498.   You can see a list of possible commands to use (but not the one-letter
  1499.   options such as -v for verbose --which you should normally use when
  1500.   troubleshooting) by typing setserial with no arguments.  Note that
  1501.   setserial calls an I/O address a "port".  If the argument to setserial
  1502.   is for example just /dev/ttyS1, then you'll see some info about how
  1503.   that device driver is configured for that port.  But this doesn't tell
  1504.   you if the hardware actually has these values set in it.  If fact, you
  1505.   can run setserial and assign a purely fictitious I/O address, any IRQ,
  1506.   and whatever uart type you would like to have.  Then the next time you
  1507.   type "setserial ..." it will display these bogus values without
  1508.   complaint.  Note that assignments made by setserial are lost when the
  1509.   PC is powered down so it is usually run automatically somewhere each
  1510.   time that Linux is booted.
  1511.  
  1512.  
  1513.   7.3.2.  Probing
  1514.  
  1515.   In order to try to find out if you have a certain piece of serial
  1516.   hardware you must first know its I/O address (or the device driver
  1517.   must have an I/O address for it, likely previously set by setserial).
  1518.   To try to detect the physical hardware use the -v (verbose) and
  1519.   autoconfig command to setserial.  If the resulting message shows a
  1520.   uart type such as 16550A, then you're OK.  If instead it shows
  1521.   "unknown" for the uart type, then there is likely no serial port at
  1522.   all at that I/O address.  Some cheap serial ports don't identify
  1523.   themselves correctly so if you see "unknown" you still might have
  1524.   something there.  See the file in which "setserial" is run at boot-
  1525.   time.  Besides auto-probing for uart type, setserial can auto-probe
  1526.   for IRQ's but this doesn't always work right either.
  1527.  
  1528.  
  1529.   7.3.3.  Boot-time Configuration
  1530.  
  1531.   There should be a file somewhere that runs setserial early at boot-
  1532.   time before any process uses the serial port.  If it's not run at
  1533.   boot-time then your Linux system will automatically configure only
  1534.   ttyS{0-3} using the default IRQs of 4 and 3 (with the default IRQ
  1535.   conflicts).  In 1998 it was (temporarily ?) changed to only ttyS{0-1}.
  1536.   So if you have more than 2 serial ports, or want to have control over
  1537.   how the ports are configured you should configure using setserial.  In
  1538.   fact, your distribution may have set things up so that the setserial
  1539.   program runs automatically at boot-time.  It's claimed that Redhat 6.0
  1540.   failed to provide for this.
  1541.  
  1542.   The file that runs setserial at boot-time is likely somewhere in the
  1543.   /etc directory-tree.  You might use "locate" to find a file named:
  1544.   rc.serial, or 0setserial (Debian), etc.  If no such file exists you
  1545.   may need to create it and make sure that it gets run at boot-time.  If
  1546.   such a file is supplied, it should contain a number of commented-out
  1547.   examples.  By uncommenting some of these and/or modifying them, you
  1548.   should be able to set things up correctly.  Make sure that you are
  1549.   using a valid path for setserial, and a valid device name.  You could
  1550.   do a test by executing this file manually (just type its name as the
  1551.   super-user) to see if it works right.  Testing like this is a lot
  1552.   faster than doing repeated reboots to get it right.  Of course you can
  1553.   also test a single setserial command by just typing it on the command
  1554.   line.
  1555.  
  1556.   The file most commonly used to run setserial at boot-time is
  1557.   /etc/rc.d/rc.serial.  The Debian distribution uses
  1558.   /etc/rc.boot/0setserial.  Another file some have used is
  1559.   /etc/rc.d/rc.local but it's not a good idea to use this since it may
  1560.   not be run early enough.  It's been reported that other processes may
  1561.   try to open the serial port before rc.local runs resulting in serial
  1562.   communication failure.
  1563.  
  1564.  
  1565.   7.3.4.  IRQs
  1566.  
  1567.   By default, both ttyS0 and ttyS2 share IRQ 4, while ttyS0 and ttyS3
  1568.   share IRQ 3.  But sharing serial interrupts is not permitted unless
  1569.   you have kernel 2.2 or better.  If you don't have this modern kernel
  1570.   but only have two serial ports ttyS0 and ttyS1 you're still OK since
  1571.   IRQ sharing conflicts don't exist for non-existent devices.
  1572.  
  1573.   But if you do have more than 2 serial ports, then for kernels < 2.2
  1574.   such sharing may be dangerous if the two devices with the same IRQ are
  1575.   being used at the same time.  If you add an internal modem and retain
  1576.   ttyS0 and ttyS1, then you should attempt to find an unused IRQ and set
  1577.   it both on your modem card (or serial port) and then use setserial to
  1578.   assign it to your device driver.  If IRQ 5 is not being used for a
  1579.   sound card, this may be one you can use for a modem.  To set the IRQ
  1580.   in hardware you may need to use isapnp, a PnP BIOS or patch Linux to
  1581.   make it PnP.  To help you determine which spare IRQ's you might have,
  1582.   type "man setserial" and search for say: "IRQ 11".
  1583.  
  1584.  
  1585.   7.4.  What is isapnp ?
  1586.  
  1587.   isapnp is a program to configure Plug-and-Play (PnP) devices on the
  1588.   ISA bus including internal modems.  It comes in a package called
  1589.   "isapnptools" and includes another program, "pnpdump" which finds all
  1590.   your ISA PnP devices and shows you options for configuring them in a
  1591.   format which may be added to the PnP configuration file:
  1592.   /etc/isapnp.conf.  The isapnp command may be put into a startup file
  1593.   so that it runs each time you start the computer and thus will
  1594.   configure ISA PnP devices.  It is able to do this even if your BIOS
  1595.   doesn't support PnP.  See Plug-and-Play-HOWTO.
  1596.  
  1597.  
  1598.   8.  Speed (Flow Rate)
  1599.  
  1600.   By "speed" we really mean the "data flow rate" but almost everybody
  1601.   incorrectly calls it speed.  The speed is measured in bits/sec (or
  1602.   baud).  Speed is set using the "stty" command or by a program which
  1603.   uses the serial port.
  1604.  
  1605.  
  1606.   8.1.  Can't Set a High Enough Speed
  1607.  
  1608.   You need to find out the highest speed supported by your hardware.  As
  1609.   of late 1998 most hardware only supported speeds up to 115.2K bps.  If
  1610.   you  have a application program that doesn't show high enough speeds
  1611.   in its menu, then there are some options you can give to the setserial
  1612.   command so that a low speed command from the communication program
  1613.   will actually result in a higher speed.  With these options, when you
  1614.   set the speed for 38400 the actual speed will be higher.  See the man
  1615.   page for "setserial" and search for speed_hi, spd_cust, baud_base, and
  1616.   divisor.  Note that you must set baud_base to the actual maximum speed
  1617.   of the hardware.  This speed is usually lower than the frequency of
  1618.   the crystal oscillator in the hardware since the crystal frequency is
  1619.   often divided by 16 in the hardware to give the maximum clock speed
  1620.   for bit pulses.   The reason the crystal frequency needs to be higher
  1621.   is so that its full clock signal can be used to take several samples
  1622.   of a bit pulse at the highest speed.  If your software doesn't permit
  1623.   typing in a speed of 230400 to an application program but your
  1624.   physical serial port supports 230400 then you could try the following:
  1625.  
  1626.   setserial /dev/ttyS2 spd_cust baud_base 230400 divisor 1
  1627.   Then to get a speed of 230400 you must claim to the application
  1628.   program that the speed is 38400.  See the man page for setserial for
  1629.   more info about this.
  1630.  
  1631.  
  1632.   If you use setserial test it on the command line first, and then when
  1633.   you have it working, put it into /etc/rc.d/rc.serial or
  1634.   /etc/rc.boot/0setserial so that they are run at startup.  Make sure
  1635.   that you are using a valid path for setserial, and a valid device
  1636.   name.  You can check the settings of a serial port by running:
  1637.  
  1638.  
  1639.  
  1640.        setserial -a /dev/ttyS3
  1641.  
  1642.  
  1643.  
  1644.  
  1645.  
  1646.   8.2.  Higher Serial Throughput
  1647.  
  1648.   If you are seeing slow throughput and serial port overruns on a system
  1649.   with (E)IDE disk drives, you can get hdparm.  This is a utility that
  1650.   can modify (E)IDE parameters, including unmasking other IRQs during a
  1651.   disk IRQ.  This will improve responsiveness and will help eliminate
  1652.   overruns.  Be sure to read the man page very carefully, since some
  1653.   drive/controller combinations don't like this and may corrupt the
  1654.   filesystem.
  1655.  
  1656.   Also have a look at a utility called irqtune that will change the IRQ
  1657.   priority of a device, for example the serial port that your modem is
  1658.   on.  This may improve the serial throughput on your system.  The
  1659.   irqtune FAQ is at http://www.best.com/~cae/irqtune.
  1660.  
  1661.  
  1662.   9.  Communications Programs And Utilities
  1663.  
  1664.   9.1.  List of Software
  1665.  
  1666.   Here is a list of some communication software you can choose from,
  1667.   available via FTP, if they didn't come with your distribution.
  1668.  
  1669.  
  1670.   ╖  ecu - a communications program
  1671.  
  1672.   ╖  C-Kermit <http://www.columbia.edu/kermit/> - portable, scriptable,
  1673.      serial and TCP/IP communications including file transfer,
  1674.      character-set translation, and zmodem support
  1675.  
  1676.   ╖  minicom - telix-like communications program
  1677.  
  1678.   ╖  procomm - procomm-like communications program with zmodem
  1679.  
  1680.   ╖  seyon - X based communication program
  1681.  
  1682.   ╖  xc - xcomm communication package
  1683.  
  1684.   ╖  term and SLiRP offer TCP/IP functionality using a shell account.
  1685.  
  1686.   ╖  screen is another multi-session program.  This one behaves like the
  1687.      virtual consoles.
  1688.  
  1689.   ╖  callback is where you dial out to a remote modem and then that
  1690.      modem hangs up and calls you back (to save on phone bills).
  1691.  
  1692.   ╖  mgetty+fax handles FAX stuff, and provides an alternate ps_getty.
  1693.  
  1694.   ╖  ZyXEL is a control program for ZyXEL U-1496 modems.  It handles
  1695.      dialin, dialout, dial back security, FAXing, and voice mailbox
  1696.      functions.
  1697.  
  1698.  
  1699.   ╖  SLIP and PPP software can be found at
  1700.       ftp://metalab.unc.edu/pub/Linux/system/network/serial.
  1701.  
  1702.  
  1703.   9.2.  kermit and zmodem
  1704.  
  1705.   To use zmodem with kermit, add the following to your .kermrc:
  1706.  
  1707.  
  1708.        define rz !rz < /dev/ttyS3 > /dev/ttyS3
  1709.        define sz !sz \%0 > /dev/ttyS3 < /dev/ttyS3
  1710.  
  1711.  
  1712.  
  1713.  
  1714.   Be sure to put in the correct port your modem is on.  Then, to use it,
  1715.   just type rz or sz <filename> at the kermit prompt.
  1716.  
  1717.   10.  Serial Tips And Miscellany
  1718.  
  1719.   Here are some serial tips you might find helpful...
  1720.  
  1721.  
  1722.   10.1.  Line Drivers
  1723.  
  1724.   For a text terminal, the EIA-232 speeds are fast enough but the usable
  1725.   cable length is often too short.  Balanced technology could fix this.
  1726.   The common method of obtaining balanced communication with a text
  1727.   terminal is to install 2@ line drivers in the serial line to convert
  1728.   unbalanced to balanced (and conversely).  They are a specialty item
  1729.   and are expensive if purchased new.
  1730.  
  1731.   10.2.  Known Defective Hardware
  1732.  
  1733.   10.2.1.  Problem with IBM 8514 Video Board
  1734.  
  1735.   The address of this board (and it's clones) is allegedly 0x2e8, the
  1736.   same as the address of ttyS3.  That is bad news if you try to use
  1737.   ttyS3 at this address.  Another story is that Linux will not detect
  1738.   your internal modem on ttyS3 but that you can use setserial to put
  1739.   ttyS3 at this address and the modem pill work fine.
  1740.  
  1741.  
  1742.   10.2.2.  Problem with AMD Elan SC400 CPU (PC-on-a-chip)
  1743.  
  1744.   This has a race condition between an interrupt and a status register
  1745.   of the UART.  An interrupt is issued when the UART transmitter
  1746.   finishes the transmission of a byte and the UART transmit buffer
  1747.   becomes empty (waiting for the next byte).  But a status register of
  1748.   the UART doesn't get updated fast enough to reflect this.  As a
  1749.   result, the interrupt service routine rapidly checks and determines
  1750.   (erroneously) that nothing has happened.  Thus no byte is sent to the
  1751.   port to be transmitted and the UART transmitter waits in vain for a
  1752.   byte that never arrives.  If the interrupt service routine had waited
  1753.   just a bit longer before checking the status register, then it would
  1754.   have been updated to reflect the true state and all would be OK.
  1755.  
  1756.   There is a proposal to fix this by patching the serial driver.  But
  1757.   Should linux be patched to accommodate defective hardware, especially
  1758.   if this patch may impair performance of good hardware?
  1759.  
  1760.  
  1761.   10.3.  What Are Lock Files ?
  1762.  
  1763.   A lock file is simply a file saying that a particular device is in
  1764.   use.  They are kept in /var/lock.  Formerly they were in
  1765.   /usr/spool/uucp.  Linux lock files are named LCK..name, where name is
  1766.   either a device name, or a UUCP site name.  Certain processes create
  1767.   these locks so that they can have exclusive access to devices.  For
  1768.   instance if you dial out on your modem, a lock will appear telling
  1769.   other processes that someone is using the modem already.  Locks mainly
  1770.   contain the PID of the process that has locked the device.  Most
  1771.   programs look at the lock, and try to determine if that lock is still
  1772.   valid by checking the process table for the process that has locked
  1773.   the device.  If the lock is found to be valid, the program (should)
  1774.   exit.  If not, some programs remove the stale lock, and use the
  1775.   device, creating their own lock in the process.  Other programs just
  1776.   exit and tell you that the device is in use.
  1777.  
  1778.   Having the same physical serial port known by two different device
  1779.   names (such as ttyS0 and cua0) could cause problems.  The lock
  1780.   checking software is aware of ttyS vs. cua but it will make things
  1781.   simpler in this regard by the planned elimination of cua.  See ``The
  1782.   cua Device''.  In other cases, assigning an alternate name to the same
  1783.   device is asking for trouble.
  1784.  
  1785.  
  1786.   11.  Troubleshooting
  1787.  
  1788.   See Modem-HOWTO for troubleshooting related to modems or getty for
  1789.   modems.
  1790.  
  1791.  
  1792.   11.1.  Serial Electrical Test Equipment
  1793.  
  1794.   11.1.1.  Breakout Gadgets, etc.
  1795.  
  1796.   While a multimeter (used as a voltmeter) may be all that you need for
  1797.   just a few terminals, simple special test equipment has been made for
  1798.   testing serial port lines.  Some are called "breakout ... " where
  1799.   breakout means to break out conductors from a cable.  These gadgets
  1800.   have a couple of connectors on them and insert into the serial cable.
  1801.   Some have test points for connecting a voltmeter.  Others have LED
  1802.   lamps which light when certain modem control lines are asserted
  1803.   (turned on).  Still others have jumpers so that you can connect any
  1804.   wire to any wire.  Some have switches.
  1805.  
  1806.   Radio Shack sells (in 1998) a "RS-232 Troubleshooter" or "RS-232 Line
  1807.   Tester" which checks TD, RD, CD, RTS, CTS, DTR, and DSR.  A green
  1808.   light means on (+12 v) while red means off (-12 v).  They also sell a
  1809.   "RS-232 Serial Jumper Box" which permits connecting the pins anyway
  1810.   you choose.
  1811.  
  1812.  
  1813.   11.1.2.  Measuring Voltages
  1814.  
  1815.   Any voltmeter or multimeter, even the cheapest that sells for about
  1816.   $10, should work fine.  Trying to use other methods for checking
  1817.   voltage is tricky.  Don't use a LED unless it has a series resistor to
  1818.   reduce the voltage across the LED.  A 470 ohm resistor is used for a
  1819.   20 ma LED (but not all LED's are 20 ma).  The LED will only light for
  1820.   a certain polarity so you may test for + or - voltages.  Does anyone
  1821.   make such a gadget for automotive circuit testing??  Logic probes may
  1822.   be damaged if you try to use them since the TTL voltages for which
  1823.   they are designed are only 5 volts.  Trying to use a 12 V incandescent
  1824.   light bulb is not a good idea.  It won't show polarity and due to
  1825.   limited output current of the UART it probably will not even light up.
  1826.  
  1827.   To measure voltage on a female connector you may plug in a bent paper
  1828.   clip into the desired opening.  The paper clip's diameter should be no
  1829.   larger than the pins so that it doesn't damage the contact.  Clip an
  1830.   alligator clip (or the like) to the paper clip to connect up.
  1831.  
  1832.  
  1833.   11.1.3.  Taste Voltage
  1834.  
  1835.   As a last resort, if you have no test equipment and are willing to
  1836.   risk getting shocked (or even electrocuted) you can always taste the
  1837.   voltage.  Before touching one of the test leads with your tongue, test
  1838.   them to make sure that there is no high voltage on them.  Touch both
  1839.   leads (at the same time) to one hand to see if they shock you.  Then
  1840.   if no shock, wet the skin contact points by licking and repeat.  If
  1841.   this test gives you a shock, you certainly don't want to use your
  1842.   tongue.
  1843.  
  1844.   For the test for 12 V, Lick a finger and hold one test lead in it.
  1845.   Put the other test lead on your tongue.  If the lead on your tongue is
  1846.   positive, there will be a noticeable taste.  You might try this with
  1847.   flashlight batteries first so you will know what taste to expect.
  1848.  
  1849.   11.2.  Serial Monitoring/Diagnostics
  1850.  
  1851.   A few Linux programs will monitor the modem control lines and indicate
  1852.   if they are positive (1) or negative (0).  See section ``Serial
  1853.   Monitoring/Diagnostics''
  1854.  
  1855.  
  1856.   11.3.  My Serial Port is Physically There but Can't be Found
  1857.  
  1858.   For the PCI bus look at /proc/pci.  Check the BIOS menus.  If it's a
  1859.   PnP serial port, try "pnpdump --dumpregs" and/or see Plug-and-Play-
  1860.   HOWTO.
  1861.  
  1862.   Here are some common mistakes people make:
  1863.  
  1864.   ╖  setserial: They run it (without the "autoconfig" option) or see it
  1865.      displayed on the screen at boot-time, and erroneously think that
  1866.      the result shows how their hardware is actually configured.
  1867.  
  1868.   ╖  /proc/interrupts: When their serial device isn't in use they don't
  1869.      see its interrupt there, and erroneously conclude that their serial
  1870.      port can't be found (or doesn't have an interrupt set).
  1871.  
  1872.   ╖  /proc/ioports: People think this shows the hardware configuration
  1873.      when it only shows about the same data (possibly erroneous) as
  1874.      setserial.
  1875.  
  1876.   You may probe for the serial port using "setserial" with the
  1877.   "autoconfig" argument at the I/O address you think the serial port is
  1878.   at.  If it shows "unknown" for UART type there may be nothing there.
  1879.   See ``What is Setserial''.
  1880.  
  1881.  
  1882.   11.4.  Slow: Text appears on the screen slowly after long delays
  1883.  
  1884.   This may happen with a modem, terminal, or printer.  In most cases
  1885.   only a few words appear and then there is a long wait of many seconds
  1886.   for the next batch of a few words.  For obsolete serial ports, instead
  1887.   of a few words there is only a single character.  You may type but
  1888.   what you type doesn't appear on the screen.  After a delay of many
  1889.   seconds you may see what you typed (or part of it).
  1890.  
  1891.   It's likely slow because interrupt are not working.  This may be due
  1892.   to either an ``Interrupt Conflict'' or a ``Mis-set Interrupts''.  It's
  1893.   a conflict when two devices try to use the same IRQ.  It's mis-set if
  1894.   the device driver listens for the wrong IRQ.  In either case things
  1895.   will work very slowly (or seemingly not at all).  You could get "input
  1896.   overrun" error messages (or find them in logs).
  1897.  
  1898.   Make sure there are no IRQs being illegally shared.  Check all your
  1899.   boards (serial, ethernet, SCSI, etc...).  Make sure the jumper (or
  1900.   PnP) settings, and the setserial parameters are correct for all your
  1901.   serial devices.  Also check /proc/ioports and /proc/interrupts and
  1902.   /proc/pci for conflicts.
  1903.  
  1904.  
  1905.   11.5.  The Startup Screen Show Wrong IRQs for the Serial Ports.
  1906.  
  1907.   Linux does not do any IRQ detection on startup.  It only does serial
  1908.   device detection.  Thus, disregard what it says about the IRQ, because
  1909.   it's just assuming the standard IRQs.  This is done, because IRQ
  1910.   detection is unreliable, and can be fooled.  But when setserial
  1911.   changes the IRQ's, you should see this on the startup screen.
  1912.  
  1913.   So, even though I have my ttyS2 set at IRQ 5, I still see
  1914.  
  1915.   tty02 at 0x03e8 (irq = 4) is a 16550A
  1916.  
  1917.  
  1918.  
  1919.  
  1920.   at first when Linux boots.  You have to use setserial to tell Linux
  1921.   the IRQ you are using.
  1922.  
  1923.  
  1924.   12.  Interrupt Problem Details
  1925.  
  1926.   While the section ``Troubleshooting'' lists problems by symptom, this
  1927.   section explains what will happen if interrupts are set incorrectly.
  1928.   This section helps you understand what caused the symptom, what other
  1929.   symptoms might be due to the same problem, and what to do about it.
  1930.  
  1931.  
  1932.   12.1.  Mis-set Interrupts
  1933.  
  1934.   If you don't understand what an interrupt does see ``Interrupts''.  If
  1935.   a serial port has one IRQ set in the hardware but a different one set
  1936.   in the device driver, the device driver will not receive any
  1937.   interrupts sent by the serial port.  Since the serial port uses
  1938.   interrupts to tell its driver when it needs service (fetching bytes
  1939.   from it's 16-byte receive buffer or putting another 16-bytes in its
  1940.   transmit buffer) one might expect that the serial port would not work
  1941.   at all.
  1942.  
  1943.   But it still may work anyway --sort of.  Why?  Well, besides the
  1944.   interrupt method of servicing the port there's a slow polling method
  1945.   that doesn't need interrupts.  The way it works is that every so often
  1946.   the device driver checks the serial port to see if it needs anything
  1947.   such as if it has some bytes that need fetching from its receive
  1948.   buffer.  If interrupts don't work, the serial driver falls back to
  1949.   this polling method.  But this polling method was not intended to be
  1950.   used a substitute for interrupts.   It's so slow that it's not
  1951.   practical to use and may cause buffer overruns.  Its purpose may have
  1952.   been to get things going again if just one interrupt is lost or fails
  1953.   to do the right thing.  It's also useful in showing you that
  1954.   interrupts have failed.
  1955.  
  1956.   For the 16-byte transmit buffer, 16 bytes will be transmitted and then
  1957.   it will wait until the next polling takes place (several seconds
  1958.   later) before the next 16 bytes is sent out.  Thus transmission is
  1959.   very slow and in small chunks.  Receiving is slow too since bytes that
  1960.   are received by the receive buffer are likely to remain there for
  1961.   several seconds until it is polled.
  1962.  
  1963.   This explains why it takes so long before you see what you typed.
  1964.   When you type say AT to a modem, the AT goes out the serial port to
  1965.   the modem.  The modem then echos the AT back thru the serial port to
  1966.   the screen.  Thus the AT characters have to pass twice thru the serial
  1967.   port.  Normally this happens so fast that AT seems to appear on the
  1968.   screen at the same time you hit the keys on the keyboard.  With
  1969.   polling delays thru the serial port, you don't see what you typed
  1970.   until many seconds later.
  1971.  
  1972.   What about overruns of the 16-byte receive buffer?  This will happen
  1973.   with an external modem since the modem just sends to the serial port
  1974.   at high speed which is likely to overrun the 16-byte buffer.  But for
  1975.   an internal modem, the serial port is on the same card and it's likely
  1976.   to check that this receive buffer has room for more bytes before
  1977.   putting received bytes into it.  In this case there will be no overrun
  1978.   of this receive buffer, but text will just appear on your screen in
  1979.   16-byte chunks at intervals of several seconds.
  1980.  
  1981.   Even with an external modem you might not get overruns.  If just a few
  1982.   characters (under 16) are sent you don't get overruns since the buffer
  1983.   likely has room for them.  But attempts to send a larger number of
  1984.   bytes from your modem to your screen may result in overruns.  However,
  1985.   more than 16 (with no gaps) can get thru OK if the timing is right.
  1986.   For example, if 32 bytes were received (and no more bytes followed),
  1987.   the polling might just happen after the first 16 bytes had been
  1988.   received.  Then there would be space for the next 16 bytes so that 32
  1989.   bytes gets thru OK.  Similar conditions might pass between 16 to 31
  1990.   bytes thru OK.  But it's also likely that only an occasional 16-byte
  1991.   chunk will get thru and huge gaps of missing data will be lost.
  1992.  
  1993.   If you have an obsolete serial port with only a 1-byte buffer (or it's
  1994.   been incorrectly set to work like a 1-byte buffer) then the situation
  1995.   will be much worse than described above and only one character will
  1996.   occasionally make it thru the port.  Every character received causes
  1997.   an overrun (and is lost) except for the last character received.  This
  1998.   character is likely to be just a line-feed since this is often the
  1999.   last character to be transmitted in a burst of characters sent to your
  2000.   screen.  Thus you may type AT<return> to the modem but never see AT on
  2001.   the screen.  All you see several seconds later is that the cursor
  2002.   drops down one line (a line feed).  This has happened to me with a
  2003.   16-byte FIFO buffer that was behaving like a 1-byte buffer.
  2004.  
  2005.   When a communication program starts up, it expects interrupts to be
  2006.   working.  It's not geared to using this slow polling-like mode of
  2007.   operation.  Thus all sorts of mistakes may be made such as setting up
  2008.   the serial port and/or modem incorrectly.  It may fail to realize when
  2009.   a connection has been made.  If a script is being used for login, it
  2010.   may fail (caused by timeout) due to the polling delays.
  2011.  
  2012.  
  2013.   12.2.  Interrupt Conflict
  2014.  
  2015.   When two devices have the same IRQ number it's called sharing
  2016.   interrupts.  Under some conditions this sharing works out OK.
  2017.   Starting with kernel version 2.2, serial ports may share interrupts
  2018.   with other serial ports.  Devices on the PCI bus may share the same
  2019.   IRQ interrupt with other devices on the PCI bus.  In other cases where
  2020.   there is potential for conflict, there should be no problem if no two
  2021.   devices with the same IRQ are ever "in use" at the same time.   More
  2022.   precisely, "in use" really means "open" (in programmer jargon).  In
  2023.   cases other than the exceptions mentioned above (unless special
  2024.   software permits sharing), sharing is not allowed and conflicts arise
  2025.   if sharing is attempted.
  2026.  
  2027.   Even if two processes with conflicting IRQs run at the same time, one
  2028.   of the devices will likely have its interrupts sent to its device
  2029.   driver and may work OK.  The other device will not have its interrupts
  2030.   sent to the correct driver and will likely behave just like a process
  2031.   with mis-set interrupts.  See ``Mis-set Interrupts'' for more details.
  2032.  
  2033.  
  2034.   12.3.  Resolving Interrupt Problems
  2035.  
  2036.   If you are getting a very slow response as described above, then find
  2037.   out what
  2038.  
  2039.  
  2040.   13.  What Are UARTs?
  2041.  
  2042.   UARTs (Universal Asynchronous Receiver Transmitter) are serial chips
  2043.   on your PC motherboard (or on an internal modem card).   The UART
  2044.   function may also be done on a chip that does other things as well.
  2045.   On older computers like many 486's, the chips were on the disk I/O
  2046.   controller card.  Still older computer have dedicated serial boards.
  2047.   The UART's purpose is to convert bytes from the PC's parallel bus to a
  2048.   serial bit-stream.  The cable going out of the serial port is serial
  2049.   and has only one wire for each direction of flow.  The serial port
  2050.   sends out a stream of bits, one bit at a time.  Conversely, the bit
  2051.   stream that enters the serial port via the external cable is converted
  2052.   to parallel bytes that the computer can understand.  UARTs deal with
  2053.   data in byte sized pieces, which is conveniently also the size of
  2054.   ASCII characters.
  2055.  
  2056.   Say you have a terminal hooked up to your PC.  When you type a
  2057.   character, the terminal gives that character to it's transmitter (also
  2058.   a UART).  The transmitter sends that byte out onto the serial line,
  2059.   one bit at a time, at a specific rate.  On the PC end, the receiving
  2060.   UART takes all the bits and rebuilds the (parallel) byte and puts it
  2061.   in a buffer.
  2062.  
  2063.   There are two basic types of UARTs: dumb UARTS and FIFO UARTS.  Dumb
  2064.   UARTs are the 8250, 16450, early 16550, and early 16650.  They are
  2065.   obsolete but if you understand how they work it's easy to understand
  2066.   how the modern ones work with FIFO UARTS ( late 16550, 16550A, 16c552,
  2067.   late 16650, 16750, and 16950).
  2068.  
  2069.   There is some confusion regarding 16550.  Early models had a bug and
  2070.   worked properly only as 16450's.  Later models with the bug fixed were
  2071.   named 16550A but many manufacturers did not accept the name change and
  2072.   continued calling it a 16550.  Most all 16550's in use today are like
  2073.   16550A's.  Linux will report it as being a 16550A even though your
  2074.   hardware manual (or a label note) says it's a 16550.  A similar
  2075.   situation exists for the 16650 (only it's worse since the manufacturer
  2076.   allegedly didn't admit anything was wrong).  Linux will report a late
  2077.   16650 as being a 16650V2.  If it reports it as 16650 it is bad news
  2078.   and only is used as if it had a one-byte buffer.
  2079.  
  2080.   To understand the differences between dumb and FIFO (First In, First
  2081.   Out queue discipline) first let's examine what happens when a UART has
  2082.   sent or received a byte.  The UART itself can't do anything with the
  2083.   data passing thru it, it just receives and sends it.  For the original
  2084.   dumb UARTS, the CPU gets an interrupt from the serial device every
  2085.   time a byte has been sent or received.  The CPU then moves the
  2086.   received byte out of the UART's buffer and into memory somewhere, or
  2087.   gives the UART another byte to send.  The 8250 and 16450 UARTs only
  2088.   have a 1 byte buffer.  That means, that every time 1 byte is sent or
  2089.   received, the CPU is interrupted.  At low transfer rates, this is OK.
  2090.   But, at high transfer rates, the CPU gets so busy dealing with the
  2091.   UART, that is doesn't have time to adequately tend to other tasks.  In
  2092.   some cases, the CPU does not get around to servicing the interrupt in
  2093.   time, and the byte is overwritten, because they are coming in so fast.
  2094.   This is called an "overrun" or "overflow".
  2095.  
  2096.   That's where the FIFO UARTs are useful.  The 16550A (or 16550) FIFO
  2097.   chip comes with 16 byte FIFO buffers.  This means that it can receive
  2098.   up to 14 bytes (or send 16 bytes) before it has to interrupt the CPU.
  2099.   Not only can it wait for more bytes, but the CPU then can transfer all
  2100.   14 (or more) bytes at a time.  Although the interrupt threshold
  2101.   (trigger level) may be set at 8 instead of 14, this is still a
  2102.   significant advantage over the other UARTs, which only have 1 byte
  2103.   buffers.  The CPU receives less interrupts, and is free to do other
  2104.   things.  Data is not lost, and everyone is happy.
  2105.  
  2106.   While most PC's only have a 16550 with 16-byte buffers, better UARTS
  2107.   have even larger buffers.  Note that the interrupt is issued slightly
  2108.   before the buffer get full (at say a "trigger level" of 14 bytes for a
  2109.   16-byte buffer).  This allows room for a few more bytes to be received
  2110.   during the time that the interrupt is being serviced.  The trigger
  2111.   level may be set to various permitted values by kernel software.  A
  2112.   trigger level of 1 will be almost like a dumb UART (except that it
  2113.   still has room for 15 more bytes after it issues the interrupt).
  2114.  
  2115.   If you type something while visiting a BBS, the characters you type go
  2116.   out thru the serial port.  Your typed characters that you see on the
  2117.   screen are what was echoed back thru the telephone line thru your
  2118.   modem and then thru your serial port to the screen.  If you had a
  2119.   16-byte buffer on the serial port which held back characters until it
  2120.   had 14 of them, you would need to type many characters before you
  2121.   could see what you typed (before they appeared on the screen).  This
  2122.   would be very confusing but there is a "timeout" to prevent this.
  2123.   Thus you normally see a character on the screen just as soon as you
  2124.   type it.
  2125.  
  2126.   The "timeout" works like this for the receive UART buffer: If
  2127.   characters arrive one after another, then an interrupt is issued only
  2128.   when say the 14th character reaches the buffer.  But if a character
  2129.   arrives and the next character doesn't arrive soon thereafter, then an
  2130.   interrupt is issued.  This happens even though there are not 14
  2131.   characters in the buffer (there may only be one character in it).
  2132.   Thus when what you type goes thru this buffer, it acts almost like a
  2133.   1-byte buffer even though it is actually a 16-byte buffer (unless your
  2134.   typing speed is a hundred times faster than normal).  There is also
  2135.   "timeout" for the transmit buffer as well.
  2136.  
  2137.   Here's a list of UARTs.  TL is Trigger Level
  2138.  
  2139.   ╖  8250, 16450, early 16550: Obsolete with 1-byte buffers
  2140.  
  2141.   ╖  16550, 16550A, 16c552: 16-byte buffers, TL=1,4,8,14
  2142.  
  2143.   ╖  16650:  32-byte buffers. Speed up to 460.8 Kbps
  2144.  
  2145.   ╖  16750:  64-byte buffer for send, 56-byte for receive.  Speed up to
  2146.      921.6 Kbps
  2147.  
  2148.   ╖  Hayes ESP: 1K-byte buffers.
  2149.  
  2150.   The obsolete ones are only good for modems no higher than 14.4k (DTE
  2151.   speeds up to 38400 bps).  For modern modems you need at least a 16550
  2152.   (and not an early 16550).  For V.90 56k modems, it may be a several
  2153.   percent faster with a 16650 (especially if you are downloading
  2154.   uncompressed files).  The main advantage of the 16650 is its larger
  2155.   buffer size as the extra speed isn't needed unless the modem
  2156.   compression ratio is high.  Some 56k internal modems may come with a
  2157.   16650 ??
  2158.  
  2159.   Non-UART, and intelligent multiport boards use DSP chips to do
  2160.   additional buffering and control, thus relieving the CPU even more.
  2161.   For example, the Cyclades Cyclom, and Stallion EasyIO boards use a
  2162.   Cirrus Logic CD1400 RISC UART, and many boards use 80186 CPUs or even
  2163.   special RISC CPUs, to handle the serial I/O.
  2164.  
  2165.   Most newer PC's (486's, Pentiums, or better) come with 16550A's
  2166.   (usually called just 16550's).  If you have something really old the
  2167.   chip may unplug so that you may be able to upgrade by buying a 16550A
  2168.   chip and replacing your existing 16450 UART.  If the functionality has
  2169.   been put on another type of chip, you are out of luck.  If the UART is
  2170.   socketed, then upgrading is easy (if you can find a replacement).  The
  2171.   new and old are pin-to-pin compatible.  It may be more feasible to
  2172.   just buy a new serial board on the Internet (few retail stores stock
  2173.   them today).
  2174.  
  2175.  
  2176.  
  2177.  
  2178.  
  2179.   14.  Pinout and Signals
  2180.  
  2181.   14.1.  Pinout
  2182.  
  2183.  
  2184.  
  2185.           PINOUT of the SERIAL PORT    (--> direction is out of PC)
  2186.                   (Note DCD is sometimes labeled CD)
  2187.   Pin #   Pin #   Acronym  Full-Name   Direction  What-it-May-Do/Mean
  2188.   9-pin   25-pin
  2189.    3       2      TxD     Transmit Data     -->   Transmits byte out of PC
  2190.    2       3      RxD     Receive Data      <--   Receives bytes into PC
  2191.    7       4      RTS     Request To Send   -->   RTS/CTS flow control
  2192.    8       5      CTS     Clear To Send     <--   RTS/CTS flow control
  2193.    6       6      DSR     Data Set Ready    <--   I'm ready to communicate
  2194.    4      20      DTR     Data Terminal Ready-->  I'm ready to communicate
  2195.    1       8      DCD     Data Carrier Detect<--  Modem connected to another
  2196.    9      22      RI      Ring Indicator    <--   Telephone line ringing
  2197.    5       7              Signal Ground
  2198.  
  2199.  
  2200.  
  2201.  
  2202.   14.2.  Signals May Have No Fixed Meaning
  2203.  
  2204.   Only 3 of the 9 pins have a fixed assignment: transmit, receive and
  2205.   signal ground.  This is fixed by the hardware and you can't change it.
  2206.   But the other signal lines are controlled by software and may do (and
  2207.   mean) almost anything at all.  However they can only be in one of two
  2208.   states: asserted (+12 volts) or negated (-12 volts).  Asserted is "on"
  2209.   and negated is "off".  For example, Linux software may command that
  2210.   DTR be negated and the hardware only carries out this command and puts
  2211.   -12 volts on the DTR pin.  A modem (or other device) that receives
  2212.   this DTR signal may do various things.  If a modem has been configured
  2213.   a certain way it will hang-up the telephone line when DTR is negated.
  2214.   In other cases it may ignore this signal or do something else when DTR
  2215.   is negated (turned off).
  2216.  
  2217.   It's like this for all the 6 signal lines.  The hardware only sends
  2218.   and receives the signals, but what action (if any) they perform is up
  2219.   to the Linux software and the configuration/design of devices that you
  2220.   connect to the serial port.  However, most pins have certain functions
  2221.   which they normally perform but this may vary with the operating
  2222.   system and the device driver configuration.  Under Linux, one may
  2223.   modify the source code to make these signal lines behave differently
  2224.   (some people have).
  2225.  
  2226.  
  2227.   14.3.  Cabling Between Serial Ports
  2228.  
  2229.   A cable from a serial port always connects to another serial port.  A
  2230.   modem or other device that connects to the serial port has a serial
  2231.   port built into it.  For modems, the cable is always straight thru:
  2232.   pin 2 goes to pin 2, etc.  The modem is said to be DCE (Data
  2233.   Communications Equipment) and the computer is said to be DTE (Data
  2234.   Terminal Equipment).  Thus for connecting DTE-to-DCE you use straight-
  2235.   thru cable.  For connecting DTE-to-DTE you must use a null-modem cable
  2236.   and there are many ways to wire such cable (see examples in Text-
  2237.   Terminal-HOWTO).
  2238.  
  2239.   There are good reasons why it works this way.  One reason is that the
  2240.   signals are unidirectional.  If pin 1 sends a signal out of it (but is
  2241.   unable to receive any signal) then obviously you can't connect it to
  2242.   pin 1 of the same type of device.  If you did, they would both send
  2243.   out signals on the same wire to each other but neither would be able
  2244.   to receive any signal.  There are two ways to deal with this
  2245.   situation.  One way is to have a two different types of equipment
  2246.   where pin 1 of the first type sends the signal to pin 1 of the second
  2247.   type (which receives the signal).  That's the way it's done when you
  2248.   connect a PC (DTE) to a modem (DCE).  There's a second way to do this
  2249.   without having two different types of equipment: Connect pin 1 (a
  2250.   sending pin) to a receiving pin (not pin 1) on same type of equipment.
  2251.   That's the way it's done when you connect 2 PC's together or a PC to a
  2252.   terminal (DTE-to-DTE).  The cable used for this is called a null-modem
  2253.   cable.
  2254.  
  2255.   The serial pin designations were originally intended for connecting a
  2256.   dumb terminal to a modem.  The terminal was DTE (Data Terminal
  2257.   Equipment) and the modem was DCE (Data Communication Equipment).
  2258.   Today the PC is usually used as DTE instead of a terminal (but real
  2259.   terminals may still be used this way).  The names of the pins are the
  2260.   same on both DTE and DCE.  The words: "receive" and "transmit" are in
  2261.   this case from the point of view of the PC (DTE).  The transmit pin
  2262.   from the PC transmits to the "transmit" pin of the modem (but actually
  2263.   the modem is receiving the data from this pin so from the point of
  2264.   view of the modem it would be a receive pin).
  2265.  
  2266.   The serial port was originally intended to be used for connecting DTE
  2267.   to DCE which makes cabling simple: just use a straight-thru cable.
  2268.   Thus when one connects a modem one seldom needs to worry about which
  2269.   pin is which.  But people wanted to connect DTE to DTE (for example a
  2270.   computer to a terminal) and various ways were found to do this by
  2271.   fabricating various type of special cables.  In this case what pin
  2272.   connects to what pin becomes more important.
  2273.  
  2274.  
  2275.   14.4.  RTS/CTS and DTR/DSR Flow Control
  2276.  
  2277.   This is "hardware" flow control.  Flow control was previously
  2278.   explained in the ``Flow Control'' subsection but the pins and voltage
  2279.   signals were not.  Linux only supports RTS/CTS flow control at present
  2280.   (but a special driver may exist for a specific application which
  2281.   supports DTR/DSR flow control).  Only RTS/CTS flow control will be
  2282.   discussed since DTR/DSR flow control works the same way.  To get
  2283.   RTS/CTS flow control one needs to either select hardware flow control
  2284.   in an application program or use the command:
  2285.   enables RTS/CTS hardware flow control in the Linux device driver.
  2286.  
  2287.   Then when a DTE (such as a PC) wants to stop the flow into it, it
  2288.   negates RTS.  Negated "Request To Send" (-12 volts) means "Request NOT
  2289.   To Send to me" (stop sending).  When the PC is ready for more bytes it
  2290.   asserts RTS (+12 volts) and the flow of bytes to it resumes.  Flow
  2291.   control signals are always sent in a direction opposite to the flow of
  2292.   bytes that is being controlled.  DCE equipment (modems) works the same
  2293.   way but sends the stop signal out the CTS pin.  Thus it's RTS/CTS flow
  2294.   control using 2 lines.
  2295.  
  2296.   On what pins is this stop signal received?  That depends on whether we
  2297.   have a DCE-DTE connection or a DTE-DTE connection.  For DCE-DTE it's a
  2298.   straight-thru connection so obviously the signal is received on a pin
  2299.   with the same name as the pin it's sent out from.  It's RTS-->RTS (PC
  2300.   to modem) and CTS<--CTS (modem to PC).  For DTE-to-DTE the connection
  2301.   is also easy to figure out.  The RTS pin always sends and the CTS pin
  2302.   always receives.  Assume that we connect two PCs (PC1 and PC2)
  2303.   together via their serial ports.  Then it's RTS(PC1)-->CTS(PC2) and
  2304.   CTS(PC1)<--RTS(PC2).  In other words RTS and CTS cross over.  Such a
  2305.   cable (with other signals crossed over as well) is called a "null
  2306.   modem" cable.  See ``Cabling Between Serial Ports''
  2307.  
  2308.   What is sometimes confusing is that there is the original use of RTS
  2309.   where it means about the opposite of the previous explanation above.
  2310.   This original meaning is: I Request To Send to you.  This request was
  2311.   intended to be sent from a terminal (or computer) to a modem which, if
  2312.   it decided to grant the request, would send back an asserted CTS from
  2313.   its CTS pin to the CTS pin of the computer: You are Cleared To Send to
  2314.   me.  Note that in contrast to the modern RTS/CTS bi-directional flow
  2315.   control, this only protects the flow in one direction: from the
  2316.   computer (or terminal) to the modem.  This original use appears to be
  2317.   little used today on modern equipment (including modems).
  2318.  
  2319.  
  2320.   14.4.1.  The DTR and DSR Pins
  2321.  
  2322.   Just like RTS and CTS, these pins are paired.  For DTE-to-DTE
  2323.   connections they are likely to cross over.  There are two ways to use
  2324.   these pins.  One way is to use them as a substitute for RTS/CTS flow
  2325.   control.  The DTR pin is just like the RTS pin while the DSR pin
  2326.   behaves like the CTS pin.  Although Linux doesn't support DTR/DSR flow
  2327.   control, it can be obtained by connecting the RTS/CTS pins at the PC
  2328.   to the DSR/DTR pins at the device that uses DTR/DSR flow control.  DTR
  2329.   flow control is the same as DTR/DSR flow control but it's only one-way
  2330.   and the DSR pin is not used.  Many text terminals and some printers
  2331.   use this type of flow control.
  2332.  
  2333.   The normal use of DTR and DSR is as follows: A device asserting DTR
  2334.   says that its powered on and ready to operate.  For a modem, the
  2335.   meaning of a DTR signal from the PC depends on how the modem is
  2336.   configured.  To send a DTR signal manually from a PC using the stty
  2337.   command set the baud rate to 0.  Negating DTR is sometimes called
  2338.   "hanging up" but it doesn't always do this.
  2339.  
  2340.  
  2341.   14.5.  Preventing a Port From Opening
  2342.  
  2343.   If "stty -clocal" (or getty is used with the "local" flag negated)
  2344.   then a serial port can't open until DCD gets an assert (+12 volts)
  2345.   signal.
  2346.  
  2347.  
  2348.   15.  Voltage Waveshapes
  2349.  
  2350.   15.1.  Voltage for a Bit
  2351.  
  2352.   At the EIA-232 serial port, voltages are bipolar (positive or negative
  2353.   with respect to ground) and should be about 12 volts in magnitude
  2354.   (some are 5 or 10 volts).   For the transmit and receive pins +12
  2355.   volts is a 0-bit (sometimes called "space") and -12 volts is a 1-bit
  2356.   (sometimes called "mark").  This is known as inverted logic since
  2357.   normally a 0-bit is both false and negative while a one is normally
  2358.   both true and positive.  Although the receive and transmit pins are
  2359.   inverted logic, other pins (modem control lines) are normal logic with
  2360.   a positive voltage being true (or "on" or "asserted") and a negative
  2361.   voltage being false (or "off" or "negated").  Zero voltage has no
  2362.   meaning (except it usually means that the unit is powered off).
  2363.  
  2364.   A range of voltages is allowed.  The specs say the magnitude of a
  2365.   transmitted signal should be between 5 and 15 volts but must never
  2366.   exceed 25 V.  Any voltage received under 3 V is undefined (but some
  2367.   terminals will accept a lower voltage as valid).  One sometimes sees
  2368.   erroneous claims that the voltage is commonly 5 volts (or even 3
  2369.   volts) but it's usually 11-12 volts.  If you are using a EIA-422 port
  2370.   on a Mac computer as an EIA-232 (requires a special cable) or EIA-423
  2371.   then the voltage will actually be only 5 V.  The discussion here
  2372.   assumes 12 V.
  2373.  
  2374.   Note that normal computer logic normally is just a few volts (5 volts
  2375.   was once the standard) so that if you try to use test equipment
  2376.   designed for testing 3-5 volt computer logic (TTL) on the 12 volts of
  2377.   a serial port, it may damage the test equipment.
  2378.  
  2379.  
  2380.   15.2.  Voltage Sequence for a Byte
  2381.  
  2382.   The transmit pin (TxD) is held at -12 V (mark) at idle when nothing is
  2383.   being sent.  To start a byte it jumps to +12 V (space) for the start
  2384.   bit and remains at +12 V for the duration (period) of the start bit.
  2385.   Next comes the low-order bit of the data byte.  If it's a 0-bit
  2386.   nothing changes and the line remains at +12 V for another bit-period.
  2387.   If it's a 1-bit the voltage jumps from +12 to -12 V.  After that comes
  2388.   the next bit, etc.  Finally, a parity bit may be sent and then a -12 V
  2389.   (mark) stop bit.  The line remains at -12 V (idle) until the next
  2390.   start bit.  Note that there is no return to 0 volts and thus there is
  2391.   no simple way (except by a synchronizing signal) to tell where one bit
  2392.   ends and the next one begins for the case where 2 consecutive bits are
  2393.   the same polarity (both zero or both one).
  2394.  
  2395.   A 2nd stop bit would also be -12 V, just the same as the first stop
  2396.   bit.  Since there is no signal to mark the boundaries between these
  2397.   bits, the only effect of the 2nd stop bit is that the line must remain
  2398.   at -12 V idle twice as long.  The receiver has no way of detecting the
  2399.   difference between a 2nd stop bit and a longer idle time between
  2400.   bytes.  Thus communications works OK if one end uses one stop bit and
  2401.   the other end uses 2 stop bits, but using only one stop bit is
  2402.   obviously faster.  In rare cases 1 1/2 stop bits are used.  This means
  2403.   that the line is kept at -12 V for 1 1/2 time periods (like a stop bit
  2404.   50% wider than normal).
  2405.  
  2406.  
  2407.   15.3.  Parity Explained
  2408.  
  2409.   Characters are normally transmitted with either 7 or 8 bits (of data).
  2410.   An additional parity bit may (or may not) be appended to this
  2411.   resulting in a byte length of 7, 8 or 9 bits.  Some terminal emulators
  2412.   and older terminals do not allow 9 bits.  Some prohibit 9 bits if 2
  2413.   stop bits are used (since this would make the total number of bits too
  2414.   large: 12 bits total).
  2415.  
  2416.   The parity may be set to odd, even or none (mark and space parity may
  2417.   be options on some terminals).  With odd parity, the parity bit is
  2418.   selected so that the number of 1-bits in a byte, including the parity
  2419.   bit, is odd.  If a such a byte gets corrupted by a bit being flipped,
  2420.   the result is an illegal byte of even parity.  This error will be
  2421.   detected and if it's an incoming byte to the terminal an error-
  2422.   character symbol will appear on the screen.  Even parity works in a
  2423.   similar manner with all legal bytes (including the parity bit) having
  2424.   an even number of 1-bits.  During set-up, the number of bits per
  2425.   character usually means only the number of data bits per byte (7 for
  2426.   true ASCII and 8 for various ISO character sets).
  2427.  
  2428.   A "mark" is a 1-bit (or logic 1) and a "space" is a 0-bit (or logic
  2429.   0).  For mark parity, the parity bit is always a one-bit.  For space
  2430.   parity it's always a zero-bit.  Mark or space parity only wastes
  2431.   bandwidth and should be avoided when feasible.  "No parity" means that
  2432.   no parity bit is added.   For terminals that don't permit 9 bit bytes,
  2433.   "no parity" must be selected when using 8 bit character sets since
  2434.   there is no room for a parity bit.
  2435.  
  2436.  
  2437.   15.4.  Forming a Byte (Framing)
  2438.  
  2439.   In serial transmission of bytes via EIA-232 ports, the low-order bit
  2440.   is always sent first.  Serial ports on PC's use asynchronous
  2441.   communication where there is a start bit and a stop bit to mark the
  2442.   beginning and end of a byte.  This is called framing and the framed
  2443.   byte is sometimes called a frame.  As a result a total of 9, 10, or 11
  2444.   bits are sent per byte with 10 being the most common.   8-N-1 means 8
  2445.   data bits, No parity, 1 stop bit.  This adds up to 10 bits total when
  2446.   one counts the start bit.  One stop bit is almost universally used.
  2447.   At 110 bits/sec (and sometimes at 300 bits/sec) 2 stop bits were once
  2448.   used but today the 2nd stop bit is used only in very unusual
  2449.   situations (or by mistake since it seemingly still works OK that way).
  2450.  
  2451.  
  2452.   15.5.  How "Asynchronous" is Synchronized
  2453.  
  2454.   The EIA-232 serial port as implemented on PC is asynchronous which in
  2455.   effect means that there is no "clock" signal sent with "ticks" to mark
  2456.   when each bit is sent..  There are only two states of the transmit (or
  2457.   receive) wire: mark (-12 V) or space (+12 V).  There is no state of 0
  2458.   V.  Thus a sequence of 1-bits is transmitted by just a steady -12 V
  2459.   with no markers of any kind between bits.  For the receiver to detect
  2460.   individual bits it must always have a clock signal which is in
  2461.   synchronization with the transmitter clock.  Such a clock would
  2462.   generate a "tick" in synchronization with each transmitted (or
  2463.   received) bit.
  2464.  
  2465.   For asynchronous transmission, synchronization is achieved by framing
  2466.   each byte with a start bit and a stop bit (done by hardware).  The
  2467.   receiver listens on the line for a start bit and when it detects one
  2468.   it starts its clock ticking.  It uses this clock tick to time the
  2469.   reading of the next 7, 8 or 9 bits.  (It actually is a little more
  2470.   complex than this since several samples of a bit are often taken and
  2471.   this requires additional timing ticks.)  Then the stop bit is read,
  2472.   the clock stops and the receiver waits for the next start bit.  Thus
  2473.   async is actually synchronized during the reception of a single byte
  2474.   but there is no synchronization between one byte and the next byte.
  2475.  
  2476.  
  2477.   16.  Other Serial Devices (not async EIA-232)
  2478.  
  2479.   16.1.  Successors to EIA-232
  2480.  
  2481.   A number of EIA standards have been established for higher speeds and
  2482.   longer distances using twisted-pair (balanced) technology.  Balanced
  2483.   transmission can sometimes be a hundred times faster than unbalanced
  2484.   EIA-232.  For a given speed, the distance (maximum cable length) may
  2485.   be many times longer with twisted pair.  But PC-s keep being made with
  2486.   the "obsolete" EIA-232 since it works OK with modems and mice since
  2487.   the cable length is short.  If this appears in the latest version of
  2488.   this HOWTO, please let me know if any of the non-EIA-232 listed below
  2489.   are supported by Linux.
  2490.  
  2491.  
  2492.   16.2.  EIA-422-A (balanced) and EIA-423-A (unbalanced)
  2493.  
  2494.   EIA-423 is just like the unbalanced EIA-232 except that the voltage is
  2495.   only 5 volts.  Since this falls within EIA-232 specs it can be
  2496.   connected to a EIA-232 port.  Its specs call for somewhat higher
  2497.   speeds than the EIA-232 (but this may be of little help on a long run
  2498.   where it's the unbalance that causes interference).
  2499.  
  2500.   Apple's Mac computer prior to mid-1998 with its EIA-232/EIA-422 Port
  2501.   provided twisted-pairs (balanced) for transmit and receive (when used
  2502.   as a 422).  It is (per specs) exactly 100 times as fast as EIA-423
  2503.   (which in turn is somewhat faster than EIA-232)  The Mac used a small
  2504.   round "mini-DIN-8" connector.  It also provided conventional EIA-232
  2505.   but at only at 5 volts (which is still legal EIA-232).  To make it
  2506.   work like at EIA-232 one must use a special cable which (signal)
  2507.   grounds RxD+ (one side of a balanced pair) and use RxD- as the receive
  2508.   pin.  While TxD- is used as the transmit pin, for some reason TxD+
  2509.   should not be grounded.  See Macintosh Communications FAQ
  2510.   <http://www.modemshop.com/csm-comm-faq.html>.  However, due to the
  2511.   fact that Macs (and upgrades for them) cost more than PC's, they are
  2512.   not widely as host computers for Linux.
  2513.  
  2514.  
  2515.   16.3.  EIA-485
  2516.  
  2517.   This is like EIA-422 (balanced).  It is half-duplex.  It's not just
  2518.   point-to-point but may be used for a multidrop LAN (up to 32 nodes).
  2519.   There are no connector specs
  2520.  
  2521.  
  2522.   16.4.  EIA-530
  2523.  
  2524.   EIA-530-A (balanced but can also be used unbalanced) at 2Mbits/s
  2525.   (balanced) was intended to be a replacement for EIA-232 but few have
  2526.   been installed.  It uses the same 25-pin connector as EIA-232.
  2527.  
  2528.  
  2529.   16.5.  EIA-612/613
  2530.  
  2531.   The High Speed Serial Interface ( HSSI = EIA-612/613) uses a 50-pin
  2532.   connector and goes up to about 50 Mbits/s but the distance is limited
  2533.   to only several meters.
  2534.  
  2535.  
  2536.   16.6.  The Universal Serial Bus (USB)
  2537.  
  2538.   The Universal Serial Bus (USB) is being built into PCI chips.  New
  2539.   PC's have them.  It is 12 Mbits/s over a twisted pair with a 4-pin
  2540.   connector (2 wires are power supply) but it also is limited to short
  2541.   distances of at most 5 meters (depends on configuration).
  2542.  
  2543.   Another HOWTO is needed for it.  Work is underway for supporting it in
  2544.   Linux (but no HOWTO).  It is synchronous and transmits in special
  2545.   packets like a network.  Just like a network, it can have several
  2546.   devices attached to it.  Each device on it gets a time-slice of
  2547.   exclusive use for a short time.  A device can also be guaranteed the
  2548.   use of the bus at fixed intervals.  One device can monopolize it if no
  2549.   other device wants to use it.  It's not simple to describe in detail.
  2550.  
  2551.  
  2552.   16.7.  Synchronization & Synchronous
  2553.  
  2554.   Beside the asynchronous EIA-232 (and others) there are a number of
  2555.   synchronous serial port standards.  In fact EIA-232 includes
  2556.   synchronous specifications but they aren't normally implemented for
  2557.   serial ports on PC's.  But first we'll explain what a synchronous
  2558.   means.
  2559.  
  2560.  
  2561.   16.7.1.  Defining Asynchronous vs Synchronous
  2562.  
  2563.   Asynchronous (async) means "not synchronous".  In practice, an async
  2564.   signal is what the async serial port sends and receives which is a
  2565.   stream of bytes each delimited by a start and stop bit.  Synchronous
  2566.   (sync) is most everything else.  But this doesn't explain the basic
  2567.   concepts.
  2568.  
  2569.   In theory, synchronous means that bytes are sent out at a constant
  2570.   rate one after another (in step with a clock signal tick ).
  2571.   Asynchronous bytes may be sent out erratically with various time
  2572.   intervals between bytes (like someone typing characters at a
  2573.   keyboard).
  2574.  
  2575.   There are certain situations that need to be classified as either sync
  2576.   or async.  The async serial port often sends out bytes in a steady
  2577.   stream which would make this a synchronous case but since they still
  2578.   have the start/stop bits (which makes it possible to send them out
  2579.   erratically) its called async.  Another case is where data bytes
  2580.   (without any start-stop bits) are put into packets with possible
  2581.   erratic spacing between one packet and the next.  This is called sync
  2582.   since the bytes within each packet must be transmitted synchronously.
  2583.  
  2584.  
  2585.   16.7.2.  Synchronous Communication
  2586.  
  2587.   Did you ever wonder what all the unused pins are for on a 25-pin
  2588.   connector for the serial port?  Most of them are for use in
  2589.   synchronous communication which is seldom implemented on PC's.  There
  2590.   are pins for sync timing signals as well as for a sync reverse
  2591.   channel.  The EIA-232 spec provides for both sync and async but PC's
  2592.   use a UART (Universal Asynchronous Receiver/Transmitter) chip such as
  2593.   a 16450, 16550A, or 16650 and can't deal with sync.  For sync one
  2594.   needs a USART chip or the equivalent where the "S" stands for
  2595.   Synchronous.  Since sync is a niche market, a sync serial port is
  2596.   likely to be quite expensive.
  2597.  
  2598.   Besides the sync part of the EIA-232, there are various other EIA
  2599.   synchronous standards.  For EIA-232, 3 pins of the connector are
  2600.   reserved for clock (or timing) signals.  Sometimes it's a modem's task
  2601.   to generate some timing signals making it impossible to use
  2602.   synchronous communications without a synchronous modem (or without a
  2603.   device called a "synchronous modem eliminator" which provides the
  2604.   timing signals).
  2605.  
  2606.   Although few serial ports are sync, synchronous communication does
  2607.   often take place over telephone lines using modems which use V.42
  2608.   error correction.  This strips off the start/stop bits and puts the
  2609.   date bytes in packets resulting in synchronous operation over the
  2610.   phone line.
  2611.  
  2612.  
  2613.   17.  Other Sources of Information
  2614.  
  2615.   17.1.  Books
  2616.  
  2617.  
  2618.  
  2619.   1. Axleson, Jan: Serial Port Complete, Lakeview Research, Madison, WI,
  2620.      1998.
  2621.  
  2622.   2. Black, Uyless D.: Physical Layer Interfaces & Protocols, IEEE
  2623.      Computer Society Press, Los Alamitos, CA, 1996.
  2624.  
  2625.   3. Campbell, Joe: The RS-232 Solution, 2nd ed., Sybex, 1982.
  2626.  
  2627.   4. Levine, Donald:   POSIX Programmer's Guide
  2628.      <http://www.ora.com/catalog/posix/>, (ISBN 0-937175-73-0; O'Reilly)
  2629.  
  2630.   5. Putnam, Byron W.: RS-232 Simplified, Prentice Hall, 1987.
  2631.  
  2632.   6. Seyer, Martin D.: RS-232 Made Easy, 2nd ed., Prentice Hall, 1991.
  2633.  
  2634.   7. Stevens, Richard W.: Advanced Programming in the UNIX Environment
  2635.      <http://heg-
  2636.      school.aw.com/cseng/authors/stevens/advanced/advanced.nclk>, (ISBN
  2637.      0-201-56317-7; Addison-Wesley)
  2638.  
  2639.   8. Tischert, Michael & Bruno Jennrich: PC Intern, Abacus 1996.
  2640.      Chapter 7: Serial Ports
  2641.   Notes re books:
  2642.  
  2643.   1. "... Complete" has hardware details (including register) but the
  2644.      programming aspect is Window oriented.
  2645.  
  2646.   2. "Physical Layer ..." covers much more than just EIA-232.
  2647.  
  2648.  
  2649.   17.2.  Serial Software
  2650.  
  2651.   It's best to use the nearest mirror site, but here's the main sites:
  2652.   Serial Software <ftp://metalab.unc.edu/pub/Linux/system/serial/> for
  2653.   Linux software for the serial ports including getty and port monitors.
  2654.   Serial Communications
  2655.   <ftp://metalab.unc.edu/pub/Linux/apps/serialcomm> for communication
  2656.   programs.
  2657.  
  2658.  
  2659.   ╖  irqtune will give serial port interrupts higher priority to improve
  2660.      performance.  Using hdparm for hard-disk tuning may help some more.
  2661.  
  2662.   ╖  modemstat and statserial show the current state of various modem
  2663.      control lines.  See ``Serial Monitoring/Diagnostics''
  2664.  
  2665.  
  2666.   17.3.  Linux Documents
  2667.  
  2668.  
  2669.   ╖  man pages for: setserial(8) stty
  2670.  
  2671.   ╖  Modem-HOWTO: modems on the serial port
  2672.  
  2673.   ╖  PPP-HOWTO: help with PPP (using a modem on the serial port)
  2674.  
  2675.   ╖  Printing-HOWTO: for setting up a serial printer
  2676.  
  2677.   ╖  Serial-Programming-HOWTO: for some aspects of serial-port
  2678.      programming
  2679.  
  2680.   ╖  Text-Terminal-HOWTO: how they work and how to install and configure
  2681.  
  2682.   ╖  UPS-HOWTO: setting up UPS sensors connected to your serial port
  2683.  
  2684.   ╖  UUCP-HOWTO: for information on setting up UUCP
  2685.  
  2686.  
  2687.   17.4.  Usenet newsgroups:
  2688.  
  2689.  
  2690.   ╖  comp.os.linux.answers
  2691.  
  2692.   ╖  comp.os.linux.hardware:  Hardware compatibility with the Linux
  2693.      operating system.
  2694.  
  2695.   ╖  comp.os.linux.networking:  Networking and communications under
  2696.      Linux.
  2697.  
  2698.   ╖  comp.os.linux.setup:  Linux installation and system administration.
  2699.  
  2700.  
  2701.   17.5.  Serial Mailing List
  2702.  
  2703.   The Linux serial mailing list.  To join, send email to
  2704.   majordomo@vger.rutgers.edu, with ``subscribe linux-serial'' in the
  2705.   message body.  If you send ``help'' in the message body, you get a
  2706.   help message.  The server also serves many other Linux lists.  Send
  2707.   the ``lists'' command for a list of mailing lists.
  2708.  
  2709.  
  2710.   17.6.  Internet
  2711.  
  2712.  
  2713.  
  2714.   ╖  Serial Suite <ftp://scicom.alphadec.com/pub/linux> by Vern Hoxie is
  2715.      a collection of blurbs about the care and feeding of the Linux
  2716.      serial port plus some simple programs.
  2717.  
  2718.   ╖  A white paper discussing serial communications and multiport serial
  2719.      boards is available from Cyclades at http://www.cyclades.com.
  2720.  
  2721.      END OF Serial-HOWTO
  2722.  
  2723.  
  2724.  
  2725.  
  2726.  
  2727.  
  2728.  
  2729.  
  2730.  
  2731.  
  2732.  
  2733.  
  2734.  
  2735.  
  2736.  
  2737.  
  2738.  
  2739.  
  2740.  
  2741.  
  2742.  
  2743.  
  2744.  
  2745.  
  2746.  
  2747.  
  2748.  
  2749.  
  2750.  
  2751.  
  2752.  
  2753.  
  2754.  
  2755.  
  2756.  
  2757.  
  2758.  
  2759.  
  2760.  
  2761.  
  2762.  
  2763.  
  2764.  
  2765.  
  2766.  
  2767.  
  2768.  
  2769.  
  2770.  
  2771.  
  2772.  
  2773.