diff options
Diffstat (limited to 'en_US.ISO_8859-1/books/handbook/hw/chapter.sgml')
-rw-r--r-- | en_US.ISO_8859-1/books/handbook/hw/chapter.sgml | 5685 |
1 files changed, 0 insertions, 5685 deletions
diff --git a/en_US.ISO_8859-1/books/handbook/hw/chapter.sgml b/en_US.ISO_8859-1/books/handbook/hw/chapter.sgml deleted file mode 100644 index 9397bbcfee..0000000000 --- a/en_US.ISO_8859-1/books/handbook/hw/chapter.sgml +++ /dev/null @@ -1,5685 +0,0 @@ - <chapter id="hw"> - <title>PC Hardware compatibility</title> - - <para>Issues of hardware compatibility are among the most troublesome in - the computer industry today and FreeBSD is by no means immune to - trouble. In this respect, FreeBSD's advantage of being able to run on - inexpensive commodity PC hardware is also its liability when it comes - to support for the amazing variety of components on the market. While - it would be impossible to provide a exhaustive listing of hardware - that FreeBSD supports, this section serves as a catalog of the device - drivers included with FreeBSD and the hardware each drivers supports. - Where possible and appropriate, notes about specific products are - included. You may also want to refer to <link - linkend="kernelconfig-config">the kernel configuration - file</link> section in this handbook for - a list of supported devices.</para> - - <para>As FreeBSD is a volunteer project without a funded testing - department, we depend on you, the user, for much of the information - contained in this catalog. If you have direct experience of hardware - that does or does not work with FreeBSD, please let us know by sending - e-mail to the &a.doc;. Questions about supported hardware should be - directed to the &a.questions; (see - <link linkend="eresources-mail">Mailing Lists</link> for more - information). When submitting information or asking a question, - please remember to specify exactly what version of FreeBSD you are - using and include as many details of your hardware as possible.</para> - - - <sect1> - <title>Resources on the Internet</title> - - <para>The following links have proven useful in selecting hardware. - Though some of what you see won't necessarily be specific (or even - applicable) to FreeBSD, most of the hardware information out there - is OS independent. Please check with the FreeBSD hardware guide to - make sure that your chosen configuration is supported before making - any purchases.</para> - - - <itemizedlist> - - <listitem> - <para><ulink URL="http://www.tomshardware.com/">The Pentium - Systems Hardware Performance Guide</ulink></para> - </listitem> - - </itemizedlist> - - - </sect1> - - <sect1 id="hw-configs"> - <title>Sample Configurations</title> - - <para>The following list of sample hardware configurations by no means - constitutes an endorsement of a given hardware vendor or product by - <emphasis>The FreeBSD Project</emphasis>. This information is - provided only as a public service and merely catalogs some of the - experiences that various individuals have had with different - hardware combinations. Your mileage may vary. Slippery when wet. - Beware of dog.</para> - - - <sect2 id="hw-jordans-picks"> - <title>Jordan's Picks</title> - - <para>I have had fairly good luck building workstation and server - configurations with the following components. I can't guarantee - that you will too, nor that any of the companies here will remain - “best buys” forever. I will try, when I can, to keep this list - up-to-date but cannot obviously guarantee that it will be at any - given time.</para> - - - <sect3 id="hw-mb"> - <title>Motherboards</title> - - <para>For Pentium Pro (P6) systems, I'm quite fond of the <ulink - URL="http://www.tyan.com/html/products.html">Tyan</ulink> - S1668 dual-processor motherboard as well as the Intel PR440FX - motherboard with on-board SCSI WIDE and 100/10MB Intel - Etherexpress NIC. You can build a dandy little single or dual - processor system (which is supported in FreeBSD 3.0) for very - little cost now that the Pentium Pro 180/256K chips have fallen so - greatly in price, but no telling how much longer this will - last.</para> - - <para>For the Pentium II, I'm rather partial to the <ulink - URL="http://www.asus.com.tw">ASUS</ulink> <ulink - URL="http://www.asus.com.tw/Products/Motherboard/Pentiumpro/P2l97-s/index.html">P2l97-S</ulink> motherboard with the on-board Adaptec SCSI WIDE controller.</para> - - <para>For Pentium machines, the ASUS <ulink - URL="http://www.asus.com.tw/Products/Motherboard/Pentium/P55tp4/index.html">P55T2P4</ulink> motherboard appears to be a good choice for mid-to-high range Pentium server and workstation systems.</para> - - <para>Those wishing to build more fault-tolerant systems should - also be sure to use Parity memory or, for truly 24/7 - applications, ECC memory.</para> - - <note> - <para>ECC memory does involve a slight performance trade-off - (which may or may not be noticeable depending on your - application) but buys you significantly increased - fault-tolerance to memory errors.</para> - </note> - </sect3> - - <sect3> - <title>Disk Controllers</title> - - <para>This one is a bit trickier, and while I used to recommend - the <ulink URL="http://www.buslogic.com">Buslogic</ulink> - controllers unilaterally for everything from ISA to PCI, now I - tend to lean towards the <ulink - URL="http://www.adaptec.com">Adaptec</ulink> 1542CF for ISA, - Buslogic Bt747c for EISA and Adaptec 2940UW for PCI.</para> - - <para>The NCR/Symbios cards for PCI have also worked well for me, - though you need to make sure that your motherboard supports the - BIOS-less model if you're using one of those (if your card has - nothing which looks even vaguely like a ROM chip on it, you've - probably got one which expects its BIOS to be on your - motherboard).</para> - - <para>If you should find that you need more than one SCSI - controller in a PCI machine, you may wish to consider conserving - your scarce PCI bus resources by buying the Adaptec 3940 card, - which puts two SCSI controllers (and internal busses) in a - single slot.</para> - - <note> - <para>There are two types of 3940 on the market—the older - model with AIC 7880 chips on it, and hte newer one with AIC 7895 - chips. The newer model requires <ulink - url="http://www.freebsd.org/pub/FreeBSD/development/cam/">CAM</ulink> support which is not yet part of FreeBSD—you have to add it, or install from one of the CAM binary snapshot release.</para> - </note> - - </sect3> - - <sect3 id="hw-disks"> - <title>Disk drives</title> - - <para>In this particular game of Russian roulette, I'll make few - specific recommendations except to say “SCSI over IDE whenever - you can afford it.” Even in small desktop configurations, SCSI - often makes more sense since it allows you to easily migrate - drives from server to desktop as falling drive prices make it - economical to do so. If you have more than one machine to - administer then think of it not simply as storage, think of it - as a food chain! For a serious server configuration, there's not - even any argument—use SCSI equipment and good cables.</para> - - </sect3> - - <sect3 id="hw-jordans-picks-cdrom"> - <title>CDROM drives</title> - - <para>My SCSI preferences extend to SCSI CDROM drives as well, and - while the <ulink URL="http://www.toshiba.com">Toshiba</ulink> - drives have always been favourites of mine (in whatever speed is - hot that week), I'm still fond of my good old <ulink - url="http://www.plextor.com">Plextor</ulink> PX-12CS drive. It's - only a 12 speed, but it's offered excellent performance and - reliability.</para> - - <para>Generally speaking, most SCSI CDROM drives I've seen have - been of pretty solid construction and you probably won't go - wrong with an HP or NEC SCSI CDROM drive either. SCSI CDROM - prices also appear to have dropped considerably in the last few - months and are now quite competitive with IDE CDROMs while - remaining a technically superior solution. I now see no reason - whatsoever to settle for an IDE CDROM drive if given a choice - between the two.</para> - - </sect3> - - <sect3 id="hw-worm"> - <title>CD Recordable (WORM) drives</title> - - <para>At the time of this writing, FreeBSD supports 3 types of CDR - drives (though I believe they all ultimately come from Phillips - anyway): The Phillips CDD 522 (Acts like a Plasmon), the PLASMON - RF4100 and the HP 6020i. I myself use the HP 6020i for burning - CDROMs (in 2.2 and alter releases—it does not work with - earlier releases of the SCSI code) and it works very well. See - <ulink - URL="file:/usr/share/examples/worm">/usr/share/examples/worm</ulink> on your 2.2 system for example scripts used to created ISO9660 filesystem images (with RockRidge extensions) and burn them onto an HP6020i CDR.</para> - - </sect3> - - <sect3 id="hw-tape"> - <title>Tape drives</title> - - <para>I've had pretty good luck with both <ulink - URL="http://www.Exabyte.COM:80/Products/8mm/8505XL/Rfeatures.html">8mm drives</ulink> from <ulink URL="http://www.exabyte.com">Exabyte</ulink> and <ulink URL="http://www-dmo.external.hp.com:80/tape/_cpb0001.htm">4mm (DAT)</ulink> drives from <ulink URL="http://www.hp.com">HP</ulink>.</para> - - <para>For backup purposes, I'd have to give the higher - recommendation to the Exabyte due to the more robust nature (and - higher storage capacity) of 8mm tape.</para> - - </sect3> - - <sect3 id="hw-video"> - <title>Video Cards</title> - - <para>If you can also afford to buy a commercial X server for - US$99 from <ulink URL="http://www.xig.com/">Xi Graphics, - Inc. (formerly X Inside, Inc)</ulink> then I can heartily - recommend the <ulink URL="http://www.matrox.com/">Matrox</ulink> - <ulink - URL="http://www.matrox.com/mgaweb/brochure.htm">Millenium II</ulink> card. Note that support for this card is also excellent with the <ulink URL="http://www.xfree86.org/">XFree86</ulink> server, which is now at version 3.3.2.</para> - - <para>You also certainly can't go wrong with one of <ulink - URL="http://www.nine.com/">Number 9's</ulink> cards — their S3 - Vision 868 and 968 based cards (the 9FX series) also being quite - fast and very well supported by XFree86's S3 server. You can - also pick up their Revolution 3D cards very cheaply these days, - especially if you require a lot of video memory.</para> - - </sect3> - - <sect3 id="hw-monitors"> - <title>Monitors</title> - - <para>I have had very good luck with the <ulink - URL="http://cons3.sel.sony.com/SEL/ccpg/display/ms17se2.html">Sony Multiscan 17seII monitors</ulink>, as have I with the Viewsonic offering in the same (Trinitron) tube. For larger than 17", all I can recommend at the time of this writing is to not spend any less than U.S. $2,000 for a 21" monitor or $1,700 for a 20" monitor if that's what you really need. There are good monitors available in the >=20" range and there are also cheap monitors in the >=20" range. Unfortunately, very few are both cheap and good!</para> - - </sect3> - - <sect3 id="hw-networking"> - <title>Networking</title> - - <para>I can recommend the Intel EtherExpress Pro/100B card first - ande foremost, followed by the <ulink - URL="http://www.smc.com/">SMC</ulink> Ultra 16 controller for - any ISA application and the SMC EtherPower or Compex ENET32 - cards for slightly cheaper PCI based networking. In general, any - PCI NIC based around DEC's DC21041 Ethernet controller chip, - such as the Zynx ZX342 or DEC DE435, will generally work quite - well and can frequently be found in 2-port and 4-port version - (useful for firewalls and routers), though the Pro/100MB card has - the edge when it comes to providing the best performance with teh - lower overhead.</para> - - <para>If what you're looking for is the - cheapest possible solution then almost any NE2000 clone will do - a fine job for very little cost.</para> - - </sect3> - - <sect3 id="hw-serial"> - <title>Serial</title> - - <para>If you're looking for high-speed serial networking - solutions, then <ulink URL="http://www.dgii.com/">Digi - International</ulink> makes the <ulink - URL="http://www.dgii.com/prodprofiles/profiles-prices/digiprofiles/digispecs/sync570.html">SYNC/570</ulink> series, with drivers now in FreeBSD-current. <ulink URL="http://www.etinc.com">Emerging Technologies</ulink> also manufactures a board with T1/E1 capabilities, using software they provide. I have no direct experience using either product, however.</para> - - <para>Multiport card options are somewhat more numerous, though it - has to be said that FreeBSD's support for <ulink - URL="http://www.cyclades.com/">Cyclades</ulink>'s products is - probably the tightest, primarily as a result of that company's - commitment to making sure that we are adequately supplied with - evaluation boards and technical specs. I've heard that the - Cyclom-16Ye offers the best price/performance, though I've not - checked the prices lately. Other multiport cards I've heard good - things about are the BOCA and AST cards, and <ulink - URL="http://www.stallion.com/">Stallion - Technologies</ulink> apparently offers an unofficial driver - for their cards at <ulink - URL="ftp://ftp.stallion.com/drivers/unsupported/freebsd/stalbsd-0.0.4.tar.gz">this</ulink> location.</para> - - </sect3> - - <sect3 id="hw-audio"> - <title>Audio</title> - - <para>I currently use a <ulink - URL="http://www.creaf.com/">Creative Labs</ulink> AWE32 though - just about anything from Creative Labs will generally work these - days. This is not to say that other types of sound cards don't - also work, simply that I have little experience with them (I was - a former GUS fan, but Gravis's soundcard situation has been dire - for some time).</para> - - </sect3> - - <sect3 id="hw-vgrabbers"> - <title>Video</title> - - <para>For video capture, there are two good choices — any card - based on the Brooktree BT848 chip, such as the Hauppage or WinTV - boards, will work very nicely with FreeBSD. Another board which - works for me is the <ulink - URL="http://www.matrox.com/">Matrox</ulink> <ulink - URL="http://www.matrox.com/imgweb/meteor.htm">Meteor</ulink> - card. FreeBSD also supports the older video spigot card from - Creative Labs, but those are getting somewhat difficult to find. - Note that the Meteor frame grabber card <emphasis>will not - work</emphasis> with motherboards based on the 440FX chipset! - See the - <link linkend="hw-mb">motherboard reference</link> section for - details. In such cases, it's better to go with a BT848 based - board.</para> - - </sect3> - </sect2> - </sect1> - - <sect1 id="hw-core"> - <title>Core/Processing</title> - - - <sect2> - <title>Motherboards, busses, and chipsets</title> - - - <sect3> - <title>* ISA</title> - - <para></para> - </sect3> - - <sect3> - <title>* EISA</title> - - <para></para> - </sect3> - - <sect3> - <title>* VLB</title> - - <para></para> - </sect3> - - <sect3 id="hw-mb-pci"> - <title>PCI</title> - - <para><emphasis>Contributed by &a.obrien; from postings by &a.rgrimes;.<!-- <br> -->25 April - 1995.</emphasis></para> - - <para><emphasis>Continuing updates by &a.jkh;.</emphasis><!-- <br> - -->Last update on <emphasis>26 August 1996.</emphasis></para> - - <para>Of the Intel PCI chip sets, the following list describes - various types of known-brokenness and the degree of breakage, - listed from worst to best.</para> - - - <variablelist> - <varlistentry><term>Mercury:</term> - <listitem> - <para>Cache coherency problems, especially if there are - ISA bus masters behind the ISA to PCI bridge chip. - Hardware flaw, only known work around is to turn the - cache off.</para> - </listitem> - </varlistentry> - - <varlistentry><term>Saturn-I <emphasis>(ie, 82424ZX at rev 0, - 1 or 2)</emphasis>:</term> - - <listitem> - <para>Write back cache coherency problems. Hardware flaw, - only known work around is to set the external cache to - write-through mode. Upgrade to Saturn-II.</para> - </listitem> - </varlistentry> - - <varlistentry><term>Saturn-II <emphasis>(ie, 82424ZX at rev 3 - or 4)</emphasis>:</term> - - <listitem> - <para>Works fine, but many MB manufactures leave out the - external dirty bit SRAM needed for write back operation. - Work arounds are either run it in write through mode, or - get the dirty bit SRAM installed. (I have these for the - ASUS PCI/I-486SP3G rev 1.6 and later boards).</para> - </listitem> - </varlistentry> - - <varlistentry><term>Neptune:</term> - - <listitem> - <para>Can not run more than 2 bus master devices. - Admitted Intel design flaw. Workarounds include do not - run more than 2 bus masters, special hardware design to - replace the PCI bus arbiter (appears on Intel Altair - board and several other Intel server group MB's). And - of course Intel's official answer, move to the Triton - chip set, we “fixed it there”.</para> - </listitem> - </varlistentry> - - <varlistentry><term>Triton <emphasis>(ie, - 430FX)</emphasis>:</term> - - <listitem> - <para>No known cache coherency or bus master problems, - chip set does not implement parity checking. Workaround - for parity issue. Use Triton-II based motherboards if - you have the choice.</para> - </listitem> - </varlistentry> - - <varlistentry><term>Triton-II <emphasis>(ie, - 430HX)</emphasis>:</term> - - <listitem> - <para>All reports on motherboards using this chipset have - been favorable so far. No known problems.</para> - </listitem> - </varlistentry> - - <varlistentry><term>Orion:</term> - - <listitem> - <para>Early versions of this chipset suffered from a PCI - write-posting bug which can cause noticeable performance - degradation in applications where large amounts of PCI - bus traffic is involved. B0 stepping or later revisions - of the chipset fixed this problem.</para> - </listitem> - </varlistentry> - - <varlistentry><term><ulink - URL="http://developer.intel.com/design/pcisets/desktop.htm#440FX">440FX</ulink>:</term> - - <listitem> - <para>This <ulink - URL="http://www.intel.com/procs/ppro/index.htm">Pentium Pro</ulink> support chipset seems to work well, and does not suffer from any of the early Orion chipset problems. It also supports a wider variety of memory, including ECC and parity. The only known problem with it is that the Matrox Meteor frame grabber card doesn't like it.</para> - - </listitem> - </varlistentry> - </variablelist> - - - </sect3> - </sect2> - - <sect2> - <title>CPUs/FPUs</title> - - <para><emphasis>Contributed by &a.asami;.<!-- <br> -->26 December - 1997.</emphasis></para> - - - <sect3> - <title>P6 class (Pentium Pro/Pentium II)</title> - - <para>Both the Pentium Pro and Pentium II work fine with FreeBSD. - In fact, our main ftp site <ulink - URL="ftp://ftp.freebsd.org/">ftp.freebsd.org</ulink> (also - known as "<filename>ftp.cdrom.com</filename>", world's largest - ftp site) runs FreeBSD on a Pentium Pro. <ulink - URL="ftp://ftp.cdrom.com/archive-info/wcarchive.txt">Configurations details</ulink> are available for interested parties.</para> - - </sect3> - - <sect3> - <title>Pentium class</title> - - <para>The Intel Pentium (P54C), Pentium MMX (P55C), AMD K6 and - Cyrix/IBM 6x86MX processors are all reported to work with - FreeBSD. I will not go into details of which processor is - faster than what, there are zillions of web sites on the - Internet that tells you one way or another. <!-- smiley --><emphasis>:)</emphasis></para> - - <note> - <para>Various CPUs have different voltage/cooling requirements. - Make sure your motherboard can supply the exact voltage needed - by the CPU. For instance, many recent MMX chips require split - voltage (e.g., 2.9V core, 3.3V I/O). Also, some AMD and - Cyrix/IBM chips run hotter than Intel chips. In that case, - make sure you have good heatsink/fans (you can get the list of - certified parts from their web pages).</para> - </note> - - <sect4> - <title>Clock speeds</title> - - <para><emphasis>Contributed by &a.rgrimes;.<!-- <br> -->1 - October 1996.</emphasis></para> - - <para><emphasis>Updated by &a.asami;.<!-- <br> -->27 December - 1997.</emphasis></para> - - <para>Pentium class machines use different clock speeds for the - various parts of the system. These being the speed of the - CPU, external memory bus, and the PCI bus. It is not always - true that a “faster” processor will make a system faster than - a “slower” one, due to the various clock speeds used. Below is - a table showing the differences:</para> - - <informaltable frame="none"> - <tgroup cols="4"> - <thead> - <row> - <entry>Rated CPU MHz</entry> - <entry>External Clock and Memory Bus MHz</entry> - <entry>External to Internal Clock Multiplier</entry> - <entry>PCI Bus Clock MHz</entry> - </row> - </thead> - <tbody> - <row> - <entry>60</entry> - <entry>60</entry> - <entry>1.0</entry> - <entry>30</entry> - </row> - - <row> - <entry>66</entry> - <entry>66</entry> - <entry>1.0</entry> - <entry>33</entry> - </row> - - <row> - <entry>75</entry> - <entry>50</entry> - <entry>1.5</entry> - <entry>25</entry> - </row> - - <row> - <entry>90</entry> - <entry>60</entry> - <entry>1.5</entry> - <entry>30</entry> - </row> - - <row> - <entry>100</entry> - <entry>50</entry> - <entry>2</entry> - <entry>25</entry> - </row> - - <row> - <entry>100</entry> - <entry>66</entry> - <entry>1.5</entry> - <entry>33</entry> - </row> - - <row> - <entry>120</entry> - <entry>60</entry> - <entry>2</entry> - <entry>30</entry> - </row> - - <row> - <entry>133</entry> - <entry>66</entry> - <entry>2</entry> - <entry>33</entry> - </row> - - <row> - <entry>150</entry> - <entry>60</entry> - <entry>2.5</entry> - <entry>30 (Intel, AMD)</entry> - </row> - - <row> - <entry>150</entry> - <entry>75</entry> - <entry>2</entry> - <entry>37.5 (Cyrix/IBM 6x86MX)</entry> - </row> - - <row> - <entry>166</entry> - <entry>66</entry> - <entry>2.5</entry> - <entry>33</entry> - </row> - - <row> - <entry>180</entry> - <entry>60</entry> - <entry>3</entry> - <entry>30</entry> - </row> - - <row> - <entry>200</entry> - <entry>66</entry> - <entry>3</entry> - <entry>33</entry> - </row> - - <row> - <entry>233</entry> - <entry>66</entry> - <entry>3.5</entry> - <entry>33</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <note> - <para>66MHz may actually be 66.667MHz, but don't assume - so.</para> - - <para>The Pentium 100 can be run at either 50MHz external - clock with a multiplier of 2 or at 66MHz and a multiplier - of 1.5.</para> - </note> - - <para>As can be seen the best parts to be using are the 100, - 133, 166, 200 and 233, with the exception that at a multiplier - of 3 or more the CPU starves for memory.</para> - - </sect4> - - <sect4> - <title>The AMD K6 Bug</title> - - <para>In 1997, there have been reports of the AMD K6 seg - faulting during heavy compilation. That problem has been - fixed in 3Q '97. According to reports, K6 chips with date mark - “9733” or larger (i.e., manufactured in the 33rd week of '97 - or later) do not have this bug.</para> - - </sect4> - </sect3> - - <sect3> - <title>* 486 class</title> - - <para></para> - </sect3> - - <sect3> - <title>* 386 class</title> - - <para></para> - </sect3> - - <sect3> - <title>286 class</title> - - <para>Sorry, FreeBSD does not run on 80286 machines. It is nearly - impossible to run today's large full-featured UNIXes on such - hardware.</para> - - </sect3> - </sect2> - - <sect2> - <title>* Memory</title> - - <para>The minimum amount of memory you must have to install FreeBSD - is 5 MB. Once your system is up and running you can <link - linkend="kernelconfig-building">build a custom kernel</link> - that will use less memory. If you use the <filename>boot4.flp</filename> you can get - away with having only 4 MB.</para> - - </sect2> - - <sect2> - <title>* BIOS</title> - - <para></para> - </sect2> - </sect1> - - <sect1 id="hw-io"> - <title>Input/Output Devices</title> - - - <sect2> - <title>* Video cards</title> - - <para></para> - </sect2> - - <sect2> - <title>* Sound cards</title> - - <para></para> - </sect2> - - <sect2> - <title>Serial ports and multiport cards</title> - - - <sect3 id="uart"> - <title>The UART: What it is and how it works</title> - - <para><emphasis>Copyright © 1996 &a.uhclem;, All Rights - Reserved.<!-- <br> --> 13 January 1996.</emphasis></para> - - <para>The Universal Asynchronous Receiver/Transmitter (UART) - controller is the key component of the serial communications - subsystem of a computer. The UART takes bytes of data and - transmits the individual bits in a sequential fashion. At the - destination, a second UART re-assembles the bits into complete - bytes.</para> - - <para>Serial transmission is commonly used with modems and for - non-networked communication between computers, terminals and - other devices.</para> - - <para>There are two primary forms of serial transmission: - Synchronous and Asynchronous. Depending on the modes that are - supported by the hardware, the name of the communication - sub-system will usually include a <literal>A</literal> if it supports - Asynchronous communications, and a <literal>S</literal> if it supports - Synchronous communications. Both forms are described - below.</para> - - <para>Some common acronyms are: - <blockquote> - <para>UART Universal Asynchronous - Receiver/Transmitter</para> - </blockquote> - - <blockquote> - <para>USART Universal Synchronous-Asynchronous - Receiver/Transmitter</para> - </blockquote></para> - - - <sect4> - <title>Synchronous Serial Transmission</title> - - <para>Synchronous serial transmission requires that the sender - and receiver share a clock with one another, or that the - sender provide a strobe or other timing signal so that the - receiver knows when to “read” the next bit of the data. In - most forms of serial Synchronous communication, if there is no - data available at a given instant to transmit, a fill - character must be sent instead so that data is always being - transmitted. Synchronous communication is usually more - efficient because only data bits are transmitted between - sender and receiver, and synchronous communication can be more - more costly if extra wiring and circuits are required to share - a clock signal between the sender and receiver.</para> - - <para>A form of Synchronous transmission is used with printers - and fixed disk devices in that the data is sent on one set of - wires while a clock or strobe is sent on a different wire. - Printers and fixed disk devices are not normally serial - devices because most fixed disk interface standards send an - entire word of data for each clock or strobe signal by using a - separate wire for each bit of the word. In the PC industry, - these are known as Parallel devices.</para> - - <para>The standard serial communications hardware in the PC does - not support Synchronous operations. This mode is described - here for comparison purposes only.</para> - - </sect4> - - <sect4> - <title>Asynchronous Serial Transmission</title> - - <para>Asynchronous transmission allows data to be transmitted - without the sender having to send a clock signal to the - receiver. Instead, the sender and receiver must agree on - timing parameters in advance and special bits are added to - each word which are used to synchronize the sending and - receiving units.</para> - - <para>When a word is given to the UART for Asynchronous - transmissions, a bit called the "Start Bit" is added to the - beginning of each word that is to be transmitted. The Start - Bit is used to alert the receiver that a word of data is about - to be sent, and to force the clock in the receiver into - synchronization with the clock in the transmitter. These two - clocks must be accurate enough to not have the frequency - drift by more than 10% during the transmission of the - remaining bits in the word. (This requirement was set in the - days of mechanical teleprinters and is easily met by modern - electronic equipment.)</para> - - <para>After the Start Bit, the individual bits of the word of - data are sent, with the Least Significant Bit (LSB) being sent - first. Each bit in the transmission is transmitted for - exactly the same amount of time as all of the other bits, and - the receiver “looks” at the wire at approximately halfway - through the period assigned to each bit to determine if the - bit is a <literal>1</literal> or a <literal>0</literal>. For example, if it takes two seconds - to send each bit, the receiver will examine the signal to - determine if it is a <literal>1</literal> or a <literal>0</literal> after one second has passed, - then it will wait two seconds and then examine the value of - the next bit, and so on.</para> - - <para>The sender does not know when the receiver has “looked” at - the value of the bit. The sender only knows when the clock - says to begin transmitting the next bit of the word.</para> - - <para>When the entire data word has been sent, the transmitter - may add a Parity Bit that the transmitter generates. The - Parity Bit may be used by the receiver to perform simple error - checking. Then at least one Stop Bit is sent by the - transmitter.</para> - - <para>When the receiver has received all of the bits in the data - word, it may check for the Parity Bits (both sender and - receiver must agree on whether a Parity Bit is to be used), - and then the receiver looks for a Stop Bit. If the Stop Bit - does not appear when it is supposed to, the UART considers the - entire word to be garbled and will report a Framing Error to - the host processor when the data word is read. The usual - cause of a Framing Error is that the sender and receiver - clocks were not running at the same speed, or that the signal - was interrupted.</para> - - <para>Regardless of whether the data was received correctly or - not, the UART automatically discards the Start, Parity and - Stop bits. If the sender and receiver are configured - identically, these bits are not passed to the host.</para> - - <para>If another word is ready for transmission, the Start Bit - for the new word can be sent as soon as the Stop Bit for the - previous word has been sent.</para> - - <para>Because asynchronous data is “self synchronizing”, if - there is no data to transmit, the transmission line can be - idle.</para> - - </sect4> - - <sect4> - <title>Other UART Functions</title> - - <para>In addition to the basic job of converting data from - parallel to serial for transmission and from serial to - parallel on reception, a UART will usually provide additional - circuits for signals that can be used to indicate the state of - the transmission media, and to regulate the flow of data in - the event that the remote device is not prepared to accept - more data. For example, when the device connected to the - UART is a modem, the modem may report the presence of a - carrier on the phone line while the computer may be able to - instruct the modem to reset itself or to not take calls by - asserting or deasserting one more more of these extra signals. - The function of each of these additional signals is defined in - the EIA RS232-C standard.</para> - - </sect4> - - <sect4> - <title>The RS232-C and V.24 Standards</title> - - <para>In most computer systems, the UART is connected to - circuitry that generates signals that comply with the EIA - RS232-C specification. There is also a CCITT standard named - V.24 that mirrors the specifications included in - RS232-C.</para> - - - <sect5> - <title>RS232-C Bit Assignments (Marks and Spaces)</title> - - <para>In RS232-C, a value of <literal>1</literal> is called a <literal>Mark</literal> and a - value of <literal>0</literal> is called a <literal>Space</literal>. When a communication line - is idle, the line is said to be “Marking”, or transmitting - continuous <literal>1</literal> values.</para> - - <para>The Start bit always has a value of <literal>0</literal> (a Space). The - Stop Bit always has a value of <literal>1</literal> (a Mark). This means - that there will always be a Mark (1) to Space (0) transition - on the line at the start of every word, even when multiple - word are transmitted back to back. This guarantees that - sender and receiver can resynchronize their clocks - regardless of the content of the data bits that are being - transmitted.</para> - - <para>The idle time between Stop and Start bits does not have - to be an exact multiple (including zero) of the bit rate of - the communication link, but most UARTs are designed this way - for simplicity.</para> - - <para>In RS232-C, the "Marking" signal (a <literal>1</literal>) is represented - by a voltage between -2 VDC and -12 VDC, and a "Spacing" - signal (a <literal>0</literal>) is represented by a voltage between 0 and +12 - VDC. The transmitter is supposed to send +12 VDC or -12 - VDC, and the receiver is supposed to allow for some voltage - loss in long cables. Some transmitters in low power devices - (like portable computers) sometimes use only +5 VDC and -5 - VDC, but these values are still acceptable to a RS232-C - receiver, provided that the cable lengths are short.</para> - - </sect5> - - <sect5> - <title>RS232-C Break Signal</title> - - <para>RS232-C also specifies a signal called a <literal>Break</literal>, which - is caused by sending continuous Spacing values (no Start or - Stop bits). When there is no electricity present on the - data circuit, the line is considered to be sending <literal>Break</literal>.</para> - - <para>The <literal>Break</literal> signal must be of a duration longer than the - time it takes to send a complete byte plus Start, Stop and - Parity bits. Most UARTs can distinguish between a Framing - Error and a Break, but if the UART cannot do this, the - Framing Error detection can be used to identify - Breaks.</para> - - <para>In the days of teleprinters, when numerous printers - around the country were wired in series (such as news - services), any unit could cause a <literal>Break</literal> by temporarily - opening the entire circuit so that no current flowed. This - was used to allow a location with urgent news to interrupt - some other location that was currently sending - information.</para> - - <para>In modern systems there are two types of Break signals. - If the Break is longer than 1.6 seconds, it is considered a - "Modem Break", and some modems can be programmed to - terminate the conversation and go on-hook or enter the - modems' command mode when the modem detects this signal. If - the Break is smaller than 1.6 seconds, it signifies a Data - Break and it is up to the remote computer to respond to this - signal. Sometimes this form of Break is used as an - Attention or Interrupt signal and sometimes is accepted as a - substitute for the ASCII CONTROL-C character.</para> - - <para>Marks and Spaces are also equivalent to “Holes” and “No - Holes” in paper tape systems.</para> - - <note> - <para>Breaks cannot be generated from paper tape or from any - other byte value, since bytes are always sent with Start - and Stop bit. The UART is usually capable of generating - the continuous Spacing signal in response to a special - command from the host processor.</para> - </note> - - </sect5> - - <sect5> - <title>RS232-C DTE and DCE Devices</title> - - <para>The RS232-C specification defines two types of - equipment: the Data Terminal Equipment (DTE) and the Data - Carrier Equipment (DCE). Usually, the DTE device is the - terminal (or computer), and the DCE is a modem. Across the - phone line at the other end of a conversation, the receiving - modem is also a DCE device and the computer that is - connected to that modem is a DTE device. The DCE device - receives signals on the pins that the DTE device transmits - on, and vice versa.</para> - - <para>When two devices that are both DTE or both DCE must be - connected together without a modem or a similar media - translater between them, a NULL modem must be used. The - NULL modem electrically re-arranges the cabling so that the - transmitter output is connected to the receiver input on the - other device, and vice versa. Similar translations are - performed on all of the control signals so that each device - will see what it thinks are DCE (or DTE) signals from the - other device.</para> - - <para>The number of signals generated by the DTE and DCE - devices are not symmetrical. The DTE device generates fewer - signals for the DCE device than the DTE device receives from - the DCE.</para> - - </sect5> - - <sect5> - <title>RS232-C Pin Assignments</title> - - <para>The EIA RS232-C specification (and the ITU equivalent, - V.24) calls for a twenty-five pin connector (usually a DB25) - and defines the purpose of most of the pins in that - connector.</para> - - <para>In the IBM Personal Computer and similar systems, a - subset of RS232-C signals are provided via nine pin - connectors (DB9). The signals that are not included on the - PC connector deal mainly with synchronous operation, and - this transmission mode is not supported by the UART that IBM - selected for use in the IBM PC.</para> - - <para>Depending on the computer manufacturer, a DB25, a DB9, - or both types of connector may be used for RS232-C - communications. (The IBM PC also uses a DB25 connector for - the parallel printer interface which causes some - confusion.)</para> - - <para>Below is a table of the RS232-C signal assignments in - the DB25 and DB9 connectors.</para> - - <informaltable frame="none"> - <tgroup cols="7"> - <thead> - <row> - <entry>DB25 RS232-C Pin</entry> - <entry>DB9 IBM PC Pin</entry> - <entry>EIA Circuit Symbol</entry> - <entry>CCITT Circuit Symbol</entry> - <entry>Common Name</entry> - <entry>Signal Source</entry> - <entry>Description</entry> - </row> - </thead> - - <tbody> - <row> - <entry>1</entry> - <entry>-</entry> - <entry>AA</entry> - <entry>101</entry> - <entry>PG/FG</entry> - <entry>-</entry> - <entry>Frame/Protective Ground</entry> - </row> - - <row> - <entry>2</entry> - <entry>3</entry> - <entry>BA</entry> - <entry>103</entry> - <entry>TD</entry> - <entry>DTE</entry> - <entry>Transmit Data</entry> - </row> - - <row> - <entry>3</entry> - <entry>2</entry> - <entry>BB</entry> - <entry>104</entry> - <entry>RD</entry> - <entry>DCE</entry> - <entry>Receive Data</entry> - </row> - - <row> - <entry>4</entry> - <entry>7</entry> - <entry>CA</entry> - <entry>105</entry> - <entry>RTS</entry> - <entry>DTE</entry> - <entry>Request to Send</entry> - </row> - - <row> - <entry>5</entry> - <entry>8</entry> - <entry>CB</entry> - <entry>106</entry> - <entry>CTS</entry> - <entry>DCE</entry> - <entry>Clear to Send</entry> - </row> - - <row> - <entry>6</entry> - <entry>6</entry> - <entry>CC</entry> - <entry>107</entry> - <entry>DSR</entry> - <entry>DCE</entry> - <entry>Data Set Ready</entry> - </row> - - <row> - <entry>7</entry> - <entry>5</entry> - <entry>AV</entry> - <entry>102</entry> - <entry>SG/GND</entry> - <entry>-</entry> - <entry>Signal Ground</entry> - </row> - - <row> - <entry>8</entry> - <entry>1</entry> - <entry>CF</entry> - <entry>109</entry> - <entry>DCD/CD</entry> - <entry>DCE</entry> - <entry>Data Carrier Detect</entry> - </row> - - <row> - <entry>9</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>Reserved for Test</entry> - </row> - - <row> - <entry>10</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>Reserved for Test</entry> - </row> - - <row> - <entry>11</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>Reserved for Test</entry> - </row> - - <row> - <entry>12</entry> - <entry>-</entry> - <entry>CI</entry> - <entry>122</entry> - <entry>SRLSD</entry> - <entry>DCE</entry> - <entry>Sec. Recv. Line Signal Detector</entry> - </row> - - <row> - <entry>13</entry> - <entry>-</entry> - <entry>SCB</entry> - <entry>121</entry> - <entry>SCTS</entry> - <entry>DCE</entry> - <entry>Secondary Clear to Send</entry> - </row> - - <row> - <entry>14</entry> - <entry>-</entry> - <entry>SBA</entry> - <entry>118</entry> - <entry>STD</entry> - <entry>DTE</entry> - <entry>Secondary Transmit Data</entry> - </row> - - <row> - <entry>15</entry> - <entry>-</entry> - <entry>DB</entry> - <entry>114</entry> - <entry>TSET</entry> - <entry>DCE</entry> - <entry>Trans. Sig. Element Timing</entry> - </row> - - <row> - <entry>16</entry> - <entry>-</entry> - <entry>SBB</entry> - <entry>119</entry> - <entry>SRD</entry> - <entry>DCE</entry> - <entry>Secondary Received Data</entry> - </row> - - <row> - <entry>17</entry> - <entry>-</entry> - <entry>DD</entry> - <entry>115</entry> - <entry>RSET</entry> - <entry>DCE</entry> - <entry>Receiver Signal Element Timing</entry> - </row> - - <row> - <entry>18</entry> - <entry>-</entry> - <entry>-</entry> - <entry>141</entry> - <entry>LOOP</entry> - <entry>DTE</entry> - <entry>Local Loopback</entry> - </row> - - <row> - <entry>19</entry> - <entry>-</entry> - <entry>SCA</entry> - <entry>120</entry> - <entry>SRS</entry> - <entry>DTE</entry> - <entry>Secondary Request to Send</entry> - </row> - - <row> - <entry>20</entry> - <entry>4</entry> - <entry>CD</entry> - <entry>108.2</entry> - <entry>DTR</entry> - <entry>DTE</entry> - <entry>Data Terminal Ready</entry> - </row> - - <row> - <entry>21</entry> - <entry>-</entry> - <entry>-</entry> - <entry>-</entry> - <entry>RDL</entry> - <entry>DTE</entry> - <entry>Remote Digital Loopback</entry> - </row> - - <row> - <entry>22</entry> - <entry>9</entry> - <entry>CE</entry> - <entry>125</entry> - <entry>RI</entry> - <entry>DCE</entry> - <entry>Ring Indicator</entry> - </row> - - <row> - <entry>23</entry> - <entry>-</entry> - <entry>CH</entry> - <entry>111</entry> - <entry>DSRS</entry> - <entry>DTE</entry> - <entry>Data Signal Rate Selector</entry> - </row> - - <row> - <entry>24</entry> - <entry>-</entry> - <entry>DA</entry> - <entry>113</entry> - <entry>TSET</entry> - <entry>DTE</entry> - <entry>Trans. Sig. Element Timing</entry> - </row> - - <row> - <entry>25</entry> - <entry>-</entry> - <entry>-</entry> - <entry>142</entry> - <entry>-</entry> - <entry>DCE</entry> - <entry>Test Mode</entry> - </row> - </tbody> - </tgroup> - </informaltable> - </sect5> - </sect4> - - <sect4> - <title>Bits, Baud and Symbols</title> - - <para>Baud is a measurement of transmission speed in - asynchronous communication. Because of advances in modem - communication technology, this term is frequently misused when - describing the data rates in newer devices.</para> - - <para>Traditionally, a Baud Rate represents the number of bits - that are actually being sent over the media, not the amount of - data that is actually moved from one DTE device to the other. - The Baud count includes the overhead bits Start, Stop and - Parity that are generated by the sending UART and removed by - the receiving UART. This means that seven-bit words of data - actually take 10 bits to be completely transmitted. Therefore, - a modem capable of moving 300 bits per second from one place - to another can normally only move 30 7-bit words if Parity is - used and one Start and Stop bit are present.</para> - - <para>If 8-bit data words are used and Parity bits are also - used, the data rate falls to 27.27 words per second, because - it now takes 11 bits to send the eight-bit words, and the - modem still only sends 300 bits per second.</para> - - <para>The formula for converting bytes per second into a baud - rate and vice versa was simple until error-correcting modems - came along. These modems receive the serial stream of bits - from the UART in the host computer (even when internal modems - are used the data is still frequently serialized) and converts - the bits back into bytes. These bytes are then combined into - packets and sent over the phone line using a Synchronous - transmission method. This means that the Stop, Start, and - Parity bits added by the UART in the DTE (the computer) were - removed by the modem before transmission by the sending modem. - When these bytes are received by the remote modem, the remote - modem adds Start, Stop and Parity bits to the words, converts - them to a serial format and then sends them to the receiving - UART in the remote computer, who then strips the Start, Stop - and Parity bits.</para> - - <para>The reason all these extra conversions are done is so that - the two modems can perform error correction, which means that - the receiving modem is able to ask the sending modem to resend - a block of data that was not received with the correct - checksum. This checking is handled by the modems, and the DTE - devices are usually unaware that the process is - occurring.</para> - - <para>By striping the Start, Stop and Parity bits, the - additional bits of data that the two modems must share between - themselves to perform error-correction are mostly concealed - from the effective transmission rate seen by the sending and - receiving DTE equipment. For example, if a modem sends ten - 7-bit words to another modem without including the Start, Stop - and Parity bits, the sending modem will be able to add 30 bits - of its own information that the receiving modem can use to do - error-correction without impacting the transmission speed of - the real data.</para> - - <para>The use of the term Baud is further confused by modems - that perform compression. A single 8-bit word passed over the - telephone line might represent a dozen words that were - transmitted to the sending modem. The receiving modem will - expand the data back to its original content and pass that - data to the receiving DTE.</para> - - <para>Modern modems also include buffers that allow the rate - that bits move across the phone line (DCE to DCE) to be a - different speed than the speed that the bits move between the - DTE and DCE on both ends of the conversation. Normally the - speed between the DTE and DCE is higher than the DCE to DCE - speed because of the use of compression by the modems.</para> - - <para>Because the number of bits needed to describe a byte - varied during the trip between the two machines plus the - differing bits-per-seconds speeds that are used present on - the DTE-DCE and DCE-DCE links, the usage of the term Baud to - describe the overall communication speed causes problems and - can misrepresent the true transmission speed. So Bits Per - Second (bps) is the correct term to use to describe the - transmission rate seen at the DCE to DCE interface and Baud or - Bits Per Second are acceptable terms to use when a connection - is made between two systems with a wired connection, or if a - modem is in use that is not performing error-correction or - compression.</para> - - <para>Modern high speed modems (2400, 9600, 14,400, and - 19,200bps) in reality still operate at or below 2400 baud, or - more accurately, 2400 Symbols per second. High speed modem - are able to encode more bits of data into each Symbol using a - technique called Constellation Stuffing, which is why the - effective bits per second rate of the modem is higher, but the - modem continues to operate within the limited audio bandwidth - that the telephone system provides. Modems operating at 28,800 - and higher speeds have variable Symbol rates, but the - technique is the same.</para> - - </sect4> - - <sect4> - <title>The IBM Personal Computer UART</title> - - <para>Starting with the original IBM Personal Computer, IBM - selected the National Semiconductor INS8250 UART for use in - the IBM PC Parallel/Serial Adapter. Subsequent generations of - compatible computers from IBM and other vendors continued to - use the INS8250 or improved versions of the National - Semiconductor UART family.</para> - - - <sect5> - <title>National Semiconductor UART Family Tree</title> - - <para>There have been several versions and subsequent - generations of the INS8250 UART. Each major version is - described below.</para> - - <!-- This should really be a graphic --> - <programlisting> -INS8250 -> INS8250B - \ - \ - \-> INS8250A -> INS82C50A - \ - \ - \-> NS16450 -> NS16C450 - \ - \ - \-> NS16550 -> NS16550A -> PC16550D</programlisting> - - - <variablelist> - <varlistentry><term>INS8250</term> - <listitem> - <para>This part was used in the original IBM PC and - IBM PC/XT. The original name for this part was the - INS8250 ACE (Asynchronous Communications Element) - and it is made from NMOS technology.</para> - - <para>The 8250 uses eight I/O ports and has a one-byte - send and a one-byte receive buffer. This original - UART has several race conditions and other flaws. - The original IBM BIOS includes code to work around - these flaws, but this made the BIOS dependent on the - flaws being present, so subsequent parts like the - 8250A, 16450 or 16550 could not be used in the - original IBM PC or IBM PC/XT.</para> - </listitem> - </varlistentry> - - <varlistentry><term>INS8250-B</term> - - <listitem> - <para>This is the slower speed of the INS8250 made - from NMOS technology. It contains the same problems - as the original INS8250.</para> - </listitem> - </varlistentry> - - <varlistentry><term>INS8250A</term> - - <listitem> - <para>An improved version of the INS8250 using XMOS - technology with various functional flaws corrected. - The INS8250A was used initially in PC clone - computers by vendors who used “clean” BIOS designs. - Because of the corrections in the chip, this part - could not be used with a BIOS compatible with the - INS8250 or INS8250B.</para> - </listitem> - </varlistentry> - - <varlistentry><term>INS82C50A</term> - - <listitem> - <para>This is a CMOS version (low power consumption) - of the INS8250A and has similar functional - characteristics.</para> - </listitem> - </varlistentry> - - <varlistentry><term>NS16450</term> - - <listitem> - <para>Same as NS8250A with improvements so it can be - used with faster CPU bus designs. IBM used this - part in the IBM AT and updated the IBM BIOS to no - longer rely on the bugs in the INS8250.</para> - </listitem> - </varlistentry> - - <varlistentry><term>NS16C450</term> - - <listitem> - <para>This is a CMOS version (low power consumption) - of the NS16450.</para> - </listitem> - </varlistentry> - - <varlistentry><term>NS16550</term> - - <listitem> - <para>Same as NS16450 with a 16-byte send and receive - buffer but the buffer design was flawed and could - not be reliably be used.</para> - </listitem> - </varlistentry> - - <varlistentry><term>NS16550A</term> - - <listitem> - <para>Same as NS16550 with the buffer flaws corrected. - The 16550A and its successors have become the most - popular UART design in the PC industry, mainly due - it its ability to reliably handle higher data rates - on operating systems with sluggish interrupt - response times.</para> - </listitem> - </varlistentry> - - <varlistentry><term>NS16C552</term> - - <listitem> - <para>This component consists of two NS16C550A CMOS - UARTs in a single package.</para> - </listitem> - </varlistentry> - - <varlistentry><term>PC16550D</term> - - <listitem> - <para>Same as NS16550A with subtle flaws corrected. - This is revision D of the 16550 family and is the - latest design available from National Semiconductor.</para> - - </listitem> - </varlistentry> - </variablelist> - - - </sect5> - - <sect5> - <title>The NS16550AF and the PC16550D are the same - thing</title> - - <para>National reorganized their part numbering system a few - years ago, and the NS16550AFN no longer exists by that name. - (If you have a NS16550AFN, look at the date code on the - part, which is a four digit number that usually starts with - a nine. The first two digits of the number are the year, - and the last two digits are the week in that year when the - part was packaged. If you have a NS16550AFN, it is probably - a few years old.)</para> - - <para>The new numbers are like PC16550DV, with minor - differences in the suffix letters depending on the package - material and its shape. (A description of the numbering - system can be found below.)</para> - - <para>It is important to understand that in some stores, you - may pay $15(US) for a NS16550AFN made in 1990 and in the - next bin are the new PC16550DN parts with minor fixes that - National has made since the AFN part was in production, the - PC16550DN was probably made in the past six months and it - costs half (as low as $5(US) in volume) as much as the - NS16550AFN because they are readily available.</para> - - <para>As the supply of NS16550AFN chips continues to shrink, - the price will probably continue to increase until more - people discover and accept that the PC16550DN really has the - same function as the old part number.</para> - - </sect5> - - <sect5> - <title>National Semiconductor Part Numbering System</title> - - <para>The older NS<replaceable>nnnnnrqp</replaceable> part numbers - are now of the format - PC<replaceable>nnnnnrgp</replaceable>.</para> - - <para>The <replaceable>r</replaceable> is the revision field. The - current revision of the 16550 from National Semiconductor is - <literal>D</literal>.</para> - - <para>The <replaceable>p</replaceable> is the package-type field. - The types are:</para> - - <informaltable frame="none"> - <tgroup cols="3"> - <tbody> - <row> - <entry>"F"</entry> - <entry>QFP</entry> - <entry>(quad flat pack) L lead type</entry> - </row> - - <row> - <entry>"N"</entry> - <entry>DIP</entry> - <entry>(dual inline package) through hole straight - lead type</entry> - </row> - - <row> - <entry>"V"</entry> - <entry>LPCC</entry> - <entry>(lead plastic chip carrier) J lead type</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <para>The <replaceable>g</replaceable> is the product grade field. - If an <literal>I</literal> precedes the package-type letter, it indicates an - “industrial” grade part, which has higher specs than a - standard part but not as high as Military Specification - (Milspec) component. This is an optional field.</para> - - <para>So what we used to call a NS16550AFN (DIP Package) is - now called a PC16550DN or PC16550DIN.</para> - - </sect5> - </sect4> - - <sect4> - <title>Other Vendors and Similar UARTs</title> - - <para>Over the years, the 8250, 8250A, 16450 and 16550 have been - licensed or copied by other chip vendors. In the case of the - 8250, 8250A and 16450, the exact circuit (the “megacell”) was - licensed to many vendors, including Western Digital and Intel. - Other vendors reverse-engineered the part or produced - emulations that had similar behavior.</para> - - <para>In internal modems, the modem designer will frequently - emulate the 8250A/16450 with the modem microprocessor, and the - emulated UART will frequently have a hidden buffer consisting - of several hundred bytes. Because of the size of the buffer, - these emulations can be as reliable as a 16550A in their - ability to handle high speed data. However, most operating - systems will still report that the UART is only a 8250A or - 16450, and may not make effective use of the extra buffering - present in the emulated UART unless special drivers are - used.</para> - - <para>Some modem makers are driven by market forces to abandon a - design that has hundreds of bytes of buffer and instead use a - 16550A UART so that the product will compare favorably in - market comparisons even though the effective performance may - be lowered by this action.</para> - - <para>A common misconception is that all parts with “16550A” - written on them are identical in performance. There are - differences, and in some cases, outright flaws in most of - these 16550A clones.</para> - - <para>When the NS16550 was developed, the National Semiconductor - obtained several patents on the design and they also limited - licensing, making it harder for other vendors to provide a - chip with similar features. Because of the patents, - reverse-engineered designs and emulations had to avoid - infringing the claims covered by the patents. Subsequently, - these copies almost never perform exactly the same as the - NS16550A or PC16550D, which are the parts most computer and - modem makers want to buy but are sometimes unwilling to pay - the price required to get the genuine part.</para> - - <para>Some of the differences in the clone 16550A parts are - unimportant, while others can prevent the device from being - used at all with a given operating system or driver. These - differences may show up when using other drivers, or when - particular combinations of events occur that were not well - tested or considered in the Windows driver. This is because - most modem vendors and 16550-clone makers use the Microsoft - drivers from Windows for Workgroups 3.11 and the Microsoft MSD - utility as the primary tests for compatibility with the - NS16550A. This over-simplistic criteria means that if a - different operating system is used, problems could appear due - to subtle differences between the clones and genuine - components.</para> - - <para>National Semiconductor has made available a program named - <application>COMTEST</application> that performs compatibility tests independent of any - OS drivers. It should be remembered that the purpose of this - type of program is to demonstrate the flaws in the products of - the competition, so the program will report major as well as - extremely subtle differences in behavior in the part being - tested.</para> - - <para>In a series of tests performed by the author of this - document in 1994, components made by National Semiconductor, - TI, StarTech, and CMD as well as megacells and emulations - embedded in internal modems were tested with COMTEST. A - difference count for some of these components is listed below. - Because these tests were performed in 1994, they may not - reflect the current performance of the given product from a - vendor.</para> - - <para>It should be noted that COMTEST normally aborts when an - excessive number or certain types of problems have been - detected. As part of this testing, COMTEST was modified so - that it would not abort no matter how many differences were - encountered.</para> - - <informaltable frame="none"> - <tgroup cols="3"> - <thead> - <row> - <entry>Vendor</entry> - <entry>Part Number</entry> - <entry>Errors (aka "differences" reported)</entry> - </row> - </thead> - - <tbody> - <row> - <entry>National</entry> - <entry>(PC16550DV)</entry> - <entry>0</entry> - </row> - - <row> - <entry>National</entry> - <entry>(NS16550AFN)</entry> - <entry>0</entry> - </row> - - <row> - <entry>National</entry> - <entry>(NS16C552V)</entry> - <entry>0</entry> - </row> - - <row> - <entry>TI</entry> - <entry>(TL16550AFN)</entry> - <entry>3</entry> - </row> - - <row> - <entry>CMD</entry> - <entry>(16C550PE)</entry> - <entry>19</entry> - </row> - - <row> - <entry>StarTech</entry> - <entry>(ST16C550J)</entry> - <entry>23</entry> - </row> - - <row> - <entry>Rockwell</entry> - <entry>Reference modem with internal 16550 or an - emulation (RC144DPi/C3000-25)</entry> - <entry>117</entry> - </row> - - <row> - <entry>Sierra</entry> - <entry>Modem with an internal 16550 - (SC11951/SC11351)</entry> - <entry>91</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <note> - <para>To date, the author of this document has not - found any non-National parts that report zero - differences using the COMTEST program. It should - also be noted that National has had five versions - of the 16550 over the years and the newest parts - behave a bit differently than the classic - NS16550AFN that is considered the benchmark for - functionality. COMTEST appears to turn a blind eye - to the differences within the National product - line and reports no errors on the National parts - (except for the original 16550) even when there - are official erratas that describe bugs in the A, - B and C revisions of the parts, so this bias in - COMTEST must be taken into account.</para> - </note> - - <para>It is important to understand that a simple count of - differences from COMTEST does not reveal a lot about what - differences are important and which are not. For example, - about half of the differences reported in the two modems - listed above that have internal UARTs were caused by the clone - UARTs not supporting five- and six-bit character modes. The - real 16550, 16450, and 8250 UARTs all support these modes and - COMTEST checks the functionality of these modes so over fifty - differences are reported. However, almost no modern modem - supports five- or six-bit characters, particularly those with - error-correction and compression capabilities. This means - that the differences related to five- and six-bit character - modes can be discounted.</para> - - <para>Many of the differences COMTEST reports have to do with - timing. In many of the clone designs, when the host reads - from one port, the status bits in some other port may not - update in the same amount of time (some faster, some slower) - as a <emphasis>real</emphasis> NS16550AFN and COMTEST looks - for these differences. This means that the number of - differences can be misleading in that one device may only have - one or two differences but they are extremely serious, and - some other device that updates the status registers faster or - slower than the reference part (that would probably never - affect the operation of a properly written driver) could have - dozens of differences reported.</para> - - <para>COMTEST can be used as a screening tool to alert the - administrator to the presence of potentially incompatible - components that might cause problems or have to be handled as - a special case.</para> - - <para>If you run COMTEST on a 16550 that is in a modem or a - modem is attached to the serial port, you need to first issue - a ATE0&W command to the modem so that the modem will not - echo any of the test characters. If you forget to do this, - COMTEST will report at least this one difference:</para> - - - <screen>Error (6)...Timeout interrupt failed: IIR = c1 LSR = 61</screen> - - - </sect4> - - <sect4> - <title>8250/16450/16550 Registers</title> - - <para>The 8250/16450/16550 UART occupies eight contiguous I/O - port addresses. In the IBM PC, there are two defined - locations for these eight ports and they are known - collectively as COM1 and COM2. The makers of PC-clones and - add-on cards have created two additional areas known as COM3 - and COM4, but these extra COM ports conflict with other - hardware on some systems. The most common conflict is with - video adapters that provide IBM 8514 emulation.</para> - - <para>COM1 is located from 0x3f8 to 0x3ff and normally uses IRQ - 4 COM2 is located from 0x2f8 to 0x2ff and normally uses IRQ 3 - COM3 is located from 0x3e8 to 0x3ef and has no standardized - IRQ COM4 is located from 0x2e8 to 0x2ef and has no - standardized IRQ.</para> - - <para>A description of the I/O ports of the 8250/16450/16550 - UART is provided below.</para> - - <informaltable frame="none"> - <tgroup cols="3"> - <thead> - <row> - <entry>I/O Port</entry> - <entry>Access Allowed</entry> - <entry>Description</entry> - </row> - </thead> - - <tbody> - <row> - <entry>+0x00</entry> - <entry>write (DLAB==0)</entry> - <entry><para>Transmit Holding Register (THR).</para><para>Information written to this port are treated as - data words and will be transmitted by the - UART.</para></entry> - </row> - - <row> - <entry>+0x00</entry> - <entry>read (DLAB==0)</entry> - <entry><para>Receive Buffer Register (RBR).</para><para>Any data words received by the UART form the - serial link are accessed by the host by reading this - port.</para></entry> - </row> - - <row> - <entry>+0x00</entry> - <entry>write/read (DLAB==1)</entry> - <entry><para>Divisor Latch LSB (DLL)</para><para>This - value will be divided from the master input clock - (in the IBM PC, the master clock is 1.8432MHz) and - the resulting clock will determine the baud rate of - the UART. This register holds bits 0 thru 7 of the - divisor.</para></entry> - </row> - - <row> - <entry>+0x01</entry> - <entry>write/read (DLAB==1)</entry> - <entry><para>Divisor Latch MSB (DLH)</para><para>This - value will be divided from the master input clock - (in the IBM PC, the master clock is 1.8432MHz) and - the resulting clock will determine the baud rate of - the UART. This register holds bits 8 thru 15 of the - divisor.</para></entry> - </row> - - <row> - <entry>+0x01</entry> - <entry>write/read (DLAB==0)</entry> - <entrytbl cols="2"> - <colspec colnum="1" colname="col1"> - <colspec colnum="2" colname="col2"> - <spanspec namest="col1" nameend="col2" spanname="1to2"> - <tbody> - <row> - <entry spanname="1to2"><para>Interrupt Enable - Register (IER)</para><para>The 8250/16450/16550 UART classifies - events into one of four categories. Each - category can be configured to generate an - interrupt when any of the events occurs. The - 8250/16450/16550 UART generates a single - external interrupt signal regardless of how - many events in the enabled categories have - occurred. It is up to the host processor to - respond to the interrupt and then poll the - enabled interrupt categories (usually all - categories have interrupts enabled) to - determine the true cause(s) of the - interrupt.</para></entry> - </row> - - <row> - <entry>Bit 7</entry> - <entry>Reserved, always 0.</entry> - </row> - - <row> - <entry>Bit 6</entry> - <entry>Reserved, always 0.</entry> - </row> - - <row> - <entry>Bit 5</entry> - <entry>Reserved, always 0.</entry> - </row> - - <row> - <entry>Bit 4</entry> - <entry>Reserved, always 0.</entry> - </row> - - <row> - <entry>Bit 3</entry> - <entry>Enable Modem Status Interrupt (EDSSI). - Setting this bit to "1" allows the UART to - generate an interrupt when a change occurs - on one or more of the status lines.</entry> - </row> - - <row> - <entry>Bit 2</entry> - <entry>Enable Receiver Line Status Interrupt (ELSI) - Setting this bit to "1" causes the UART to - generate an interrupt when the an error - (or a BREAK signal) has been detected in - the incoming data.</entry> - </row> - - <row> - <entry>Bit 1</entry> - <entry>Enable Transmitter Holding Register Empty - Interrupt (ETBEI) Setting this bit to "1" - causes the UART to generate an interrupt - when the UART has room for one or more - additional characters that are to be - transmitted.</entry> - </row> - - <row> - <entry>Bit 0</entry> - <entry>Enable Received Data Available Interrupt - (ERBFI) Setting this bit to "1" causes the - UART to generate an interrupt when the - UART has received enough characters to - exceed the trigger level of the FIFO, or - the FIFO timer has expired (stale data), - or a single character has been received - when the FIFO is disabled.</entry> - </row> - </tbody> - </entrytbl> - </row> - - <row> - <entry>+0x02</entry> - <entry>write</entry> - <entrytbl cols="4"> - <colspec colnum="1" colname="col1"> - <colspec colnum="2" colname="col2"> - <colspec colnum="3" colname="col3"> - <colspec colnum="4" colname="col4"> - <spanspec namest="col1" nameend="col4" spanname="1to4"> - <spanspec namest="col2" nameend="col4" spanname="2to4"> - - <tbody> - <row> - <entry spanname="1to4">FIFO Control Register (FCR) - (This port does not exist on the 8250 and 16450 - UART.)</entry> - </row> - - <row> - <entry>Bit 7</entry> - <entry spanname="2to4">Receiver Trigger Bit - #1</entry> - </row> - - <row> - <entry>Bit 6</entry> - <entry spanname="2to4"><para>Receiver Trigger Bit - #0</para><para>These two bits control at what - point the receiver is to generate an interrupt - when the FIFO is active.</para></entry> - </row> - - <row> - <entry colname="col2">7</entry> - <entry colname="col3">6</entry> - <entry colname="col4">How many words are received - before an interrupt is generated</entry> - </row> - - <row> - <entry colname="col2">0</entry> - <entry colname="col3">0</entry> - <entry colname="col4">1</entry> - </row> - - <row> - <entry colname="col2">0</entry> - <entry colname="col3">1</entry> - <entry colname="col4">4</entry> - </row> - - <row> - <entry colname="col2">1</entry> - <entry colname="col3">0</entry> - <entry colname="col4">8</entry> - </row> - - <row> - <entry colname="col2">1</entry> - <entry colname="col3">1</entry> - <entry colname="col4">14</entry> - </row> - - <row> - <entry>Bit 5</entry> - <entry spanname="2to4">Reserved, always 0.</entry> - </row> - - <row> - <entry>Bit 4</entry> - <entry spanname="2to4">Reserved, always 0.</entry> - </row> - - <row> - <entry>Bit 3</entry> - <entry spanname="2to4">DMA Mode Select. If Bit 0 - is set to "1" (FIFOs enabled), setting this bit - changes the operation of the -RXRDY and -TXRDY - signals from Mode 0 to Mode 1.</entry> - </row> - - <row> - <entry>Bit 2</entry> - <entry spanname="2to4">Transmit FIFO Reset. When a - "1" is written to this bit, the contents of the - FIFO are discarded. Any word currently being - transmitted will be sent intact. This function - is useful in aborting transfers.</entry> - </row> - - <row> - <entry>Bit 1</entry> - <entry spanname="2to4">Receiver FIFO Reset. When a - "1" is written to this bit, the contents of the - FIFO are discarded. Any word currently being - assembled in the shift register will be received - intact.</entry> - </row> - - <row> - <entry>Bit 0</entry> - <entry spanname="2to4">16550 FIFO Enable. When - set, both the transmit and receive FIFOs are - enabled. Any contents in the holding register, - shift registers or FIFOs are lost when FIFOs are - enabled or disabled.</entry> - </row> - </tbody> - </entrytbl> - </row> - - <row> - <entry>+0x02</entry> - <entry>read</entry> - <entrytbl cols="6"> - <colspec colnum="1" colname="col1"> - <colspec colnum="2" colname="col2"> - <colspec colnum="3" colname="col3"> - <colspec colnum="4" colname="col4"> - <colspec colnum="5" colname="col5"> - <colspec colnum="6" colname="col6"> - <spanspec namest="col1" nameend="col6" spanname="1to6"> - <spanspec namest="col2" nameend="col6" spanname="2to6"> - <tbody> - <row> - <entry spanname="1to6">Interrupt Identification - Register</entry> - </row> - - <row> - <entry>Bit 7</entry> - <entry spanname="2to6">FIFOs enabled. On the - 8250/16450 UART, this bit is zero.</entry> - </row> - - <row> - <entry>Bit 6</entry> - <entry spanname="2to6">FIFOs enabled. On the - 8250/16450 UART, this bit is zero.</entry> - </row> - - <row> - <entry>Bit 5</entry> - <entry spanname="2to6">Reserved, always 0.</entry> - </row> - - <row> - <entry>Bit 4</entry> - <entry spanname="2to6">Reserved, always 0.</entry> - </row> - - <row> - <entry>Bit 3</entry> - <entry spanname="2to6">Interrupt ID Bit #2. On the - 8250/16450 UART, this bit is zero.</entry> - </row> - - <row> - <entry>Bit 2</entry> - <entry spanname="2to6">Interrupt ID Bit #1</entry> - </row> - - <row> - <entry>Bit 1</entry> - <entry spanname="2to6">Interrupt ID Bit #0.These - three bits combine to report the category of - event that caused the interrupt that is in - progress. These categories have priorities, so - if multiple categories of events occur at the - same time, the UART will report the more - important events first and the host must resolve - the events in the order they are reported. All - events that caused the current interrupt must be - resolved before any new interrupts will be - generated. (This is a limitation of the PC - architecture.)</entry> - </row> - - <row> - <entry colname="col2">2</entry> - <entry colname="col3">1</entry> - <entry colname="col4">0</entry> - <entry colname="col5">Priority</entry> - <entry colname="col6">Description</entry> - </row> - - <row> - <entry colname="col2">0</entry> - <entry colname="col3">1</entry> - <entry colname="col4">1</entry> - <entry colname="col5">First</entry> - <entry colname="col6">Received Error (OE, PE, BI, - or FE)</entry> - </row> - - <row> - <entry colname="col2">0</entry> - <entry colname="col3">1</entry> - <entry colname="col4">0</entry> - <entry colname="col5">Second</entry> - <entry colname="col6">Received Data - Available</entry> - </row> - <row> - <entry colname="col2">1</entry> - <entry colname="col3">1</entry> - <entry colname="col4">0</entry> - <entry colname="col5">Second</entry> - <entry colname="col6">Trigger level identification - (Stale data in receive buffer)</entry> - </row> - <row> - <entry colname="col2">0</entry> - <entry colname="col3">0</entry> - <entry colname="col4">1</entry> - <entry colname="col5">Third</entry> - <entry colname="col6">Transmitter has room for - more words (THRE)</entry> - </row> - <row> - <entry colname="col2">0</entry> - <entry colname="col3">0</entry> - <entry colname="col4">0</entry> - <entry colname="col5">Fourth</entry> - <entry colname="col6">Modem Status Change (-CTS, - -DSR, -RI, or -DCD)</entry> - </row> - - <row> - <entry>Bit 0</entry> - <entry spanname="2to6">Interrupt Pending Bit. If - this bit is set to "0", then at least one - interrupt is pending.</entry> - </row> - </tbody> - </entrytbl> - </row> - - <row> - <entry>+0x03</entry> - <entry>write/read</entry> - <entrytbl cols="5"> - <colspec colnum="1" colname="col1"> - <colspec colnum="2" colname="col2"> - <colspec colnum="3" colname="col3"> - <colspec colnum="4" colname="col4"> - <colspec colnum="5" colname="col5"> - <spanspec namest="col1" nameend="col5" spanname="1to5"> - <spanspec namest="col2" nameend="col5" spanname="2to5"> - <spanspec namest="col4" nameend="col5" spanname="4to5"> - <tbody> - <row> - <entry spanname="1to5">Line Control - Register (LCR)</entry> - </row> - - <row> - <entry>Bit 7</entry> - <entry spanname="2to5">Divisor Latch Access Bit - (DLAB). When set, access to the data - transmit/receive register (THR/RBR) and the - Interrupt Enable Register (IER) is disabled. Any - access to these ports is now redirected to the - Divisor Latch Registers. Setting this bit, - loading the Divisor Registers, and clearing DLAB - should be done with interrupts disabled.</entry> - </row> - - <row> - <entry>Bit 6</entry> - <entry spanname="2to5">Set Break. When set to "1", - the transmitter begins to transmit continuous - Spacing until this bit is set to "0". This - overrides any bits of characters that are being - transmitted.</entry> - </row> - - <row> - <entry>Bit 5</entry> - <entry spanname="2to5">Stick Parity. When parity - is enabled, setting this bit causes parity to - always be "1" or "0", based on the value of Bit - 4.</entry> - </row> - - <row> - <entry>Bit 4</entry> - <entry spanname="2to5">Even Parity Select (EPS). - When parity is enabled and Bit 5 is "0", setting - this bit causes even parity to be transmitted - and expected. Otherwise, odd parity is - used.</entry> - </row> - - <row> - <entry>Bit 3</entry> - <entry spanname="2to5">Parity Enable (PEN). When - set to "1", a parity bit is inserted between the - last bit of the data and the Stop Bit. The UART - will also expect parity to be present in the - received data.</entry> - </row> - - <row> - <entry>Bit 2</entry> - <entry spanname="2to5">Number of Stop Bits (STB). - If set to "1" and using 5-bit data words, 1.5 - Stop Bits are transmitted and expected in each - data word. For 6, 7 and 8-bit data words, 2 - Stop Bits are transmitted and expected. When - this bit is set to "0", one Stop Bit is used on - each data word.</entry> - </row> - - <row> - <entry>Bit 1</entry> - <entry spanname="2to5">Word Length Select Bit #1 - (WLSB1)</entry> - </row> - - <row> - <entry>Bit 0</entry> - <entry spanname="2to5">Word Length Select Bit #0 - (WLSB0)</entry> - </row> - - <row> - <entry colname="col2" spanname="2to5">Together - these bits specify the number of bits in each - data word.</entry> - </row> - - <row> - <entry colname="col2">1</entry> - <entry colname="col3">0</entry> - <entry colname="col4" spanname="4to5">Word - Length</entry> - </row> - - <row> - <entry colname="col2">0</entry> - <entry colname="col3">0</entry> - <entry colname="col4" spanname="4to5">5 Data - Bits</entry> - </row> - - <row> - <entry colname="col2">0</entry> - <entry colname="col3">1</entry> - <entry colname="col4" spanname="4to5">6 Data - Bits</entry> - </row> - - <row> - <entry colname="col2">1</entry> - <entry colname="col3">0</entry> - <entry colname="col4" spanname="4to5">7 Data - Bits</entry> - </row> - - <row> - <entry colname="col2">1</entry> - <entry colname="col3">1</entry> - <entry colname="col4" spanname="4to5">8 Data - Bits</entry> - </row> - </tbody> - </entrytbl> - </row> - - <row> - <entry>+0x04</entry> - <entry>write/read</entry> - <entrytbl cols="2"> - <colspec colnum="1" colname="col1"> - <colspec colnum="2" colname="col2"> - <spanspec namest="col1" nameend="col2" spanname="1to2"> - <tbody> - <row> - <entry spanname="1to2">Modem Control Register - (MCR)</entry> - </row> - - <row> - <entry>Bit 7</entry> - <entry>Reserved, always 0.</entry> - </row> - - <row> - <entry>Bit 6</entry> - <entry>Reserved, always 0.</entry> - </row> - - <row> - <entry>Bit 5</entry> - <entry>Reserved, always 0.</entry> - </row> - - <row> - <entry>Bit 4</entry> - <entry>Loop-Back Enable. When set to "1", the UART - transmitter and receiver are internally - connected together to allow diagnostic - operations. In addition, the UART modem control - outputs are connected to the UART modem control - inputs. CTS is connected to RTS, DTR is - connected to DSR, OUT1 is connected to RI, and - OUT 2 is connected to DCD.</entry> - </row> - - <row> - <entry>Bit 3</entry> - <entry>OUT 2. An auxiliary output that the host - processor may set high or low. In the IBM PC - serial adapter (and most clones), OUT 2 is used - to tri-state (disable) the interrupt signal from - the 8250/16450/16550 UART.</entry> - </row> - - <row> - <entry>Bit 2</entry> - <entry>OUT 1. An auxiliary output that the host - processor may set high or low. This output is - not used on the IBM PC serial adapter.</entry> - </row> - - <row> - <entry>Bit 1</entry> - <entry>Request to Send (RTS). When set to "1", the - output of the UART -RTS line is Low - (Active).</entry> - </row> - - <row> - <entry>Bit 0</entry> - <entry>Data Terminal Ready (DTR). When set to "1", - the output of the UART -DTR line is Low - (Active).</entry> - </row> - </tbody> - </entrytbl> - </row> - - <row> - <entry>+0x05</entry> - <entry>write/read</entry> - <entrytbl cols="2"> - <colspec colnum="1" colname="col1"> - <colspec colnum="2" colname="col2"> - <spanspec namest="col1" nameend="col2" spanname="1to2"> - <tbody> - <row> - <entry spanname="1to2">Line Status Register - (LSR)</entry> - </row> - - <row> - <entry>Bit 7</entry> - <entry>Error in Receiver FIFO. On the 8250/16450 - UART, this bit is zero. This bit is set to "1" - when any of the bytes in the FIFO have one or - more of the following error conditions: PE, FE, - or BI.</entry> - </row> - - <row> - <entry>Bit 6</entry> - <entry>Transmitter Empty (TEMT). When set to "1", - there are no words remaining in the transmit - FIFO or the transmit shift register. The - transmitter is completely idle.</entry> - </row> - - <row> - <entry>Bit 5</entry> - <entry>Transmitter Holding Register Empty - (THRE). When set to "1", the FIFO (or holding - register) now has room for at least one - additional word to transmit. The transmitter may - still be transmitting when this bit is set to - "1".</entry> - </row> - - <row> - <entry>Bit 4</entry> - <entry>Break Interrupt (BI). The receiver has - detected a Break signal.</entry> - </row> - - <row> - <entry>Bit 3</entry> - <entry>Framing Error (FE). A Start Bit was - detected but the Stop Bit did not appear at the - expected time. The received word is probably - garbled.</entry> - </row> - - <row> - <entry>Bit 2</entry> - <entry>Parity Error (PE). The parity bit was - incorrect for the word received.</entry> - </row> - - <row> - <entry>Bit 1</entry> - <entry>Overrun Error (OE). A new word was received - and therewas no room in the receive buffer. The - newly-arrived word in the shift register is - discarded. On 8250/16450 UARTs, the word in the - holding register is discarded and the newly- - arrived word is put in the holding - register.</entry> - </row> - - <row> - <entry>Bit 0</entry> - <entry>Data Ready (DR) One or more words are in - the receive FIFO that the host may read. A word - must be completely received and moved from the - shift register into the FIFO (or holding - register for 8250/16450 designs) before this bit - is set.</entry> - </row> - </tbody> - </entrytbl> - </row> - - <row> - <entry>+0x06</entry> - <entry>write/read</entry> - <entrytbl cols="2"> - <colspec colnum="1" colname="col1"> - <colspec colnum="2" colname="col2"> - <spanspec namest="col1" nameend="col2" spanname="1to2"> - <tbody> - <row> - <entry spanname="1to2">Modem Status Register - (MSR)</entry> - </row> - - <row> - <entry>Bit 7</entry> - <entry>Data Carrier Detect (DCD). Reflects the - state of the DCD line on the UART.</entry> - </row> - - <row> - <entry>Bit 6</entry> - <entry>Ring Indicator (RI). Reflects the state of - the RI line on the UART.</entry> - </row> - - <row> - <entry>Bit 5</entry> - <entry>Data Set Ready (DSR). Reflects the state of - the DSR line on the UART.</entry> - </row> - - <row> - <entry>Bit 4</entry> - <entry>Clear To Send (CTS). Reflects the state of - the CTS line on the UART.</entry> - </row> - - <row> - <entry>Bit 3</entry> - <entry>Delta Data Carrier Detect (DDCD). Set to - "1" if the -DCD line has changed state one more - more times since the last time the MSR was read - by the host.</entry> - </row> - - <row> - <entry>Bit 2</entry> - <entry>Trailing Edge Ring Indicator (TERI). Set to - "1" if the -RI line has had a low to high - transition since the last time the MSR was read - by the host.</entry> - </row> - - <row> - <entry>Bit 1</entry> - <entry>Delta Data Set Ready (DDSR). Set to "1" if - the -DSR line has changed state one more more - times since the last time the MSR was read by - the host.</entry> - </row> - - <row> - <entry>Bit 0</entry> - <entry>Delta Clear To Send (DCTS). Set to "1" if - the -CTS line has changed state one more more - times since the last time the MSR was read by - the host.</entry> - </row> - </tbody> - </entrytbl> - </row> - - <row> - <entry>+0x07</entry> - <entry>write/read</entry> - <entry>Scratch Register (SCR). This register performs no - function in the UART. Any value can be written by the - host to this location and read by the host later - on.</entry> - </row> - </tbody> - </tgroup> - </informaltable> - </sect4> - - <sect4> - <title>Beyond the 16550A UART</title> - - <para>Although National Semiconductor has not offered any - components compatible with the 16550 that provide additional - features, various other vendors have. Some of these - components are described below. It should be understood that - to effectively utilize these improvements, drivers may have to - be provided by the chip vendor since most of the popular - operating systems do not support features beyond those - provided by the 16550.</para> - - - <variablelist> - <varlistentry><term>ST16650</term> - <listitem> - <para>By default this part is similar to the NS16550A, - but an extended 32-byte send and receive buffer can be - optionally enabled. Made by Startech.</para> - </listitem> - </varlistentry> - - <varlistentry><term>TIL16660</term> - - <listitem> - <para>By default this part behaves similar to the - NS16550A, but an extended 64-byte send and receive - buffer can be optionally enabled. Made by Texas - Instruments.</para> - </listitem> - </varlistentry> - - <varlistentry><term>Hayes ESP</term> - - <listitem> - <para>This proprietary plug-in card contains a 2048-byte - send and receive buffer, and supports data rates to - 230.4Kbit/sec. Made by Hayes.</para> - - </listitem> - </varlistentry> - </variablelist> - - - <para>In addition to these “dumb” UARTs, many vendors produce - intelligent serial communication boards. This type of design - usually provides a microprocessor that interfaces with several - UARTs, processes and buffers the data, and then alerts the - main PC processor when necessary. Because the UARTs are not - directly accessed by the PC processor in this type of - communication system, it is not necessary for the vendor to - use UARTs that are compatible with the 8250, 16450, or the - 16550 UART. This leaves the designer free to components that - may have better performance characteristics.</para> - - </sect4> - </sect3> - - <sect3 id="sio"> - <title>Configuring the <devicename>sio</devicename> - driver</title> - - <para>The <devicename>sio</devicename> driver provides - support for NS8250-, NS16450-, NS16550 and NS16550A-based EIA - RS-232C (CCITT V.24) communications interfaces. Several - multiport cards are supported as well. See the <citerefentry><refentrytitle>sio</refentrytitle><manvolnum>4</manvolnum></citerefentry> manual page for detailed technical - documentation.</para> - - - <sect4> - <title>Digi International (DigiBoard) PC/8</title> - - <para><emphasis>Contributed by &a.awebster;.<!-- <br> -->26 - August 1995.</emphasis></para> - - <para>Here is a config snippet from a machine with a Digi - International PC/8 with 16550. It has 8 modems connected to - these 8 lines, and they work just great. Do not forget to add - <literal>options COM_MULTIPORT</literal> or it will - not work very well!</para> - - <programlisting> -device sio4 at isa? port 0x100 tty flags 0xb05 -device sio5 at isa? port 0x108 tty flags 0xb05 -device sio6 at isa? port 0x110 tty flags 0xb05 -device sio7 at isa? port 0x118 tty flags 0xb05 -device sio8 at isa? port 0x120 tty flags 0xb05 -device sio9 at isa? port 0x128 tty flags 0xb05 -device sio10 at isa? port 0x130 tty flags 0xb05 -device sio11 at isa? port 0x138 tty flags 0xb05 irq 9 vector siointr</programlisting> - - <para>The trick in setting this up is that the MSB of the flags - represent the last SIO port, in this case 11 so flags are - 0xb05.</para> - - </sect4> - - <sect4> - <title>Boca 16</title> - - <para><emphasis>Contributed by &a.whiteside;.<!-- <br> -->26 - August 1995.</emphasis></para> - - <para>The procedures to make a Boca 16 pord board with FreeBSD - are pretty straightforward, but you will need a couple things - to make it work:</para> - - - <orderedlist> - - <listitem> - <para>You either need the kernel sources installed so you - can recompile the necessary options or you will need - someone else to compile it for you. The 2.0.5 default - kernel does <emphasis>not</emphasis> come with - multiport support enabled and you will need to add a - device entry for each port anyways.</para> - </listitem> - - <listitem> - <para>Two, you will need to know the interrupt and IO - setting for your Boca Board so you can set these options - properly in the kernel.</para> - </listitem> - - </orderedlist> - - - <para>One important note — the actual UART chips for the Boca 16 - are in the connector box, not on the internal board itself. So - if you have it unplugged, probes of those ports will fail. I - have never tested booting with the box unplugged and plugging - it back in, and I suggest you do not either.</para> - - <para>If you do not already have a custom kernel configuration - file set up, refer to <link - linkend="kernelconfig">Kernel Configuration</link> for - general procedures. The following are the specifics for the - Boca 16 board and assume you are using the kernel name - MYKERNEL and editing with vi.</para> - - <procedure> - <step> - <para>Add the line - - <programlisting> -options COM_MULTIPORT</programlisting> - - to the config file.</para> - </step> - - <step> - <para>Where the current <literal>device - sio<replaceable>n</replaceable></literal> lines are, - you will need to add 16 more devices. Only - the last device includes the interrupt vector for the - board. (See the <citerefentry><refentrytitle>sio</refentrytitle><manvolnum>4</manvolnum></citerefentry> manual page for detail as - to why.) The following example is for a Boca Board with - an interrupt of 3, and a base IO address 100h. The IO - address for Each port is +8 hexadecimal from the - previous port, thus the 100h, 108h, 110h... addresses.</para> - - <programlisting> -device sio1 at isa? port 0x100 tty flags 0x1005 -device sio2 at isa? port 0x108 tty flags 0x1005 -device sio3 at isa? port 0x110 tty flags 0x1005 -device sio4 at isa? port 0x118 tty flags 0x1005 -… -device sio15 at isa? port 0x170 tty flags 0x1005 -device sio16 at isa? port 0x178 tty flags 0x1005 irq 3 vector siointr</programlisting> - - <para>The flags entry - <emphasis>must</emphasis> be changed from this example - unless you are using the exact same sio assignments. - Flags are set according to 0x<replaceable>M</replaceable><replaceable>YY</replaceable> - where <replaceable>M</replaceable> indicates the minor number - of the master port (the last port on a Boca 16) and - <replaceable>YY</replaceable> indicates if FIFO is enabled or - disabled(enabled), IRQ sharing is used(yes) and if there - is an AST/4 compatible IRQ control register(no). In this - example, - - <programlisting> -flags 0x1005</programlisting> indicates that the master port is - sio16. If I added another board and assigned sio17 - through sio28, the flags for all 16 ports on - <emphasis>that</emphasis> board would be 0x1C05, where - 1C indicates the minor number of the master port. Do not - change the 05 setting.</para> - </step> - - <step> - <para>Save and complete the kernel configuration, - recompile, install and reboot. Presuming you have - successfully installed the recompiled kernel and have it - set to the correct address and IRQ, your boot message - should indicate the successful probe of the Boca ports - as follows: (obviously the sio numbers, IO and IRQ could - be different)</para> - - - <screen>sio1 at 0x100-0x107 flags 0x1005 on isa -sio1: type 16550A (multiport) -sio2 at 0x108-0x10f flags 0x1005 on isa -sio2: type 16550A (multiport) -sio3 at 0x110-0x117 flags 0x1005 on isa -sio3: type 16550A (multiport) -sio4 at 0x118-0x11f flags 0x1005 on isa -sio4: type 16550A (multiport) -sio5 at 0x120-0x127 flags 0x1005 on isa -sio5: type 16550A (multiport) -sio6 at 0x128-0x12f flags 0x1005 on isa -sio6: type 16550A (multiport) -sio7 at 0x130-0x137 flags 0x1005 on isa -sio7: type 16550A (multiport) -sio8 at 0x138-0x13f flags 0x1005 on isa -sio8: type 16550A (multiport) -sio9 at 0x140-0x147 flags 0x1005 on isa -sio9: type 16550A (multiport) -sio10 at 0x148-0x14f flags 0x1005 on isa -sio10: type 16550A (multiport) -sio11 at 0x150-0x157 flags 0x1005 on isa -sio11: type 16550A (multiport) -sio12 at 0x158-0x15f flags 0x1005 on isa -sio12: type 16550A (multiport) -sio13 at 0x160-0x167 flags 0x1005 on isa -sio13: type 16550A (multiport) -sio14 at 0x168-0x16f flags 0x1005 on isa -sio14: type 16550A (multiport) -sio15 at 0x170-0x177 flags 0x1005 on isa -sio15: type 16550A (multiport) -sio16 at 0x178-0x17f irq 3 flags 0x1005 on isa -sio16: type 16550A (multiport master)</screen> - - - <para>If the messages go by too fast to - see, - - - <screen>&prompt.root; <userinput>dmesg | more</userinput></screen> - will - show you the boot messages.</para> - </step> - - <step> - <para>Next, appropriate entries in - <filename>/dev</filename> for the devices must be made - using the <filename>/dev/MAKEDEV</filename> script. - After becoming root:</para> - - - <screen>&prompt.root; <userinput>cd /dev</userinput> -&prompt.root; <userinput>./MAKEDEV tty1</userinput> -&prompt.root; <userinput>./MAKEDEV cua1</userinput> -<emphasis>(everything in between)</emphasis> -&prompt.root; <userinput>./MAKEDEV ttyg</userinput> -&prompt.root; <userinput>./MAKEDEV cuag</userinput></screen> - - - <para>If you do not want or need callout - devices for some reason, you can dispense with making - the <filename>cua*</filename> devices.</para> - </step> - - <step> - <para>If you want a quick and sloppy way to make sure the - devices are working, you can simply plug a modem into - each port and (as root) - - - <screen>&prompt.root; <userinput>echo at > ttyd*</userinput></screen> - for each device you have made. You - <emphasis>should</emphasis> see the RX lights flash for - each working port.</para> - </step> - </procedure> - </sect4> - </sect3> - - <sect3 id="cy"> - <title>Configuring the <devicename>cy</devicename> - driver</title> - - <para><emphasis>Contributed by &a.alex;.<!-- <br> -->6 June - 1996.</emphasis></para> - - <para>The Cyclades multiport cards are based on the - <devicename>cy</devicename> driver instead of the usual - <devicename>sio</devicename> driver used by other multiport - cards. Configuration is a simple matter of:</para> - - <procedure> - <step> - <para>Add the <devicename>cy</devicename> device to - your <link linkend="kernelconfig-config">kernel - configuration</link> (note that your irq and - iomem settings may differ).</para> - - <programlisting> -device cy0 at isa? tty irq 10 iomem 0xd4000 iosiz 0x2000 vector cyintr</programlisting> - </step> - - <step> - <para><link linkend="kernelconfig-building">Rebuild - and install</link> the new kernel.</para> - </step> - - <step> - <para>Make the <link linkend="kernelconfig-nodes">device - nodes</link> by typing (the following example - assumes an 8-port board):</para> - - - <screen>&prompt.root; <userinput>cd /dev</userinput> -&prompt.root; <userinput>for i in 0 1 2 3 4 5 6 7;do ./MAKEDEV cuac$i ttyc$i;done</userinput></screen> - - </step> - - <step> - <para>If appropriate, add <link linkend="dialup">dialup</link> - entries to <link linkend="dialup-ttys">/etc/ttys</link> - by duplicating serial device (<literal>ttyd</literal>) entries and using <literal>ttyc</literal> in place of <literal>ttyd</literal>. For example:</para> - - <programlisting> -ttyc0 "/usr/libexec/getty std.38400" unknown on insecure -ttyc1 "/usr/libexec/getty std.38400" unknown on insecure -ttyc2 "/usr/libexec/getty std.38400" unknown on insecure -… -ttyc7 "/usr/libexec/getty std.38400" unknown on insecure</programlisting> - </step> - - <step> - <para>Reboot with the new kernel.</para> - </step> - </procedure> - </sect3> - </sect2> - - <sect2> - <title>* Parallel ports</title> - - <para></para> - </sect2> - - <sect2> - <title>* Modems</title> - - <para></para> - </sect2> - - <sect2> - <title>* Network cards</title> - - <para></para> - </sect2> - - <sect2> - <title>* Keyboards</title> - - <para></para> - </sect2> - - <sect2> - <title>* Mice</title> - - <para></para> - </sect2> - - <sect2> - <title>* Other</title> - - <para></para> - </sect2> - </sect1> - - <sect1 id="hw-storage"> - <title>Storage Devices</title> - - - <sect2 id="esdi"> - <title>Using ESDI hard disks</title> - - <para><emphasis>Copyright © 1995, &a.wilko;.<!-- <br> -->24 - September 1995.</emphasis></para> - - <para>ESDI is an acronym that means Enhanced Small Device Interface. - It is loosely based on the good old ST506/412 interface originally - devised by Seagate Technology, the makers of the first affordable - 5.25" winchester disk.</para> - - <para>The acronym says Enhanced, and rightly so. In the first place - the speed of the interface is higher, 10 or 15 Mbits/second - instead of the 5 Mbits/second of ST412 interfaced drives. Secondly - some higher level commands are added, making the ESDI interface - somewhat 'smarter' to the operating system driver writers. It is - by no means as smart as SCSI by the way. ESDI is standardized by - ANSI.</para> - - <para>Capacities of the drives are boosted by putting more sectors - on each track. Typical is 35 sectors per track, high capacity - drives I have seen were up to 54 sectors/track.</para> - - <para>Although ESDI has been largely obsoleted by IDE and SCSI - interfaces, the availability of free or cheap surplus drives makes - them ideal for low (or now) budget systems.</para> - - - <sect3> - <title>Concepts of ESDI</title> - - - <sect4> - <title>Physical connections</title> - - <para>The ESDI interface uses two cables connected to each - drive. One cable is a 34 pin flat cable edge connector that - carries the command and status signals from the controller to - the drive and vice-versa. The command cable is daisy chained - between all the drives. So, it forms a bus onto which all - drives are connected.</para> - - <para>The second cable is a 20 pin flat cable edge connector - that carries the data to and from the drive. This cable is - radially connected, so each drive has its own direct - connection to the controller.</para> - - <para>To the best of my knowledge PC ESDI controllers are - limited to using a maximum of 2 drives per controller. This is - compatibility feature(?) left over from the WD1003 standard - that reserves only a single bit for device addressing.</para> - - </sect4> - - <sect4> - <title>Device addressing</title> - - <para>On each command cable a maximum of 7 devices and 1 - controller can be present. To enable the controller to - uniquely identify which drive it addresses, each ESDI device - is equipped with jumpers or switches to select the devices - address.</para> - - <para>On PC type controllers the first drive is set to address - 0, the second disk to address 1. <emphasis>Always - make sure</emphasis> you set each disk to an unique address! - So, on a PC with its two drives/controller maximum the first - drive is drive 0, the second is drive 1.</para> - - </sect4> - - <sect4> - <title>Termination</title> - - <para>The daisy chained command cable (the 34 pin cable - remember?) needs to be terminated at the last drive on the - chain. For this purpose ESDI drives come with a termination - resistor network that can be removed or disabled by a jumper - when it is not used.</para> - - <para>So, one and <emphasis>only</emphasis> one drive, - the one at the farthest end of the command cable has its - terminator installed/enabled. The controller automatically - terminates the other end of the cable. Please note that this - implies that the controller must be at one end of the cable - and <emphasis>not</emphasis> in the middle.</para> - - </sect4> - </sect3> - - <sect3> - <title>Using ESDI disks with FreeBSD</title> - - <para>Why is ESDI such a pain to get working in the first - place?</para> - - <para>People who tried ESDI disks with FreeBSD are known to have - developed a profound sense of frustration. A combination of - factors works against you to produce effects that are hard to - understand when you have never seen them before.</para> - - <para>This has also led to the popular legend ESDI and FreeBSD is - a plain NO-GO. The following sections try to list all the - pitfalls and solutions.</para> - - - <sect4> - <title>ESDI speed variants</title> - - <para>As briefly mentioned before, ESDI comes in two speed - flavors. The older drives and controllers use a 10 - Mbits/second data transfer rate. Newer stuff uses 15 - Mbits/second.</para> - - <para>It is not hard to imagine that 15 Mbits/second drive cause - problems on controllers laid out for 10 Mbits/second. As - always, consult your controller <emphasis>and</emphasis> drive documentation to see if - things match.</para> - - </sect4> - - <sect4> - <title>Stay on track</title> - - <para>Mainstream ESDI drives use 34 to 36 sectors per track. - Most (older) controllers cannot handle more than this number - of sectors. Newer, higher capacity, drives use higher numbers - of sectors per track. For instance, I own a 670 Mb drive that - has 54 sectors per track.</para> - - <para>In my case, the controller could not handle this number of - sectors. It proved to work well except that it only used 35 - sectors on each track. This meant losing a lot of disk - space.</para> - - <para>Once again, check the documentation of your hardware for - more info. Going out-of-spec like in the example might or - might not work. Give it a try or get another more capable - controller.</para> - - </sect4> - - <sect4> - <title>Hard or soft sectoring</title> - - <para>Most ESDI drives allow hard or soft sectoring to be - selected using a jumper. Hard sectoring means that the drive - will produce a sector pulse on the start of each new sector. - The controller uses this pulse to tell when it should start to - write or read.</para> - - <para>Hard sectoring allows a selection of sector size (normally - 256, 512 or 1024 bytes per formatted sector). FreeBSD uses - 512 byte sectors. The number of sectors per track also varies - while still using the same number of bytes per formatted - sector. The number of <emphasis>unformatted</emphasis> bytes - per sector varies, dependent on your controller it needs more - or less overhead bytes to work correctly. Pushing more - sectors on a track of course gives you more usable space, but - might give problems if your controller needs more bytes than - the drive offers.</para> - - <para>In case of soft sectoring, the controller itself - determines where to start/stop reading or writing. For ESDI - hard sectoring is the default (at least on everything I came - across). I never felt the urge to try soft sectoring.</para> - - <para>In general, experiment with sector settings before you - install FreeBSD because you need to re-run the low-level - format after each change.</para> - - </sect4> - - <sect4> - <title>Low level formatting</title> - - <para>ESDI drives need to be low level formatted before they are - usable. A reformat is needed whenever you figgle with the - number of sectors/track jumpers or the physical orientation of - the drive (horizontal, vertical). So, first think, then - format. The format time must not be underestimated, for big - disks it can take hours.</para> - - <para>After a low level format, a surface scan is done to find - and flag bad sectors. Most disks have a manufacturer bad block - list listed on a piece of paper or adhesive sticker. In - addition, on most disks the list is also written onto the - disk. Please use the manufacturer's list. It is much easier to - remap a defect now than after FreeBSD is installed.</para> - - <para>Stay away from low-level formatters that mark all sectors - of a track as bad as soon as they find one bad sector. Not - only does this waste space, it also and more importantly - causes you grief with bad144 (see the section on - bad144).</para> - - </sect4> - - <sect4> - <title>Translations</title> - - <para>Translations, although not exclusively a ESDI-only - problem, might give you real trouble. Translations come in - multiple flavors. Most of them have in common that they - attempt to work around the limitations posed upon disk - geometries by the original IBM PC/AT design (thanks - IBM!).</para> - - <para>First of all there is the (in)famous 1024 cylinder limit. - For a system to be able to boot, the stuff (whatever - operating system) must be in the first 1024 cylinders of a - disk. Only 10 bits are available to encode the cylinder - number. For the number of sectors the limit is 64 (0-63). When - you combine the 1024 cylinder limit with the 16 head limit - (also a design feature) you max out at fairly limited disk - sizes.</para> - - <para>To work around this problem, the manufacturers of ESDI PC - controllers added a BIOS prom extension on their boards. This - BIOS extension handles disk I/O for booting (and for some - operating systems <emphasis>all</emphasis> disk I/O) - by using translation. For instance, a big drive might be - presented to the system as having 32 heads and 64 - sectors/track. The result is that the number of cylinders is - reduced to something below 1024 and is therefore usable by the - system without problems. It is noteworthy to know that FreeBSD - does not use the BIOS after its kernel has started. More on - this later.</para> - - <para>A second reason for translations is the fact that most - older system BIOSes could only handle drives with 17 sectors - per track (the old ST412 standard). Newer system BIOSes - usually have a user-defined drive type (in most cases this is - drive type 47).</para> - - <warning> - <para>Whatever you do to translations after reading - this document, keep in mind that if you have multiple - operating systems on the same disk, all must use the same - translation</para> - </warning> - - <para>While on the subject of translations, I have seen one - controller type (but there are probably more like this) offer - the option to logically split a drive in multiple partitions - as a BIOS option. I had select 1 drive == 1 partition because - this controller wrote this info onto the disk. On power-up it - read the info and presented itself to the system based on the - info from the disk.</para> - - </sect4> - - <sect4> - <title>Spare sectoring</title> - - <para>Most ESDI controllers offer the possibility to remap bad - sectors. During/after the low-level format of the disk bad - sectors are marked as such, and a replacement sector is put in - place (logically of course) of the bad one.</para> - - <para>In most cases the remapping is done by using N-1 sectors - on each track for actual data storage, and sector N itself is - the spare sector. N is the total number of sectors physically - available on the track. The idea behind this is that the - operating system sees a 'perfect' disk without bad sectors. In - the case of FreeBSD this concept is not usable.</para> - - <para>The problem is that the translation from <emphasis>bad</emphasis> to <emphasis>good</emphasis> is performed by the BIOS of the - ESDI controller. FreeBSD, being a true 32 bit operating - system, does not use the BIOS after it has been booted. - Instead, it has device drivers that talk directly to the - hardware.</para> - - <para><emphasis>So: don't use spare sectoring, bad block - remapping or whatever it may be called by the controller - manufacturer when you want to use the disk for - FreeBSD.</emphasis></para> - - </sect4> - - <sect4> - <title>Bad block handling</title> - - <para>The preceding section leaves us with a problem. The - controller's bad block handling is not usable and still - FreeBSD's filesystems assume perfect media without any flaws. - To solve this problem, FreeBSD use the <command>bad144</command> tool. Bad144 (named after a - Digital Equipment standard for bad block handling) scans a - FreeBSD slice for bad blocks. Having found these bad blocks, - it writes a table with the offending block numbers to the end - of the FreeBSD slice.</para> - - <para>When the disk is in operation, the disk accesses are - checked against the table read from the disk. Whenever a - block number is requested that is in the <command>bad144</command> list, a - replacement block (also from the end of the FreeBSD slice) is - used. In this way, the <command>bad144</command> replacement scheme presents - 'perfect' media to the FreeBSD filesystems.</para> - - <para>There are a number of potential pitfalls associated with - the use of <command>bad144</command>. First of all, the slice cannot have more - than 126 bad sectors. If your drive has a high number of bad - sectors, you might need to divide it into multiple FreeBSD - slices each containing less than 126 bad sectors. Stay away - from low-level format programs that mark - <emphasis>every</emphasis> sector of a track as bad when they - find a flaw on the track. As you can imagine, the 126 limit - is quickly reached when the low-level format is done this - way.</para> - - <para>Second, if the slice contains the root filesystem, the - slice should be within the 1024 cylinder BIOS limit. During - the boot process the bad144 list is read using the BIOS and - this only succeeds when the list is within the 1024 cylinder - limit.</para> - - <note> - <para>The restriction is not that only the root - <emphasis>filesystem</emphasis> must be within the 1024 - cylinder limit, but rather the entire - <emphasis>slice</emphasis> that contains the root - filesystem.</para> - </note> - </sect4> - - <sect4> - <title>Kernel configuration</title> - - <para>ESDI disks are handled by the same <literal>wd</literal>driver as IDE and ST412 MFM disks. The - <literal>wd</literal> driver should work for all - WD1003 compatible interfaces.</para> - - <para>Most hardware is jumperable for one of two different I/O - address ranges and IRQ lines. This allows you to have two wd - type controllers in one system.</para> - - <para>When your hardware allows non-standard strappings, you can - use these with FreeBSD as long as you enter the correct info - into the kernel config file. An example from the kernel config - file (they live in <filename>/sys/i386/conf</filename> - BTW).</para> - - <programlisting> -# First WD compatible controller -controller wdc0 at isa? port "IO_WD1" bio irq 14 vector wdintr -disk wd0 at wdc0 drive 0 -disk wd1 at wdc0 drive 1 -# Second WD compatible controller -controller wdc1 at isa? port "IO_WD2" bio irq 15 vector wdintr -disk wd2 at wdc1 drive 0 -disk wd3 at wdc1 drive 1</programlisting> - - </sect4> - </sect3> - - <sect3> - <title>Particulars on ESDI hardware</title> - - - <sect4> - <title>Adaptec 2320 controllers</title> - - <para>I successfully installed FreeBSD onto a ESDI disk - controlled by a ACB-2320. No other operating system was - present on the disk.</para> - - <para>To do so I low level formatted the disk using <command>NEFMT.EXE</command> - (<command>ftp</command>able from - <hostid role="fqdn">www.adaptec.com</hostid>) and answered NO to the - question whether the disk should be formatted with a spare - sector on each track. The BIOS on the ACD-2320 was disabled. I - used the <literal>free configurable</literal> option in the system BIOS to - allow the BIOS to boot it.</para> - - <para>Before using <command>NEFMT.EXE</command> I tried to format the disk using - the ACB-2320 BIOS builtin formatter. This proved to be a show - stopper, because it did not give me an option to disable spare - sectoring. With spare sectoring enabled the FreeBSD - installation process broke down on the <command>bad144</command> run.</para> - - <para>Please check carefully which ACB-232<replaceable>xy</replaceable> variant you have. - The <replaceable>x</replaceable> is either <literal>0</literal> or <literal>2</literal>, indicating a controller without or - with a floppy controller on board.</para> - - <para>The <literal>y</literal> is more interesting. It can either be a blank, a - <literal>A-8</literal> or a <literal>D</literal>. A blank indicates a plain 10 Mbits/second - controller. An <literal>A-8</literal> indicates a 15 Mbits/second controller - capable of handling 52 sectors/track. A <literal>D</literal> means a 15 - Mbits/second controller that can also handle drives with > - 36 sectors/track (also 52 ?).</para> - - <para>All variations should be capable of using 1:1 - interleaving. Use 1:1, FreeBSD is fast enough to handle - it.</para> - - </sect4> - - <sect4> - <title>Western Digital WD1007 controllers</title> - - <para>I successfully installed FreeBSD onto a ESDI disk - controlled by a WD1007 controller. To be precise, it was a - WD1007-WA2. Other variations of the WD1007 do exist.</para> - - <para>To get it to work, I had to disable the sector translation - and the WD1007's onboard BIOS. This implied I could not use - the low-level formatter built into this BIOS. Instead, I - grabbed <command>WDFMT.EXE</command> from <hostid role="fqdn">www.wdc.com</hostid> Running this formatted my - drive just fine.</para> - - </sect4> - - <sect4> - <title>Ultrastor U14F controllers</title> - - <para>According to multiple reports from the net, Ultrastor ESDI - boards work OK with FreeBSD. I lack any further info on - particular settings.</para> - - </sect4> - </sect3> - - <sect3 id="esdi-further-reading"> - <title>Further reading</title> - - <para>If you intend to do some serious ESDI hacking, you might - want to have the official standard at hand:</para> - - <para>The latest ANSI X3T10 committee document is: - - - - Enhanced Small Device Interface (ESDI) - [X3.170-1990/X3.170a-1991] [X3T10/792D Rev 11]</para> - - - <para>On Usenet the newsgroup <ulink - URL="news:comp.periphs">comp.periphs</ulink> is a noteworthy - place to look for more info.</para> - - <para>The World Wide Web (WWW) also proves to be a very handy info - source: For info on Adaptec ESDI controllers see <ulink - URL="http://www.adaptec.com/">http://www.adaptec.com/</ulink>. - For info on Western Digital controllers see <ulink - URL="http://www.wdc.com/">http://www.wdc.com/</ulink>.</para> - - </sect3> - - <sect3> - <title>Thanks to...</title> - - <para>Andrew Gordon for sending me an Adaptec 2320 controller and - ESDI disk for testing.</para> - - </sect3> - </sect2> - - <sect2 id="scsi"> - <title>What is SCSI?</title> - - <para><emphasis>Copyright © 1995, &a.wilko;.<!-- <br> -->July - 6, 1996.</emphasis></para> - - <para>SCSI is an acronym for Small Computer Systems Interface. It - is an ANSI standard that has become one of the leading I/O buses - in the computer industry. The foundation of the SCSI standard was - laid by Shugart Associates (the same guys that gave the world the - first mini floppy disks) when they introduced the SASI bus - (Shugart Associates Standard Interface).</para> - - <para>After some time an industry effort was started to come to a - more strict standard allowing devices from different vendors to - work together. This effort was recognized in the ANSI SCSI-1 - standard. The SCSI-1 standard (approx 1985) is rapidly becoming - obsolete. The current standard is SCSI-2 (see <link - linkend="scsi-further-reading">Further reading</link>), with SCSI-3 on the drawing - boards.</para> - - <para>In addition to a physical interconnection standard, SCSI - defines a logical (command set) standard to which disk devices - must adhere. This standard is called the Common Command Set (CCS) - and was developed more or less in parallel with ANSI SCSI-1. - SCSI-2 includes the (revised) CCS as part of the standard itself. - The commands are dependent on the type of device at hand. It does - not make much sense of course to define a Write command for a - scanner.</para> - - <para>The SCSI bus is a parallel bus, which comes in a number of - variants. The oldest and most used is an 8 bit wide bus, with - single-ended signals, carried on 50 wires. (If you do not know - what single-ended means, do not worry, that is what this document - is all about.) Modern designs also use 16 bit wide buses, with - differential signals. This allows transfer speeds of - 20Mbytes/second, on cables lengths of up to 25 meters. SCSI-2 - allows a maximum bus width of 32 bits, using an additional cable. - Quickly emerging are Ultra SCSI (also called Fast-20) and Ultra2 - (also called Fast-40). Fast-20 is 20 million transfers per second - (20 Mbytes/sec on a 8 bit bus), Fast-40 is 40 million transfers - per second (40 Mbytes/sec on a 8 bit bus). Most hard drives sold - today are single-ended Ultra SCSI (8 or 16 bits).</para> - - <para>Of course the SCSI bus not only has data lines, but also a - number of control signals. A very elaborate protocol is part of - the standard to allow multiple devices to share the bus in an - efficient manner. In SCSI-2, the data is always checked using a - separate parity line. In pre-SCSI-2 designs parity was - optional.</para> - - <para>In SCSI-3 even faster bus types are introduced, along with a - serial SCSI busses that reduces the cabling overhead and allows a - higher maximum bus length. You might see names like SSA and - Fiberchannel in this context. None of the serial buses are - currently in widespread use (especially not in the typical FreeBSD - environment). For this reason the serial bus types are not - discussed any further.</para> - - <para>As you could have guessed from the description above, SCSI - devices are intelligent. They have to be to adhere to the SCSI - standard (which is over 2 inches thick BTW). So, for a hard disk - drive for instance you do not specify a head/cylinder/sector to - address a particular block, but simply the number of the block you - want. Elaborate caching schemes, automatic bad block replacement - etc are all made possible by this 'intelligent device' - approach.</para> - - <para>On a SCSI bus, each possible pair of devices can communicate. - Whether their function allows this is another matter, but the - standard does not restrict it. To avoid signal contention, the 2 - devices have to arbitrate for the bus before using it.</para> - - <para>The philosophy of SCSI is to have a standard that allows - older-standard devices to work with newer-standard ones. So, an - old SCSI-1 device should normally work on a SCSI-2 bus. I say - Normally, because it is not absolutely sure that the - implementation of an old device follows the (old) standard closely - enough to be acceptable on a new bus. Modern devices are usually - more well-behaved, because the standardization has become more - strict and is better adhered to by the device manufacturers.</para> - - <para>Generally speaking, the chances of getting a working set of - devices on a single bus is better when all the devices are SCSI-2 - or newer. This implies that you do not have to dump all your old - stuff when you get that shiny 2GB disk: I own a system on which a - pre-SCSI-1 disk, a SCSI-2 QIC tape unit, a SCSI-1 helical scan - tape unit and 2 SCSI-1 disks work together quite happily. From a - performance standpoint you might want to separate your older and - newer (=faster) devices however.</para> - - - <sect3> - <title>Components of SCSI</title> - - <para>As said before, SCSI devices are smart. The idea is to put - the knowledge about intimate hardware details onto the SCSI - device itself. In this way, the host system does not have to - worry about things like how many heads are hard disks has, or - how many tracks there are on a specific tape device. If you are - curious, the standard specifies commands with which you can - query your devices on their hardware particulars. FreeBSD uses - this capability during boot to check out what devices are - connected and whether they need any special treatment.</para> - - <para>The advantage of intelligent devices is obvious: the device - drivers on the host can be made in a much more generic fashion, - there is no longer a need to change (and qualify!) drivers for - every odd new device that is introduced.</para> - - <para>For cabling and connectors there is a golden rule: get good - stuff. With bus speeds going up all the time you will save - yourself a lot of grief by using good material.</para> - - <para>So, gold plated connectors, shielded cabling, sturdy - connector hoods with strain reliefs etc are the way to go. - Second golden rule: do no use cables longer than necessary. I - once spent 3 days hunting down a problem with a flaky machine - only to discover that shortening the SCSI bus by 1 meter solved - the problem. And the original bus length was well within the - SCSI specification.</para> - - </sect3> - - <sect3> - <title>SCSI bus types</title> - - <para>From an electrical point of view, there are two incompatible - bus types: single-ended and differential. This means that there - are two different main groups of SCSI devices and controllers, - which cannot be mixed on the same bus. It is possible however - to use special converter hardware to transform a single-ended - bus into a differential one (and vice versa). The differences - between the bus types are explained in the next sections.</para> - - <para>In lots of SCSI related documentation there is a sort of - jargon in use to abbreviate the different bus types. A small - list:</para> - - - <itemizedlist> - - <listitem> - <para>FWD: Fast Wide Differential</para> - </listitem> - - <listitem> - <para>FND: Fast Narrow Differential</para> - </listitem> - - <listitem> - <para>SE: Single Ended</para> - </listitem> - - <listitem> - <para>FN: Fast Narrow</para> - </listitem> - - <listitem> - <para>etc.</para> - </listitem> - - </itemizedlist> - - - <para>With a minor amount of imagination one can usually imagine - what is meant.</para> - - <para>Wide is a bit ambiguous, it can indicate 16 or 32 bit buses. - As far as I know, the 32 bit variant is not (yet) in use, so - wide normally means 16 bit.</para> - - <para>Fast means that the timing on the bus is somewhat different, - so that on a narrow (8 bit) bus 10 Mbytes/sec are possible - instead of 5 Mbytes/sec for 'slow' SCSI. As discussed before, - bus speeds of 20 and 40 million transfers/second are also - emerging (Fast-20 == Ultra SCSI and Fast-40 == Ultra2 SCSI).</para> - - <note> - <para>The data lines > 8 are only used for data transfers and - device addressing. The transfers of commands and status - messages etc are only performed on the lowest 8 data lines. - The standard allows narrow devices to operate on a wide bus. - The usable bus width is negotiated between the devices. You - have to watch your device addressing closely when mixing wide - and narrow.</para> - </note> - - <sect4> - <title>Single ended buses</title> - - <para>A single-ended SCSI bus uses signals that are either 5 - Volts or 0 Volts (indeed, TTL levels) and are relative to a - COMMON ground reference. A singled ended 8 bit SCSI bus has - approximately 25 ground lines, who are all tied to a single - `rail' on all devices. A standard single ended bus has a - maximum length of 6 meters. If the same bus is used with - fast-SCSI devices, the maximum length allowed drops to 3 - meters. Fast-SCSI means that instead of 5Mbytes/sec the bus - allows 10Mbytes/sec transfers.</para> - - <para>Fast-20 (Ultra SCSI) and Fast-40 allow for 20 and 40 - million transfers/second respectively. So, F20 is 20 - Mbytes/second on a 8 bit bus, 40 Mbytes/second on a 16 bit bus - etc. For F20 the max bus length is 1.5 meters, for F40 it - becomes 0.75 meters. Be aware that F20 is pushing the limits - quite a bit, so you will quickly find out if your SCSI bus is - electrically sound.</para> - - <note> - <para>If some devices on your bus use 'fast' to communicate - your bus must adhere to the length restrictions for fast - buses!</para> - </note> - - <para>It is obvious that with the newer fast-SCSI devices the - bus length can become a real bottleneck. This is why the - differential SCSI bus was introduced in the SCSI-2 - standard.</para> - - <para>For connector pinning and connector types please refer to - the SCSI-2 standard (see <link - linkend="scsi-further-reading">Further reading</link>) itself, connectors etc - are listed there in painstaking detail.</para> - - <para>Beware of devices using non-standard cabling. For instance - Apple uses a 25pin D-type connecter (like the one on serial - ports and parallel printers). Considering that the official - SCSI bus needs 50 pins you can imagine the use of this - connector needs some 'creative cabling'. The reduction of the - number of ground wires they used is a bad idea, you better - stick to 50 pins cabling in accordance with the SCSI - standard. For Fast-20 and 40 do not even think about buses - like this.</para> - - </sect4> - - <sect4> - <title>Differential buses</title> - - <para>A differential SCSI bus has a maximum length of 25 meters. - Quite a difference from the 3 meters for a single-ended - fast-SCSI bus. The idea behind differential signals is that - each bus signal has its own return wire. So, each signal is - carried on a (preferably twisted) pair of wires. The voltage - difference between these two wires determines whether the - signal is asserted or de-asserted. To a certain extent the - voltage difference between ground and the signal wire pair is - not relevant (do not try 10 kVolts though).</para> - - <para>It is beyond the scope of this document to explain why - this differential idea is so much better. Just accept that - electrically seen the use of differential signals gives a much - better noise margin. You will normally find differential buses - in use for inter-cabinet connections. Because of the lower - cost single ended is mostly used for shorter buses like inside - cabinets.</para> - - <para>There is nothing that stops you from using differential - stuff with FreeBSD, as long as you use a controller that has - device driver support in FreeBSD. As an example, Adaptec - marketed the AHA1740 as a single ended board, whereas the - AHA1744 was differential. The software interface to the host - is identical for both.</para> - - </sect4> - - <sect4> - <title>Terminators</title> - - <para>Terminators in SCSI terminology are resistor networks that - are used to get a correct impedance matching. Impedance - matching is important to get clean signals on the bus, without - reflections or ringing. If you once made a long distance - telephone call on a bad line you probably know what - reflections are. With 20Mbytes/sec traveling over your SCSI - bus, you do not want signals echoing back.</para> - - <para>Terminators come in various incarnations, with more or - less sophisticated designs. Of course, there are internal and - external variants. Many SCSI devices come with a number of - sockets in which a number of resistor networks can (must be!) - installed. If you remove terminators from a device, carefully - store them. You will need them when you ever decide to - reconfigure your SCSI bus. There is enough variation in even - these simple tiny things to make finding the exact replacement - a frustrating business. There are also SCSI devices that have - a single jumper to enable or disable a built-in terminator. - There are special terminators you can stick onto a flat cable - bus. Others look like external connectors, or a connector - hood without a cable. So, lots of choice as you can - see.</para> - - <para>There is much debate going on if and when you should - switch from simple resistor (passive) terminators to active - terminators. Active terminators contain slightly more - elaborate circuit to give cleaner bus signals. The general - consensus seems to be that the usefulness of active - termination increases when you have long buses and/or fast - devices. If you ever have problems with your SCSI buses you - might consider trying an active terminator. Try to borrow one - first, they reputedly are quite expensive.</para> - - <para>Please keep in mind that terminators for differential and - single-ended buses are not identical. You should <emphasis>not mix</emphasis> the two variants.</para> - - <para>OK, and now where should you install your terminators? - This is by far the most misunderstood part of SCSI. And it is - by far the simplest. The rule is: <emphasis>every - single line on the SCSI bus has 2 (two) terminators, one at - each end of the bus.</emphasis> So, two and not one or three - or whatever. Do yourself a favor and stick to this rule. It - will save you endless grief, because wrong termination has the - potential to introduce highly mysterious bugs. (Note the - “potential” here; the nastiest part is that it may or may not - work.)</para> - - <para>A common pitfall is to have an internal (flat) cable in a - machine and also an external cable attached to the controller. - It seems almost everybody forgets to remove the terminators - from the controller. The terminator must now be on the last - external device, and not on the controller! In general, every - reconfiguration of a SCSI bus must pay attention to - this.</para> - - <note> - <para>Termination is to be done on a per-line basis. This - means if you have both narrow and wide buses connected to - the same host adapter, you need to enable termination on the - higher 8 bits of the bus on the adapter (as well as the last - devices on each bus, of course).</para> - </note> - - <para>What I did myself is remove all terminators from my SCSI - devices and controllers. I own a couple of external - terminators, for both the Centronics-type external cabling and - for the internal flat cable connectors. This makes - reconfiguration much easier.</para> - - <para>On modern devices, sometimes integrated terminators are - used. These things are special purpose integrated circuits - that can be dis/en-abled with a control pin. It is not - necessary to physically remove them from a device. You may - find them on newer host adapters, sometimes they are software - configurable, using some sort of setup tool. Some will even - auto-detect the cables attached to the connectors and - automatically set up the termination as necessary. At any - rate, consult your documentation!</para> - - </sect4> - - <sect4> - <title>Terminator power</title> - - <para>The terminators discussed in the previous chapter need - power to operate properly. On the SCSI bus, a line is - dedicated to this purpose. So, simple huh?</para> - - <para>Not so. Each device can provide its own terminator power - to the terminator sockets it has on-device. But if you have - external terminators, or when the device supplying the - terminator power to the SCSI bus line is switched off you are - in trouble.</para> - - <para>The idea is that initiators (these are devices that - initiate actions on the bus, a discussion follows) must supply - terminator power. All SCSI devices are allowed (but not - required) to supply terminator power.</para> - - <para>To allow for un-powered devices on a bus, the terminator - power must be supplied to the bus via a diode. This prevents - the backflow of current to un-powered devices.</para> - - <para>To prevent all kinds of nastiness, the terminator power is - usually fused. As you can imagine, fuses might blow. This - can, but does not have to, lead to a non functional bus. If - multiple devices supply terminator power, a single blown fuse - will not put you out of business. A single supplier with a - blown fuse certainly will. Clever external terminators - sometimes have a LED indication that shows whether terminator - power is present.</para> - - <para>In newer designs auto-restoring fuses that 'reset' - themselves after some time are sometimes used.</para> - - </sect4> - - <sect4> - <title>Device addressing</title> - - <para>Because the SCSI bus is, ehh, a bus there must be a way to - distinguish or address the different devices connected to - it.</para> - - <para>This is done by means of the SCSI or target ID. Each - device has a unique target ID. You can select the ID to which - a device must respond using a set of jumpers, or a dip switch, - or something similar. Some SCSI host adapters let you change - the target ID from the boot menu. (Yet some others will not - let you change the ID from 7.) Consult the documentation of - your device for more information.</para> - - <para>Beware of multiple devices configured to use the same ID. - Chaos normally reigns in this case. A pitfall is that one of - the devices sharing the same ID sometimes even manages to - answer to I/O requests!</para> - - <para>For an 8 bit bus, a maximum of 8 targets is possible. The - maximum is 8 because the selection is done bitwise using the 8 - data lines on the bus. For wide buses this increases to the - number of data lines (usually 16).</para> - - <note> - <para>A narrow SCSI device can not communicate with a SCSI - device with a target ID larger than 7. This means it is - generally not a good idea to move your SCSI host adapter's - target ID to something higher than 7 (or your CD-ROM will - stop working).</para> - </note> - - <para>The higher the SCSI target ID, the higher the priority the - devices has. When it comes to arbitration between devices - that want to use the bus at the same time, the device that has - the highest SCSI ID will win. This also means that the SCSI - host adapter usually uses target ID 7. Note however that the - lower 8 IDs have higher priorities than the higher 8 IDs on a - wide-SCSI bus. Thus, the order of target IDs is: [7 6 .. 1 0 15 14 .. 9 8] on a wide-SCSI - system. (If you you are wondering why the lower 8 have higher - priority, read the previous paragraph for a hint.)</para> - - <para>For a further subdivision, the standard allows for Logical - Units or LUNs for short. A single target ID may have multiple - LUNs. For example, a tape device including a tape changer may - have LUN 0 for the tape device itself, and LUN 1 for the tape - changer. In this way, the host system can address each of the - functional units of the tape changer as desired.</para> - - </sect4> - - <sect4> - <title>Bus layout</title> - - <para>SCSI buses are linear. So, not shaped like Y-junctions, - star topologies, rings, cobwebs or whatever else people might - want to invent. One of the most common mistakes is for people - with wide-SCSI host adapters to connect devices on all three - connecters (external connector, internal wide connector, - internal narrow connector). Don't do that. It may appear to - work if you are really lucky, but I can almost guarantee that - your system will stop functioning at the most unfortunate - moment (this is also known as “Murphy's law”).</para> - - <para>You might notice that the terminator issue discussed - earlier becomes rather hairy if your bus is not linear. Also, - if you have more connectors than devices on your internal SCSI - cable, make sure you attach devices on connectors on both ends - instead of using the connectors in the middle and let one or - both ends dangle. This will screw up the termination of the - bus.</para> - - <para>The electrical characteristics, its noise margins and - ultimately the reliability of it all are tightly related to - linear bus rule.</para> - - <para><emphasis>Stick to the linear bus - rule!</emphasis></para> - - </sect4> - </sect3> - - <sect3> - <title>Using SCSI with FreeBSD</title> - - - <sect4> - <title>About translations, BIOSes and magic...</title> - - <para>As stated before, you should first make sure that you have - a electrically sound bus.</para> - - <para>When you want to use a SCSI disk on your PC as boot disk, - you must aware of some quirks related to PC BIOSes. The PC - BIOS in its first incarnation used a low level physical - interface to the hard disk. So, you had to tell the BIOS - (using a setup tool or a BIOS built-in setup) how your disk - physically looked like. This involved stating number of heads, - number of cylinders, number of sectors per track, obscure - things like precompensation and reduced write current cylinder - etc.</para> - - <para>One might be inclined to think that since SCSI disks are - smart you can forget about this. Alas, the arcane setup issue - is still present today. The system BIOS needs to know how to - access your SCSI disk with the head/cyl/sector method in order - to load the FreeBSD kernel during boot.</para> - - <para>The SCSI host adapter or SCSI controller you have put in - your AT/EISA/PCI/whatever bus to connect your disk therefore - has its own on-board BIOS. During system startup, the SCSI - BIOS takes over the hard disk interface routines from the - system BIOS. To fool the system BIOS, the system setup is - normally set to No hard disk present. Obvious, isn't - it?</para> - - <para>The SCSI BIOS itself presents to the system a so called - <emphasis>translated</emphasis> drive. This means - that a fake drive table is constructed that allows the PC to - boot the drive. This translation is often (but not always) - done using a pseudo drive with 64 heads and 32 sectors per - track. By varying the number of cylinders, the SCSI BIOS - adapts to the actual drive size. It is useful to note that 32 - * 64 / 2 = the size of your drive in megabytes. The division - by 2 is to get from disk blocks that are normally 512 bytes in - size to Kbytes.</para> - - <para>Right. All is well now?! No, it is not. The system BIOS - has another quirk you might run into. The number of cylinders - of a bootable hard disk cannot be greater than 1024. Using the - translation above, this is a show-stopper for disks greater - than 1 GB. With disk capacities going up all the time this is - causing problems.</para> - - <para>Fortunately, the solution is simple: just use another - translation, e.g. with 128 heads instead of 32. In most cases - new SCSI BIOS versions are available to upgrade older SCSI - host adapters. Some newer adapters have an option, in the form - of a jumper or software setup selection, to switch the - translation the SCSI BIOS uses.</para> - - <para>It is very important that <emphasis>all</emphasis> operating systems on the disk use - the <emphasis>same translation</emphasis> to get the - right idea about where to find the relevant partitions. So, - when installing FreeBSD you must answer any questions about - heads/cylinders etc using the translated values your host - adapter uses.</para> - - <para>Failing to observe the translation issue might lead to - un-bootable systems or operating systems overwriting each - others partitions. Using fdisk you should be able to see all - partitions.</para> - - <para>You might have heard some talk of “lying” devices? Older - FreeBSD kernels used to report the geometry of SCSI disks when - booting. An example from one of my systems:</para> - - - <screen>aha0 targ 0 lun 0: <MICROP 1588-15MB1057404HSP4> -sd0: 636MB (1303250 total sec), 1632 cyl, 15 head, 53 sec, bytes/sec 512</screen> - - - <para>Newer kernels usually do not report this information. e.g.</para> - - - <screen>(bt0:0:0): "SEAGATE ST41651 7574" type 0 fixed SCSI 2 -sd0(bt0:0:0): Direct-Access 1350MB (2766300 512 byte sectors)</screen> - - - <para>Why has this changed?</para> - - <para>This info is retrieved from the SCSI disk itself. Newer - disks often use a technique called zone bit recording. The - idea is that on the outer cylinders of the drive there is more - space so more sectors per track can be put on them. This - results in disks that have more tracks on outer cylinders than - on the inner cylinders and, last but not least, have more - capacity. You can imagine that the value reported by the drive - when inquiring about the geometry now becomes suspect at best, - and nearly always misleading. When asked for a geometry , it - is nearly always better to supply the geometry used by the - BIOS, or <emphasis>if the BIOS is never going to know about - this disk</emphasis>, (e.g. it is not a booting disk) to - supply a fictitious geometry that is convenient.</para> - - </sect4> - - <sect4> - <title>SCSI subsystem design</title> - - <para>FreeBSD uses a layered SCSI subsystem. For each different - controller card a device driver is written. This driver knows - all the intimate details about the hardware it controls. The - driver has a interface to the upper layers of the SCSI - subsystem through which it receives its commands and reports - back any status.</para> - - <para>On top of the card drivers there are a number of more - generic drivers for a class of devices. More specific: a - driver for tape devices (abbreviation: st), magnetic disks - (sd), CD-ROMs (cd) etc. In case you are wondering where you - can find this stuff, it all lives in - <filename>/sys/scsi</filename>. See the man pages in section 4 - for more details.</para> - - <para>The multi level design allows a decoupling of low-level - bit banging and more high level stuff. Adding support for - another piece of hardware is a much more manageable - problem.</para> - - </sect4> - - <sect4> - <title>Kernel configuration</title> - - <para>Dependent on your hardware, the kernel configuration file - must contain one or more lines describing your host - adapter(s). This includes I/O addresses, interrupts etc. - Consult the man page for your adapter driver to get more info. - Apart from that, check out - <filename>/sys/i386/conf/LINT</filename> for an overview of a - kernel config file. <filename>LINT</filename> contains every - possible option you can dream of. It does - <emphasis>not</emphasis> imply <filename>LINT</filename> will - actually get you to a working kernel at all.</para> - - <para>Although it is probably stating the obvious: the kernel - config file should reflect your actual hardware setup. So, - interrupts, I/O addresses etc must match the kernel config - file. During system boot messages will be displayed to - indicate whether the configured hardware was actually - found.</para> - - <note> - <para>Note that most of the EISA/PCI drivers (namely - <devicename>ahb</devicename>, <devicename>ahc</devicename>, - <devicename>ncr</devicename> and - <devicename>amd</devicename> will automatically obtain the - correct parameters from the host adapters themselves at boot - time; thus, you just need to write, for instance, - <literal>controller ahc0</literal>.</para> - </note> - - <para>An example loosely based on the FreeBSD 2.2.5-Release - kernel config file <filename>LINT</filename> with some added comments (between - []):</para> - - <programlisting> -# SCSI host adapters: `aha', `ahb', `aic', `bt', `nca' -# -# aha: Adaptec 154x -# ahb: Adaptec 174x -# ahc: Adaptec 274x/284x/294x -# aic: Adaptec 152x and sound cards using the Adaptec AIC-6360 (slow!) -# amd: AMD 53c974 based SCSI cards (e.g., Tekram DC-390 and 390T) -# bt: Most Buslogic controllers -# nca: ProAudioSpectrum cards using the NCR 5380 or Trantor T130 -# ncr: NCR/Symbios 53c810/815/825/875 etc based SCSI cards -# uha: UltraStore 14F and 34F -# sea: Seagate ST01/02 8 bit controller (slow!) -# wds: Western Digital WD7000 controller (no scatter/gather!). -# - -[For an Adaptec AHA274x/284x/294x/394x etc controller] -controller ahc0 - -[For an NCR/Symbios 53c875 based controller] -controller ncr0 - -[For an Ultrastor adapter] -controller uha0 at isa? port "IO_UHA0" bio irq ? drq 5 vector uhaintr - -# Map SCSI buses to specific SCSI adapters -controller scbus0 at ahc0 -controller scbus2 at ncr0 -controller scbus1 at uha0 - -# The actual SCSI devices -disk sd0 at scbus0 target 0 unit 0 [SCSI disk 0 is at scbus 0, LUN 0] -disk sd1 at scbus0 target 1 [implicit LUN 0 if omitted] -disk sd2 at scbus1 target 3 [SCSI disk on the uha0] -disk sd3 at scbus2 target 4 [SCSI disk on the ncr0] -tape st1 at scbus0 target 6 [SCSI tape at target 6] -device cd0 at scbus? [the first ever CD-ROM found, no wiring]</programlisting> - - <para>The example above tells the kernel to look for a ahc - (Adaptec 274x) controller, then for an NCR/Symbios board, and - so on. The lines following the controller specifications tell - the kernel to configure specific devices but - <emphasis>only</emphasis> attach them when they match the - target ID and LUN specified on the corresponding bus.</para> - - <para>Wired down devices get “first shot” at the unit numbers so - the first non “wired down” device, is allocated the unit - number one greater than the highest “wired down” unit number - for that kind of device. So, if you had a SCSI tape at target - ID 2 it would be configured as st2, as the tape at target ID 6 - is wired down to unit number 1.</para> - - <note> - <para>Wired down devices need not be found to get their unit - number. The unit number for a wired down device is reserved - for that device, even if it is turned off at boot time. This - allows the device to be turned on and brought on-line at a - later time, without rebooting. Notice that a device's unit - number has <emphasis>no</emphasis> relationship with its - target ID on the SCSI bus.</para> - </note> - - <para>Below is another example of a kernel config file as used - by FreeBSD version < 2.0.5. The difference with the first - example is that devices are not “wired down”. “Wired down” - means that you specify which SCSI target belongs to which - device.</para> - - <para>A kernel built to the config file below will attach the - first SCSI disk it finds to sd0, the second disk to sd1 etc. - If you ever removed or added a disk, all other devices of the - same type (disk in this case) would 'move around'. This - implies you have to change <filename>/etc/fstab</filename> - each time.</para> - - <para>Although the old style still works, you are - <emphasis>strongly</emphasis> recommended to use this new - feature. It will save you a lot of grief whenever you shift - your hardware around on the SCSI buses. So, when you re-use - your old trusty config file after upgrading from a - pre-FreeBSD2.0.5.R system check this out.</para> - - <programlisting> -[driver for Adaptec 174x] -controller ahb0 at isa? bio irq 11 vector ahbintr - -[for Adaptec 154x] -controller aha0 at isa? port "IO_AHA0" bio irq 11 drq 5 vector ahaintr - -[for Seagate ST01/02] -controller sea0 at isa? bio irq 5 iomem 0xc8000 iosiz 0x2000 vector seaintr - -controller scbus0 - -device sd0 [support for 4 SCSI harddisks, sd0 up sd3] -device st0 [support for 2 SCSI tapes] - -[for the CD-ROM] -device cd0 #Only need one of these, the code dynamically grows</programlisting> - - <para>Both examples support SCSI disks. If during boot more - devices of a specific type (e.g. sd disks) are found than are - configured in the booting kernel, the system will simply - allocate more devices, incrementing the unit number starting - at the last number “wired down”. If there are no “wired down” - devices then counting starts at unit 0.</para> - - <para>Use <command>man 4 scsi</command> to check for - the latest info on the SCSI subsystem. For more detailed info - on host adapter drivers use eg <command>man 4 - ahc</command> for info on the Adaptec 294x driver.</para> - - </sect4> - - <sect4> - <title>Tuning your SCSI kernel setup</title> - - <para>Experience has shown that some devices are slow to respond - to INQUIRY commands after a SCSI bus reset (which happens at - boot time). An INQUIRY command is sent by the kernel on boot - to see what kind of device (disk, tape, CD-ROM etc) is - connected to a specific target ID. This process is called - device probing by the way.</para> - - <para>To work around the 'slow response' problem, FreeBSD allows - a tunable delay time before the SCSI devices are probed - following a SCSI bus reset. You can set this delay time in - your kernel configuration file using a line like:</para> - - <programlisting> -options SCSI_DELAY=15 #Be pessimistic about Joe SCSI device</programlisting> - - <para>This line sets the delay time to 15 seconds. On my own - system I had to use 3 seconds minimum to get my trusty old - CD-ROM drive to be recognized. Start with a high value (say 30 - seconds or so) when you have problems with device - recognition. If this helps, tune it back until it just stays - working.</para> - - </sect4> - - <sect4 id="scsi-rogue-devices"> - <title>Rogue SCSI devices</title> - - <para>Although the SCSI standard tries to be complete and - concise, it is a complex standard and implementing things - correctly is no easy task. Some vendors do a better job then - others.</para> - - <para>This is exactly where the “rogue” devices come into view. - Rogues are devices that are recognized by the FreeBSD kernel - as behaving slightly (...) non-standard. Rogue devices are - reported by the kernel when booting. An example for two of my - cartridge tape units:</para> - - - <screen>Feb 25 21:03:34 yedi /kernel: ahb0 targ 5 lun 0: <TANDBERG TDC 3600 -06:> -Feb 25 21:03:34 yedi /kernel: st0: Tandberg tdc3600 is a known rogue - -Mar 29 21:16:37 yedi /kernel: aha0 targ 5 lun 0: <ARCHIVE VIPER 150 21247-005> -Mar 29 21:16:37 yedi /kernel: st1: Archive Viper 150 is a known rogue </screen> - - - <para>For instance, there are devices that respond to all LUNs - on a certain target ID, even if they are actually only one - device. It is easy to see that the kernel might be fooled into - believing that there are 8 LUNs at that particular target ID. - The confusion this causes is left as an exercise to the - reader.</para> - - <para>The SCSI subsystem of FreeBSD recognizes devices with bad - habits by looking at the INQUIRY response they send when - probed. Because the INQUIRY response also includes the version - number of the device firmware, it is even possible that for - different firmware versions different workarounds are used. - See e.g. <filename>/sys/scsi/st.c</filename> and - <filename>/sys/scsi/scsiconf.c</filename> for more info on how - this is done.</para> - - <para>This scheme works fine, but keep in mind that it of course - only works for devices that are known to be weird. If you are - the first to connect your bogus Mumbletech SCSI CD-ROM you - might be the one that has to define which workaround is - needed.</para> - - <para>After you got your Mumbletech working, please send the - required workaround to the FreeBSD development team for - inclusion in the next release of FreeBSD. Other Mumbletech - owners will be grateful to you.</para> - - </sect4> - - <sect4> - <title>Multiple LUN devices</title> - - <para>In some cases you come across devices that use multiple - logical units (LUNs) on a single SCSI ID. In most cases - FreeBSD only probes devices for LUN 0. An example are so - called bridge boards that connect 2 non-SCSI harddisks to a - SCSI bus (e.g. an Emulex MD21 found in old Sun - systems).</para> - - <para>This means that any devices with LUNs != 0 are not - normally found during device probe on system boot. To work - around this problem you must add an appropriate entry in - /sys/scsi/scsiconf.c and rebuild your kernel.</para> - - <para>Look for a struct that is initialized like below:</para> - - <programlisting> -{ - T_DIRECT, T_FIXED, "MAXTOR", "XT-4170S", "B5A", - "mx1", SC_ONE_LU -}</programlisting> - - <para>For you Mumbletech BRIDGE2000 that has more than one LUN, - acts as a SCSI disk and has firmware revision 123 you would - add something like:</para> - - <programlisting> -{ - T_DIRECT, T_FIXED, "MUMBLETECH", "BRIDGE2000", "123", - "sd", SC_MORE_LUS -}</programlisting> - - <para>The kernel on boot scans the inquiry data it receives - against the table and acts accordingly. See the source for - more info.</para> - - </sect4> - - <sect4> - <title>Tagged command queueing</title> - - <para>Modern SCSI devices, particularly magnetic disks, - support what is called tagged command queuing (TCQ).</para> - - <para>In a nutshell, TCQ allows the device to have multiple I/O - requests outstanding at the same time. Because the device is - intelligent, it can optimise its operations (like head - positioning) based on its own request queue. On SCSI devices - like RAID (Redundant Array of Independent Disks) arrays the - TCQ function is indispensable to take advantage of the - device's inherent parallelism.</para> - - <para>Each I/O request is uniquely identified by a “tag” (hence - the name tagged command queuing) and this tag is used by - FreeBSD to see which I/O in the device drivers queue is - reported as complete by the device.</para> - - <para>It should be noted however that TCQ requires device driver - support and that some devices implemented it “not quite right” - in their firmware. This problem bit me once, and it leads to - highly mysterious problems. In such cases, try to disable - TCQ.</para> - - </sect4> - - <sect4> - <title>Busmaster host adapters</title> - - <para>Most, but not all, SCSI host adapters are bus mastering - controllers. This means that they can do I/O on their own - without putting load onto the host CPU for data - movement.</para> - - <para>This is of course an advantage for a multitasking - operating system like FreeBSD. It must be noted however that - there might be some rough edges.</para> - - <para>For instance an Adaptec 1542 controller can be set to use - different transfer speeds on the host bus (ISA or AT in this - case). The controller is settable to different rates because - not all motherboards can handle the higher speeds. Problems - like hangups, bad data etc might be the result of using a - higher data transfer rate then your motherboard can - stomach.</para> - - <para>The solution is of course obvious: switch to a lower data - transfer rate and try if that works better.</para> - - <para>In the case of a Adaptec 1542, there is an option that can - be put into the kernel config file to allow dynamic - determination of the right, read: fastest feasible, transfer - rate. This option is disabled by default:</para> - - <programlisting> -options "TUNE_1542" #dynamic tune of bus DMA speed</programlisting> - - <para>Check the man pages for the host adapter that you use. Or - better still, use the ultimate documentation (read: driver - source).</para> - - </sect4> - </sect3> - - <sect3> - <title>Tracking down problems</title> - - <para>The following list is an attempt to give a guideline for the - most common SCSI problems and their solutions. It is by no means - complete.</para> - - - <itemizedlist> - - <listitem> - <para>Check for loose connectors and cables.</para> - </listitem> - - <listitem> - <para>Check and double check the location and number of your - terminators.</para> - </listitem> - - <listitem> - <para>Check if your bus has at least one supplier of - terminator power (especially with external - terminators.</para> - </listitem> - - <listitem> - <para>Check if no double target IDs are used.</para> - </listitem> - - <listitem> - <para>Check if all devices to be used are powered up.</para> - </listitem> - - <listitem> - <para>Make a minimal bus config with as little devices as - possible.</para> - </listitem> - - <listitem> - <para>If possible, configure your host adapter to use slow - bus speeds.</para> - </listitem> - - <listitem> - <para>Disable tagged command queuing to make things as - simple as possible (for a NCR hostadapter based system see - man ncrcontrol)</para> - </listitem> - - <listitem> - <para>If you can compile a kernel, make one with the - <literal>SCSIDEBUG</literal> option, and try accessing the device with - debugging turned on for that device. If your device does - not even probe at startup, you may have to define the - address of the device that is failing, and the desired - debug level in <filename>/sys/scsi/scsidebug.h</filename>. - If it probes but just does not work, you can use the - <citerefentry><refentrytitle>scsi</refentrytitle><manvolnum>8</manvolnum></citerefentry> command to dynamically set a - debug level to it in a running kernel (if <literal>SCSIDEBUG</literal> is - defined). This will give you <emphasis>copious</emphasis> debugging output with - which to confuse the gurus. see <command>man 4 - scsi</command> for more exact information. Also look at - <command>man 8 scsi</command>.</para> - </listitem> - - </itemizedlist> - - - </sect3> - - <sect3 id="scsi-further-reading"> - <title>Further reading</title> - - <para>If you intend to do some serious SCSI hacking, you might - want to have the official standard at hand:</para> - - <para>Approved American National Standards can be purchased from - ANSI at - - <address> - <otheraddr>13th Floor</otheraddr> - <street>11 West 42nd Street</street> - <city>New York</city> - <state>NY</state> <postcode>10036</postcode> - Sales Dept: <phone>(212) 642-4900</phone> - </address> - </para> - - <para>You can also buy many ANSI - standards and most committee draft documents from Global - Engineering Documents, - - <address> - <street>15 Inverness Way East</street> - <city>Englewood</city> - <state>CO</state>, <postcode>80112-5704</postcode> - Phone: <phone>(800) 854-7179</phone> - Outside USA and Canada: <phone>(303) 792-2181</phone> - Fax: <fax>(303) 792- 2192</fax> - </address> - </para> - - <para>Many X3T10 draft documents are available electronically on - the SCSI BBS (719-574-0424) and on the <hostid role="fqdn">ncrinfo.ncr.com</hostid> anonymous - ftp site.</para> - - <para>Latest X3T10 committee documents are:</para> - - <itemizedlist> - - <listitem> - <para>AT Attachment (ATA or IDE) [X3.221-1994] - (<emphasis>Approved</emphasis>)</para> - </listitem> - - <listitem> - <para>ATA Extensions (ATA-2) [X3T10/948D Rev 2i]</para> - </listitem> - - <listitem> - <para>Enhanced Small Device Interface (ESDI) - [X3.170-1990/X3.170a-1991] - (<emphasis>Approved</emphasis>)</para> - </listitem> - - <listitem> - <para>Small Computer System Interface — 2 (SCSI-2) - [X3.131-1994] (<emphasis>Approved</emphasis>)</para> - </listitem> - - <listitem> - <para>SCSI-2 Common Access Method Transport and SCSI - Interface Module (CAM) [X3T10/792D Rev 11]</para> - </listitem> - - </itemizedlist> - - <para>Other publications that might provide you with - additional information are:</para> - - <itemizedlist> - - <listitem> - <para>“SCSI: Understanding the Small Computer System - Interface”, written by NCR Corporation. Available from: - Prentice Hall, Englewood Cliffs, NJ, 07632 Phone: (201) - 767-5937 ISBN 0-13-796855-8</para> - </listitem> - - <listitem> - <para>“Basics of SCSI”, a SCSI tutorial written by Ancot - Corporation Contact Ancot for availability information at: - Phone: (415) 322-5322 Fax: (415) 322-0455</para> - </listitem> - - <listitem> - <para>“SCSI Interconnection Guide Book”, an AMP publication - (dated 4/93, Catalog 65237) that lists the various SCSI - connectors and suggests cabling schemes. Available from - AMP at (800) 522-6752 or (717) 564-0100</para> - </listitem> - - <listitem> - <para>“Fast Track to SCSI”, A Product Guide written by - Fujitsu. Available from: Prentice Hall, Englewood Cliffs, - NJ, 07632 Phone: (201) 767-5937 ISBN 0-13-307000-X</para> - </listitem> - - <listitem> - <para>“The SCSI Bench Reference”, “The SCSI Encyclopedia”, - and the “SCSI Tutor”, ENDL Publications, 14426 Black - Walnut Court, Saratoga CA, 95070 Phone: (408) 867-6642</para> - </listitem> - - <listitem> - <para>“Zadian SCSI Navigator” (quick ref. book) and - “Discover the Power of SCSI” (First book along with a - one-hour video and tutorial book), Zadian Software, Suite - 214, 1210 S. Bascom Ave., San Jose, CA 92128, (408) - 293-0800</para> - </listitem> - - </itemizedlist> - - <para>On Usenet the newsgroups <ulink - URL="news:comp.periphs.scsi">comp.periphs.scsi</ulink> and - <ulink URL="news:comp.periphs">comp.periphs</ulink> are - noteworthy places to look for more info. You can also find the - SCSI-Faq there, which is posted periodically.</para> - - <para>Most major SCSI device and host adapter suppliers operate - ftp sites and/or BBS systems. They may be valuable sources of - information about the devices you own.</para> - - </sect3> - </sect2> - - <sect2 id="hw-storage-controllers"> - <title>* Disk/tape controllers</title> - - - <sect3> - <title>* SCSI</title> - - <para></para> - </sect3> - - <sect3> - <title>* IDE</title> - - <para></para> - </sect3> - - <sect3> - <title>* Floppy</title> - - <para></para> - </sect3> - </sect2> - - <sect2> - <title>Hard drives</title> - - - <sect3> - <title>SCSI hard drives</title> - - <para><emphasis>Contributed by &a.asami;.<!-- <br> -->17 February - 1998.</emphasis></para> - - <para>As mentioned in the <link linkend="scsi">SCSI</link> - section, virtually all SCSI hard drives sold today are SCSI-2 - compliant and thus will work fine as long as you connect them to - a supported SCSI host adapter. Most problems people encounter - are either due to badly designed cabling (cable too long, star - topology, etc.), insufficient termination, or defective parts. - Please refer to the <link linkend="scsi">SCSI</link> - section first if your SCSI hard drive is not working. However, - there are a couple of things you may want to take into account - before you purchase SCSI hard drives for your system.</para> - - - <sect4> - <title>Rotational speed</title> - - <para>Rotational speeds of SCSI drives sold today range from - around 4,500RPM to 10,000RPM. Most of them are either 5,400RPM - or 7,200RPM. Even though the 7,200RPM drives can generally - transfer data faster, they run considerably hotter than their - 5,400RPM counterparts. A large fraction of today's disk drive - malfunctions are heat-related. If you do not have very good - cooling in your PC case, you may want to stick with 5,400RPM - or slower drives.</para> - - <para>Note that newer drives, with higher areal recording - densities, can deliver much more bits per rotation than older - ones. Today's top-of-line 5,400RPM drives can sustain a - throughput comparable to 7,200RPM drives of one or two model - generations ago. The number to find on the spec sheet for - bandwidth is “internal data (or transfer) rate”. It is - usually in megabits/sec so divide it by 8 and you'll get the - rough approximation of how much megabytes/sec you can get out - of the drive.</para> - - <para>(If you are a speed maniac and want a 10,000RPM drive for - your cute little peecee, be my guest; however, those drives - become extremely hot. Don't even think about it if you don't - have a fan blowing air <emphasis>directly at</emphasis> the - drive or a properly ventilated disk enclosure.)</para> - - <para>Obviously, the latest 10,000RPM drives and 7,200RPM drives - can deliver more data than the latest 5,400RPM drives, so if - absolute bandwidth is the necessity for your applications, you - have little choice but to get the faster drives. Also, if you - need low latency, faster drives are better; not only do they - usually have lower average seek times, but also the rotational - delay is one place where slow-spinning drives can never beat a - faster one. (The average rotational latency is half the time - it takes to rotate the drive once; thus, it's 3 milliseconds - for 10,000RPM drives, 4.2ms for 7,200RPM drives and 5.6ms for - 5,400RPM drives.) Latency is seek time plus rotational delay. - Make sure you understand whether you need low latency or more - accesses per second, though; in the latter case (e.g., news - servers), it may not be optimal to purchase one big fast - drive. You can achieve similar or even better results by - using the ccd (concatenated disk) driver to create a striped - disk array out of multiple slower drives for comparable - overall cost.</para> - - <para>Make sure you have adequate air flow around the drive, - especially if you are going to use a fast-spinning drive. You - generally need at least 1/2" (1.25cm) of spacing above and - below a drive. Understand how the air flows through your PC - case. Most cases have the power supply suck the air out of - the back. See where the air flows in, and put the drive where - it will have the largest volume of cool air flowing around it. - You may need to seal some unwanted holes or add a new fan for - effective cooling.</para> - - <para>Another consideration is noise. Many 7,200 or faster - drives generate a high-pitched whine which is quite unpleasant - to most people. That, plus the extra fans often required for - cooling, may make 7,200 or faster drives unsuitable for some - office and home environments.</para> - - </sect4> - - <sect4> - <title>Form factor</title> - - <para>Most SCSI drives sold today are of 3.5" form factor. They - come in two different heights; 1.6" (“half-height”) or 1" - (“low-profile”). The half-height drive is the same height as a - CD-ROM drive. However, don't forget the spacing rule - mentioned in the previous section. If you have three standard - 3.5" drive bays, you will not be able to put three half-height - drives in there (without frying them, that is).</para> - - </sect4> - - <sect4> - <title>Interface</title> - - <para>The majority of SCSI hard drives sold today are Ultra or - Ultra-wide SCSI. The maximum bandwidth of Ultra SCSI is - 20MB/sec, and Ultra-wide SCSI is 40MB/sec. There is no - difference in max cable length between Ultra and Ultra-wide; - however, the more devices you have on the same bus, the sooner - you will start having bus integrity problems. Unless you have - a well-designed disk enclosure, it is not easy to make more - than 5 or 6 Ultra SCSI drives work on a single bus.</para> - - <para>On the other hand, if you need to connect many drives, - going for Fast-wide SCSI may not be a bad idea. That will - have the same max bandwidth as Ultra (narrow) SCSI, while - electronically it's much easier to get it “right”. My advice - would be: if you want to connect many disks, get wide SCSI - drives; they usually cost a little more but it may save you - down the road. (Besides, if you can't afford the cost - difference, you shouldn't be building a disk array.)</para> - - <para>There are two variant of wide SCSI drives; 68-pin and - 80-pin SCA (Single Connector Attach). The SCA drives don't - have a separate 4-pin power connector, and also read the SCSI - ID settings through the 80-pin connector. If you are really - serious about building a large storage system, get SCA drives - and a good SCA enclosure (dual power supply with at least one - extra fan). They are more electronically sound than 68-pin - counterparts because there is no “stub” of the SCSI bus inside - the disk canister as in arrays built from 68-pin drives. They - are easier to install too (you just need to screw the drive in - the canister, instead of trying to squeeze in your fingers in - a tight place to hook up all the little cables (like the SCSI - ID and disk activity LED lines).</para> - - </sect4> - </sect3> - - <sect3> - <title>* IDE hard drives</title> - - <para></para> - </sect3> - </sect2> - - <sect2> - <title>Tape drives</title> - - <para><emphasis>Contributed by &a.jmb;.<!-- <br> -->2 July - 1996.</emphasis></para> - - - <sect3> - <title>General tape access commands</title> - - <para><citerefentry><refentrytitle>mt</refentrytitle><manvolnum>1</manvolnum></citerefentry> provides generic access to the tape - drives. Some of the more common commands are - <command>rewind</command>, <command>erase</command>, and - <command>status</command>. See the <citerefentry><refentrytitle>mt</refentrytitle><manvolnum>1</manvolnum></citerefentry> - manual page for a detailed description.</para> - - </sect3> - - <sect3> - <title>Controller Interfaces</title> - - <para>There are several different interfaces that support tape - drives. The interfaces are SCSI, IDE, Floppy and Parallel Port. - A wide variety of tape drives are available for these - interfaces. Controllers are discussed in - <link linkend="hw-storage-controllers">Disk/tape - controllers</link>.</para> - - </sect3> - - <sect3> - <title>SCSI drives</title> - - <para>The <citerefentry><refentrytitle>st</refentrytitle><manvolnum>4</manvolnum></citerefentry> driver provides - support for 8mm (Exabyte), 4mm (DAT: Digital Audio Tape), QIC - (Quarter-Inch Cartridge), DLT (Digital Linear Tape), QIC - Minicartridge and 9-track (remember the big reels that you see - spinning in Hollywood computer rooms) tape drives. See the - <citerefentry><refentrytitle>st</refentrytitle><manvolnum>4</manvolnum></citerefentry> manual page for a detailed - description.</para> - - <para>The drives listed below are currently being used by members - of the FreeBSD community. They are not the only drives that - will work with FreeBSD. They just happen to be the ones that we - use.</para> - - - <sect4> - <title>4mm (DAT: Digital Audio Tape)</title> - - <para><link linkend="hw-storage-python">Archive - Python</link></para> - - <para><link linkend="hw-storage-hp1533a">HP - C1533A</link></para> - - <para><link linkend="hw-storage-hp1534a">HP - C1534A</link></para> - - <para><link linkend="hw-storage-hp35450a">HP - 35450A</link></para> - - <para><link linkend="hw-storage-hp35470a">HP - 35470A</link></para> - - <para><link linkend="hw-storage-hp35480a">HP - 35480A</link></para> - - <para><link linkend="hw-storage-sdt5000">SDT-5000</link></para> - - <para><link linkend="hw-storage-wangtek6200">Wangtek - 6200</link></para> - - </sect4> - - <sect4> - <title>8mm (Exabyte)</title> - - <para><link linkend="hw-storage-exb8200">EXB-8200</link></para> - - <para><link linkend="hw-storage-exb8500">EXB-8500</link></para> - - <para><link linkend="hw-storage-exb8505">EXB-8505</link></para> - - </sect4> - - <sect4> - <title>QIC (Quarter-Inch Cartridge)</title> - - <para><link linkend="hw-storage-anaconda">Archive - Ananconda 2750</link></para> - - <para><link linkend="hw-storage-viper60">Archive Viper - 60</link></para> - - <para><link linkend="hw-storage-viper150">Archive Viper - 150</link></para> - - <para><link linkend="hw-storage-viper2525">Archive Viper - 2525</link></para> - - <para><link linkend="hw-storage-tandberg3600">Tandberg - TDC 3600</link></para> - - <para><link linkend="hw-storage-tandberg3620">Tandberg - TDC 3620</link></para> - - <para><link linkend="hw-storage-tandberg4222">Tandberg - TDC 4222</link></para> - - <para><link linkend="hw-storage-wangtek5525es">Wangtek - 5525ES</link></para> - - </sect4> - - <sect4> - <title>DLT (Digital Linear Tape)</title> - - <para><link linkend="hw-storage-dectz87">Digital - TZ87</link></para> - - </sect4> - - <sect4> - <title>Mini-Cartridge</title> - - <para><link linkend="hw-storage-ctms3200">Conner CTMS - 3200</link></para> - - <para><link linkend="hw-storage-exb2501">Exabyte - 2501</link></para> - - </sect4> - - <sect4> - <title>Autoloaders/Changers</title> - - <para><link linkend="hw-storage-hp1553a">Hewlett-Packard - HP C1553A Autoloading DDS2</link></para> - - </sect4> - </sect3> - - <sect3> - <title>* IDE drives</title> - - <para></para> - </sect3> - - <sect3> - <title>Floppy drives</title> - - <para><link linkend="hw-storage-conner420r">Conner - 420R</link></para> - - </sect3> - - <sect3> - <title>* Parallel port drives</title> - - <para></para> - </sect3> - - <sect3> - <title>Detailed Information</title> - - - <sect4 id="hw-storage-anaconda"> - <title>Archive Anaconda 2750</title> - - <para>The boot message identifier for this drive is - <literal>ARCHIVE ANCDA 2750 28077 -003 type 1 removable SCSI - 2</literal></para> - - <para>This is a QIC tape drive.</para> - - <para>Native capacity is 1.35GB when using QIC-1350 tapes. This - drive will read and write QIC-150 (DC6150), QIC-250 (DC6250), - and QIC-525 (DC6525) tapes as well.</para> - - <para>Data transfer rate is 350kB/s using - <citerefentry><refentrytitle>dump</refentrytitle><manvolnum>8</manvolnum></citerefentry>. Rates of 530kB/s have been - reported when using <link - linkend="backups-programs-amanda">Amanda</link></para> - - <para>Production of this drive has been discontinued.</para> - - <para>The SCSI bus connector on this tape drive is reversed from - that on most other SCSI devices. Make sure that you have - enough SCSI cable to twist the cable one-half turn before and - after the Archive Anaconda tape drive, or turn your other SCSI - devices upside-down.</para> - - <para>Two kernel code changes are required to use this drive. - This drive will not work as delivered.</para> - - <para>If you have a SCSI-2 controller, short jumper 6. - Otherwise, the drive behaves are a SCSI-1 device. When - operating as a SCSI-1 device, this drive, “locks” the SCSI bus - during some tape operations, including: fsf, rewind, and - rewoffl.</para> - - <para>If you are using the NCR SCSI controllers, patch the file - <filename>/usr/src/sys/pci/ncr.c</filename> (as shown below). - Build and install a new kernel.</para> - - <programlisting> -*** 4831,4835 **** - }; - -! if (np->latetime>4) { - /* - ** Although we tried to wake it up, ---- 4831,4836 ---- - }; - -! if (np->latetime>1200) { - /* - ** Although we tried to wake it up,</programlisting> - - <para>Reported by: &a.jmb;</para> - - </sect4> - - <sect4 id="hw-storage-python"> - <title>Archive Python</title> - - <para>The boot message identifier for this drive is - <literal>ARCHIVE Python 28454-XXX4ASB</literal> <literal>type - 1 removable SCSI 2</literal> <literal>density code 0x8c, - 512-byte blocks</literal></para> - - <para>This is a DDS-1 tape drive.</para> - - <para>Native capacity is 2.5GB on 90m tapes.</para> - - <para>Data transfer rate is XXX.</para> - - <para>This drive was repackaged by Sun Microsystems as model - 411.</para> - - <para>Reported by: Bob Bishop <email>rb@gid.co.uk</email></para> - - </sect4> - - <sect4 id="hw-storage-viper60"> - <title>Archive Viper 60</title> - - <para>The boot message identifier for this drive is - <literal>ARCHIVE VIPER 60 21116 -007</literal> <literal>type 1 - removable SCSI 1</literal></para> - - <para>This is a QIC tape drive.</para> - - <para>Native capacity is 60MB.</para> - - <para>Data transfer rate is XXX.</para> - - <para>Production of this drive has been discontinued.</para> - - <para>Reported by: Philippe Regnauld <email>regnauld@hsc.fr</email></para> - - </sect4> - - <sect4 id="hw-storage-viper150"> - <title>Archive Viper 150</title> - - <para>The boot message identifier for this drive is <literal>ARCHIVE - VIPER 150 21531 -004</literal> <literal>Archive Viper 150 is a known rogue</literal> - <literal>type 1 removable SCSI 1</literal>. A multitude of firmware revisions - exist for this drive. Your drive may report different numbers - (e.g <literal>21247 -005</literal>.</para> - - <para>This is a QIC tape drive.</para> - - <para>Native capacity is 150/250MB. Both 150MB (DC6150) and - 250MB (DC6250) tapes have the recording format. The 250MB - tapes are approximately 67% longer than the 150MB tapes. This - drive can read 120MB tapes as well. It can not write 120MB - tapes.</para> - - <para>Data transfer rate is 100kB/s</para> - - <para>This drive reads and writes DC6150 (150MB) and DC6250 - (250MB) tapes.</para> - - <para>This drives quirks are known and pre-compiled into the - scsi tape device driver (<citerefentry><refentrytitle>st</refentrytitle><manvolnum>4</manvolnum></citerefentry>).</para> - - <para>Under FreeBSD 2.2-current, use <command>mt - blocksize 512</command> to set the blocksize. (The - particular drive had firmware revision 21247 -005. Other - firmware revisions may behave differently) Previous versions - of FreeBSD did not have this problem.</para> - - <para>Production of this drive has been discontinued.</para> - - <para>Reported by: Pedro A M Vazquez - <email>vazquez@IQM.Unicamp.BR</email></para> - - <para>Mike Smith - <email>msmith@atrad.adelaide.edu.au</email></para> - - </sect4> - - <sect4 id="hw-storage-viper2525"> - <title>Archive Viper 2525</title> - - <para>The boot message identifier for this drive is <literal>ARCHIVE - VIPER 2525 25462 -011</literal> <literal>type 1 removable SCSI 1</literal></para> - - <para>This is a QIC tape drive.</para> - - <para>Native capacity is 525MB.</para> - - <para>Data transfer rate is 180kB/s at 90 inches/sec.</para> - - <para>The drive reads QIC-525, QIC-150, QIC-120 and QIC-24 - tapes. Writes QIC-525, QIC-150, and QIC-120.</para> - - <para>Firmware revisions prior to <literal>25462 -011</literal> are bug ridden - and will not function properly.</para> - - <para>Production of this drive has been discontinued.</para> - - </sect4> - - <sect4 id="hw-storage-conner420r"> - <title>Conner 420R</title> - - <para>The boot message identifier for this drive is <literal>Conner - tape</literal>.</para> - - <para>This is a floppy controller, minicartridge tape - drive.</para> - - <para>Native capacity is XXXX</para> - - <para>Data transfer rate is XXX</para> - - <para>The drive uses QIC-80 tape cartridges.</para> - - <para>Reported by: Mark Hannon <email>mark@seeware.DIALix.oz.au</email></para> - - </sect4> - - <sect4 id="hw-storage-ctms3200"> - <title>Conner CTMS 3200</title> - - <para>The boot message identifier for this drive is <literal>CONNER CTMS - 3200 7.00</literal> <literal>type 1 removable SCSI 2</literal>.</para> - - <para>This is a minicartridge tape drive.</para> - - <para>Native capacity is XXXX</para> - - <para>Data transfer rate is XXX</para> - - <para>The drive uses QIC-3080 tape cartridges.</para> - - <para>Reported by: Thomas S. Traylor <email>tst@titan.cs.mci.com</email></para> - - </sect4> - - <sect4 id="hw-storage-dectz87"> - <title><ulink - URL="http://www.digital.com/info/Customer-Update/931206004.txt.html">DEC TZ87</ulink></title> - - <para>The boot message identifier for this drive is <literal>DEC TZ87 - (C) DEC 9206</literal> <literal>type 1 removable SCSI 2</literal> <literal>density code - 0x19</literal></para> - - <para>This is a DLT tape drive.</para> - - <para>Native capacity is 10GB.</para> - - <para>This drive supports hardware data compression.</para> - - <para>Data transfer rate is 1.2MB/s.</para> - - <para>This drive is identical to the Quantum DLT2000. The drive - firmware can be set to emulate several well-known drives, - including an Exabyte 8mm drive.</para> - - <para>Reported by: &a.wilko;</para> - - </sect4> - - <sect4 id="hw-storage-exb2501"> - <title><ulink - URL="http://www.Exabyte.COM:80/Products/Minicartridge/2501/Rfeatures.html">Exabyte EXB-2501</ulink></title> - - <para>The boot message identifier for this drive is <literal>EXABYTE - EXB-2501</literal></para> - - <para>This is a mini-cartridge tape drive.</para> - - <para>Native capacity is 1GB when using MC3000XL - minicartridges.</para> - - <para>Data transfer rate is XXX</para> - - <para>This drive can read and write DC2300 (550MB), DC2750 - (750MB), MC3000 (750MB), and MC3000XL (1GB) - minicartridges.</para> - - <para>WARNING: This drive does not meet the SCSI-2 - specifications. The drive locks up completely in response to - a SCSI MODE_SELECT command unless there is a formatted tape in - the drive. Before using this drive, set the tape blocksize - with</para> - - - <screen>&prompt.root; <userinput>mt -f /dev/st0ctl.0 blocksize 1024</userinput></screen> - - - <para>Before using a minicartridge for the first time, the - minicartridge must be formated. FreeBSD 2.1.0-RELEASE and - earlier:</para> - - - <screen>&prompt.root; <userinput>/sbin/scsi -f /dev/rst0.ctl -s 600 -c "4 0 0 0 0 0"</userinput></screen> - - - <para>(Alternatively, fetch a copy of the <command>scsiformat</command> shell script from FreeBSD - 2.1.5/2.2.) FreeBSD 2.1.5 and later:</para> - - - <screen>&prompt.root; <userinput>/sbin/scsiformat -q -w /dev/rst0.ctl</userinput></screen> - - - <para>Right now, this drive cannot really be recommended for - FreeBSD.</para> - - <para>Reported by: Bob Beaulieu <email>ez@eztravel.com</email></para> - - </sect4> - - <sect4 id="hw-storage-exb8200"> - <title>Exabyte EXB-8200</title> - - <para>The boot message identifier for this drive is <literal>EXABYTE - EXB-8200 252X</literal> <literal>type 1 removable SCSI 1</literal></para> - - <para>This is an 8mm tape drive.</para> - - <para>Native capacity is 2.3GB.</para> - - <para>Data transfer rate is 270kB/s.</para> - - <para>This drive is fairly slow in responding to the SCSI bus - during boot. A custom kernel may be required (set SCSI_DELAY - to 10 seconds).</para> - - <para>There are a large number of firmware configurations for - this drive, some have been customized to a particular vendor's - hardware. The firmware can be changed via EPROM - replacement.</para> - - <para>Production of this drive has been discontinued.</para> - - <para>Reported by: Mike Smith - <email>msmith@atrad.adelaide.edu.au</email></para> - - </sect4> - - <sect4 id="hw-storage-exb8500"> - <title>Exabyte EXB-8500</title> - - <para>The boot message identifier for this drive is <literal>EXABYTE - EXB-8500-85Qanx0 0415</literal> <literal>type 1 removable SCSI 2</literal></para> - - <para>This is an 8mm tape drive.</para> - - <para>Native capacity is 5GB.</para> - - <para>Data transfer rate is 300kB/s.</para> - - <para>Reported by: Greg Lehey <email>grog@lemis.de</email></para> - - </sect4> - - <sect4 id="hw-storage-exb8505"> - <title><ulink - URL="http://www.Exabyte.COM:80/Products/8mm/8505XL/Rfeatures.html">Exabyte EXB-8505</ulink></title> - - <para>The boot message identifier for this drive is <literal>EXABYTE - EXB-85058SQANXR1 05B0</literal> <literal>type 1 removable SCSI 2</literal></para> - - <para>This is an 8mm tape drive which supports compression, and - is upward compatible with the EXB-5200 and EXB-8500.</para> - - <para>Native capacity is 5GB.</para> - - <para>The drive supports hardware data compression.</para> - - <para>Data transfer rate is 300kB/s.</para> - - <para>Reported by: Glen Foster <email>gfoster@gfoster.com</email></para> - - </sect4> - - <sect4 id="hw-storage-hp1533a"> - <title>Hewlett-Packard HP C1533A</title> - - <para>The boot message identifier for this drive is <literal>HP C1533A - 9503</literal> <literal>type 1 removable SCSI 2</literal>.</para> - - <para>This is a DDS-2 tape drive. DDS-2 means hardware data - compression and narrower tracks for increased data - capacity.</para> - - <para>Native capacity is 4GB when using 120m tapes. This drive - supports hardware data compression.</para> - - <para>Data transfer rate is 510kB/s.</para> - - <para>This drive is used in Hewlett-Packard's SureStore 6000eU - and 6000i tape drives and C1533A DDS-2 DAT drive.</para> - - <para>The drive has a block of 8 dip switches. The proper - settings for FreeBSD are: 1 ON; 2 ON; 3 OFF; 4 ON; 5 ON; 6 ON; - 7 ON; 8 ON.</para> - - <informaltable frame="none"> - <tgroup cols="3"> - <thead> - <row> - <entry>switch 1</entry> - <entry>switch 2</entry> - <entry>Result</entry> - </row> - </thead> - - <tbody> - <row> - <entry>On</entry> - <entry>On</entry> - <entry>Compression enabled at power-on, with host - control</entry> - </row> - - <row> - <entry>On</entry> - <entry>Off</entry> - <entry>Compression enabled at power-on, no host - control</entry> - </row> - - <row> - <entry>Off</entry> - <entry>On</entry> - <entry>Compression disabled at power-on, with host - control</entry> - </row> - - <row> - <entry>Off</entry> - <entry>Off</entry> - <entry>Compression disabled at power-on, no host - control</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <para>Switch 3 controls MRS (Media Recognition System). MRS - tapes have stripes on the transparent leader. These identify - the tape as DDS (Digital Data Storage) grade media. Tapes - that do not have the stripes will be treated as - write-protected. Switch 3 OFF enables MRS. Switch 3 ON - disables MRS.</para> - - <para>See <ulink URL="http://www.hp.com/tape/c_intro.html">HP - SureStore Tape Products</ulink> and <ulink - URL="http://www.impediment.com/hp/hp_technical.html">Hewlett-Packard Disk and Tape Technical Information</ulink> for more information on configuring this drive.</para> - - <para><emphasis>Warning:</emphasis> Quality control on these - drives varies greatly. One FreeBSD core-team member has - returned 2 of these drives. Neither lasted more than 5 - months.</para> - - <para>Reported by: &a.se;</para> - - </sect4> - - <sect4 id="hw-storage-hp1534a"> - <title>Hewlett-Packard HP 1534A</title> - - <para>The boot message identifier for this drive is <literal>HP HP35470A - T503</literal> <literal>type 1 removable SCSI 2</literal> <literal>Sequential-Access density code - 0x13, variable blocks</literal>.</para> - - <para>This is a DDS-1 tape drive. DDS-1 is the original DAT - tape format.</para> - - <para>Native capacity is 2GB when using 90m tapes.</para> - - <para>Data transfer rate is 183kB/s.</para> - - <para>The same mechanism is used in Hewlett-Packard's SureStore - <ulink - URL="http://www.dmo.hp.com/tape/sst2000.htm">2000i</ulink> - tape drive, C35470A DDS format DAT drive, C1534A DDS format - DAT drive and HP C1536A DDS format DAT drive.</para> - - <para>The HP C1534A DDS format DAT drive has two indicator - lights, one green and one amber. The green one indicates tape - action: slow flash during load, steady when loaded, fast flash - during read/write operations. The amber one indicates - warnings: slow flash when cleaning is required or tape is - nearing the end of its useful life, steady indicates an hard - fault. (factory service required?)</para> - - <para>Reported by Gary Crutcher <email>gcrutchr@nightflight.com</email></para> - - </sect4> - - <sect4 id="hw-storage-hp1553a"> - <title>Hewlett-Packard HP C1553A Autoloading DDS2</title> - - <para>The boot message identifier for this drive is "".</para> - - <para>This is a DDS-2 tape drive with a tape changer. DDS-2 - means hardware data compression and narrower tracks for - increased data capacity.</para> - - <para>Native capacity is 24GB when using 120m tapes. This drive - supports hardware data compression.</para> - - <para>Data transfer rate is 510kB/s (native).</para> - - <para>This drive is used in Hewlett-Packard's SureStore <ulink - URL="http://www.dmo.hp.com/tape/sst12000.htm">12000e</ulink> - tape drive.</para> - - <para>The drive has two selectors on the rear panel. The - selector closer to the fan is SCSI id. The other selector - should be set to 7.</para> - - <para>There are four internal switches. These should be set: 1 - ON; 2 ON; 3 ON; 4 OFF.</para> - - <para>At present the kernel drivers do not automatically change - tapes at the end of a volume. This shell script can be used - to change tapes:</para> - - <programlisting> -#!/bin/sh -PATH="/sbin:/usr/sbin:/bin:/usr/bin"; export PATH - -usage() -{ - echo "Usage: dds_changer [123456ne] raw-device-name - echo "1..6 = Select cartridge" - echo "next cartridge" - echo "eject magazine" - exit 2 -} - -if [ $# -ne 2 ] ; then - usage -fi - -cdb3=0 -cdb4=0 -cdb5=0 - -case $1 in - [123456]) - cdb3=$1 - cdb4=1 - ;; - n) - ;; - e) - cdb5=0x80 - ;; - ?) - usage - ;; -esac - -scsi -f $2 -s 100 -c "1b 0 0 $cdb3 $cdb4 $cdb5"</programlisting> - - </sect4> - - <sect4 id="hw-storage-hp35450a"> - <title>Hewlett-Packard HP 35450A</title> - - <para>The boot message identifier for this drive is <literal>HP HP35450A - -A C620</literal> <literal>type 1 removable SCSI 2</literal> <literal>Sequential-Access density - code 0x13</literal></para> - - <para>This is a DDS-1 tape drive. DDS-1 is the original DAT - tape format.</para> - - <para>Native capacity is 1.2GB.</para> - - <para>Data transfer rate is 160kB/s.</para> - - <para>Reported by: mark thompson - <email>mark.a.thompson@pobox.com</email></para> - - </sect4> - - <sect4 id="hw-storage-hp35470a"> - <title>Hewlett-Packard HP 35470A</title> - - <para>The boot message identifier for this drive is <literal>HP HP35470A - 9 09</literal> <literal>type 1 removable SCSI 2</literal></para> - - <para>This is a DDS-1 tape drive. DDS-1 is the original DAT - tape format.</para> - - <para>Native capacity is 2GB when using 90m tapes.</para> - - <para>Data transfer rate is 183kB/s.</para> - - <para>The same mechanism is used in Hewlett-Packard's SureStore - <ulink - URL="http://www.dmo.hp.com/tape/sst2000.htm">2000i</ulink> - tape drive, C35470A DDS format DAT drive, C1534A DDS format - DAT drive, and HP C1536A DDS format DAT drive.</para> - - <para><emphasis>Warning:</emphasis> Quality control on these - drives varies greatly. One FreeBSD core-team member has - returned 5 of these drives. None lasted more than 9 - months.</para> - - <para>Reported by: David Dawes <email>dawes@rf900.physics.usyd.edu.au</email> - (9 09)</para> - - </sect4> - - <sect4 id="hw-storage-hp35480a"> - <title>Hewlett-Packard HP 35480A</title> - - <para>The boot message identifier for this drive is <literal>HP HP35480A - 1009</literal> <literal>type 1 removable SCSI 2</literal> <literal>Sequential-Access density - code 0x13</literal>.</para> - - <para>This is a DDS-DC tape drive. DDS-DC is DDS-1 with - hardware data compression. DDS-1 is the original DAT tape - format.</para> - - <para>Native capacity is 2GB when using 90m tapes. It cannot - handle 120m tapes. This drive supports hardware data - compression. Please refer to the section on <link - linkend="hw-storage-hp1533a">HP - C1533A</link> for the proper switch settings.</para> - - <para>Data transfer rate is 183kB/s.</para> - - <para>This drive is used in Hewlett-Packard's SureStore <ulink - URL="http://www.dmo.hp.com/tape/sst5000.htm">5000eU</ulink> - and <ulink - URL="http://www.dmo.hp.com/tape/sst5000.htm">5000i</ulink> - tape drives and C35480A DDS format DAT drive..</para> - - <para>This drive will occasionally hang during a tape eject - operation (<command>mt offline</command>). - Pressing the front panel button will eject the tape and bring - the tape drive back to life.</para> - - <para>WARNING: HP 35480-03110 only. On at least two occasions - this tape drive when used with FreeBSD 2.1.0, an IBM Server - 320 and an 2940W SCSI controller resulted in all SCSI disk - partitions being lost. The problem has not be analyzed or - resolved at this time.</para> - - </sect4> - - <sect4 id="hw-storage-sdt5000"> - <title><ulink - URL="http://www.sel.sony.com/SEL/ccpg/storage/tape/t5000.html">Sony SDT-5000</ulink></title> - - <para>There are at least two significantly different models: one - is a DDS-1 and the other DDS-2. The DDS-1 version is - <literal>SDT-5000 3.02</literal>. The DDS-2 version is <literal>SONY SDT-5000 327M</literal>. - The DDS-2 version has a 1MB cache. This cache is able to keep - the tape streaming in almost any circumstances.</para> - - <para>The boot message identifier for this drive is <literal>SONY - SDT-5000 3.02</literal> <literal>type 1 removable SCSI 2</literal> <literal>Sequential-Access - density code 0x13</literal></para> - - <para>Native capacity is 4GB when using 120m tapes. This drive - supports hardware data compression.</para> - - <para>Data transfer rate is depends upon the model or the drive. - The rate is 630kB/s for the <literal>SONY SDT-5000 327M</literal> while - compressing the data. For the <literal>SONY SDT-5000 3.02</literal>, the data - transfer rate is 225kB/s.</para> - - <para>In order to get this drive to stream, set the blocksize to - 512 bytes (<command>mt blocksize 512</command>) - reported by Kenneth Merry - ken@ulc199.residence.gatech.edu</para> - - <para><literal>SONY SDT-5000 327M</literal> information reported by Charles - Henrich henrich@msu.edu</para> - - <para>Reported by: &a.jmz;</para> - - </sect4> - - <sect4 id="hw-storage-tandberg3600"> - <title>Tandberg TDC 3600</title> - - <para>The boot message identifier for this drive is <literal>TANDBERG - TDC 3600 =08:</literal> <literal>type 1 removable SCSI 2</literal></para> - - <para>This is a QIC tape drive.</para> - - <para>Native capacity is 150/250MB.</para> - - <para>This drive has quirks which are known and work around code - is present in the scsi tape device driver (<citerefentry><refentrytitle>st</refentrytitle><manvolnum>4</manvolnum></citerefentry>). Upgrading the firmware to XXX - version will fix the quirks and provide SCSI 2 - capabilities.</para> - - <para>Data transfer rate is 80kB/s.</para> - - <para>IBM and Emerald units will not work. Replacing the - firmware EPROM of these units will solve the problem.</para> - - <para>Reported by: Michael Smith - <email>msmith@atrad.adelaide.edu.au</email></para> - - </sect4> - - <sect4 id="hw-storage-tandberg3620"> - <title>Tandberg TDC 3620</title> - - <para>This is very similar to the <link - linkend="hw-storage-tandberg3600">Tandberg TDC 3600</link> - drive.</para> - - <para>Reported by: &a.joerg;</para> - - </sect4> - - <sect4 id="hw-storage-tandberg4222"> - <title>Tandberg TDC 4222</title> - - <para>The boot message identifier for this drive is <literal>TANDBERG - TDC 4222 =07</literal> <literal>type 1 removable SCSI 2</literal></para> - - <para>This is a QIC tape drive.</para> - - <para>Native capacity is 2.5GB. The drive will read all - cartridges from the 60 MB (DC600A) upwards, and write 150 MB - (DC6150) upwards. Hardware compression is optionally - supported for the 2.5 GB cartridges.</para> - - <para>This drives quirks are known and pre-compiled into the - scsi tape device driver (<citerefentry><refentrytitle>st</refentrytitle><manvolnum>4</manvolnum></citerefentry>) - beginning with FreeBSD 2.2-current. For previous versions of - FreeBSD, use <command>mt</command> to read one - block from the tape, rewind the tape, and then execute the - backup program (<command>mt fsr 1; mt rewind; dump - ...</command>)</para> - - <para>Data transfer rate is 600kB/s (vendor claim with - compression), 350 KB/s can even be reached in start/stop mode. - The rate decreases for smaller cartridges.</para> - - <para>Reported by: &a.joerg;</para> - - </sect4> - - <sect4 id="hw-storage-wangtek5525es"> - <title>Wangtek 5525ES</title> - - <para>The boot message identifier for this drive is <literal>WANGTEK - 5525ES SCSI REV7 3R1</literal> <literal>type 1 removable SCSI 1</literal> <literal>density code - 0x11, 1024-byte blocks</literal></para> - - <para>This is a QIC tape drive.</para> - - <para>Native capacity is 525MB.</para> - - <para>Data transfer rate is 180kB/s.</para> - - <para>The drive reads 60, 120, 150, and 525MB tapes. The drive - will not write 60MB (DC600 cartridge) tapes. In order to - overwrite 120 and 150 tapes reliably, first erase (<command>mt erase</command>) the tape. 120 and 150 tapes - used a wider track (fewer tracks per tape) than 525MB tapes. - The “extra” width of the previous tracks is not overwritten, - as a result the new data lies in a band surrounded on both - sides by the previous data unless the tape have been - erased.</para> - - <para>This drives quirks are known and pre-compiled into the - scsi tape device driver (<citerefentry><refentrytitle>st</refentrytitle><manvolnum>4</manvolnum></citerefentry>).</para> - - <para>Other firmware revisions that are known to work are: - M75D</para> - - <para>Reported by: Marc van Kempen <email>marc@bowtie.nl</email> <literal>REV73R1</literal> - Andrew Gordon <email>Andrew.Gordon@net-tel.co.uk</email> <literal>M75D</literal></para> - - </sect4> - - <sect4 id="hw-storage-wangtek6200"> - <title>Wangtek 6200</title> - - <para>The boot message identifier for this drive is <literal>WANGTEK - 6200-HS 4B18</literal> <literal>type 1 removable SCSI 2</literal> <literal>Sequential-Access - density code 0x13</literal></para> - - <para>This is a DDS-1 tape drive.</para> - - <para>Native capacity is 2GB using 90m tapes.</para> - - <para>Data transfer rate is 150kB/s.</para> - - <para>Reported by: Tony Kimball <email>alk@Think.COM</email></para> - - </sect4> - </sect3> - - <sect3> - <title>* Problem drives</title> - - <para></para> - </sect3> - </sect2> - - <sect2> - <title>CD-ROM drives</title> - - <para><emphasis>Contributed by &a.obrien;.<!-- <br> -->23 November - 1997.</emphasis></para> - - <para>As mentioned in - <link linkend="hw-jordans-picks-cdrom">Jordan's Picks</link> - Generally speaking those in <emphasis>The FreeBSD - Project</emphasis> prefer SCSI CDROM drives over IDE CDROM - drives. However not all SCSI CDROM drives are equal. Some feel - the quality of some SCSI CDROM drives have been deteriorating to - that of IDE CDROM drives. Toshiba used to be the favored - stand-by, but many on the SCSI mailing list have found displeasure - with the 12x speed XM-5701TA as its volume (when playing audio - CDROMs) is not controllable by the various audio player - software.</para> - - <para>Another area where SCSI CDROM manufacturers are cutting - corners is adhearance to the - <link linkend="scsi-further-reading">SCSI specification</link>. - Many SCSI CDROMs will respond to - <link linkend="scsi-rogue-devices">multiple LUNs</link> for its - target address. Known violators include the 6x Teac CD-56S - 1.0D.</para> - - </sect2> - - <sect2> - <title>* Other</title> - - <para></para> - </sect2> - </sect1> - - <sect1 id="hw-other"> - <title>* Other</title> - - - <sect2> - <title>* PCMCIA</title> - - <para></para> - </sect2> - </sect1> - </chapter> - -<!-- - Local Variables: - mode: sgml - sgml-declaration: "../chapter.decl" - sgml-indent-data: t - sgml-omittag: nil - sgml-always-quote-attributes: t - sgml-parent-document: ("../handbook.sgml" "part" "chapter") - End: ---> - |