In an obvious Freudian slip, we accidentally named our first working draft of this entire chapter Troubleshooting USB. It's ridiculous, to be sure, but the simple fact is that working with USB often means spending lots of time troubleshooting it. In our experience and in that of many of our readers, USB can be the most trouble-prone technology you'll find in a PC.
The goal of USB is transparent, Plug-and-Play connectivity to diverse external peripherals. Alas, that goal is often unrealized other than by pure luck. USB is indeed wonderful when it works as it is supposed to. You simply plug in a device and it works. Unfortunately, the reality of living with USB is that you sometimes plug in a device and it doesn't work. Worse yet, not only does the new device not work. Also, your other USB peripherals may stop working. Arrrrghh.
In response to a reader query on our message board about troubleshooting USB, we said in part:
"The problem with USB troubleshooting is that there are way too many degrees of freedom. Each device is a law unto itself. It's as though when troubleshooting an automobile, one possible answer to the problem was that you'd installed Shell gasoline and Mobil oil, which in combination with your Bosch ignition and Fram fuel filter had caused your right front headlight to work intermittently, but only if you were running four Michelin tires and had a Goodyear spare."
This pretty much sums up the frustrations of trying to troubleshoot USB using traditional methods. If you run only one or two USB peripherals, you may wonder what we're talking about. Millions of PCs happily use a couple of USB peripherals with no problem at all?until the day that you plug in a new USB peripheral or experience a minor communication problem with one of your peripherals, when suddenly the whole thing collapses like a house of cards.
Several factors determine the likelihood that any particular USB configuration will function properly. All other things being equal, you are less likely to have USB problems?and the ones you have are likely to be less severe?if your motherboard is recent and has a current BIOS, if you use recent, name-brand USB peripherals, if you use the latest release of your operating system, if you connect only a few USB peripherals (and leave them connected), and if you connect the peripherals to (preferably) root hub ports or to a powered USB hub. Conversely, if your motherboard is old or has an outdated BIOS, if you use old, off-brand USB peripherals, if you use an outdated version of your operating system, if you have many USB peripherals connected (and plug/unplug them frequently), and if you connect those peripherals to unpowered hubs, you are quite likely to have many USB problems, some of which may be quite severe.
At this point, most books and web sites that offer USB troubleshooting suggestions present a list of things to do when a USB problem occurs?connect the USB device to a different port, reboot the PC, and so on. All good advice, and sometimes it even works. But the truth is that in order to avoid USB problems in the first place and to solve those problems that do occur, it's important to start with a solid foundation. Otherwise, you can troubleshoot until you're blue in the face and still have problems?either the same boring old problems or exciting new problems.
The real secret to troubleshooting USB is to do everything possible to prevent problems. Doing that requires optimizing the system for USB?configuring a new system properly from the start, or reconfiguring an existing system to eliminate things likely to cause USB problems. In order to build a stable, robust, reliable USB system, do the following:
The first step in building a stable USB system is determining which USB host controller your system uses, as described in the previous section. If it has a recent AMD, Intel, NEC, or nVIDIA host controller, you may be in luck. If it has an older AMD, Intel, or NEC host controller, or if it has any host controller made by ALi, SiS, VIA, or another company, you may need to install a PCI/USB card with a more recent USB HCI.
Before you proceed, take the time to visit the web site for each of your USB peripherals. Check the support section to determine if there are any known conflicts, incompatibilities, HCI issues, and so on. Many USB devices list conflicts with specific other USB devices, or with certain HCIs. Some USB devices work reliably with only one specific HCI?often the Intel 82371AB/EB?and have problems with older or newer USB HCIs. If any of your current devices conflict, you may need to run them on separate USBs. Also, search the Microsoft web site for details about your specific USB configuration. For example, if you have an ALi chipset, a search for "ali usb" turns up several interesting articles about problems and solutions that apply specifically to running USB with an ALi chipset under Windows.
Outdated device firmware or drivers can cause many USB problems, some subtle and some glaringly apparent. The most common symptom of outdated firmware or drivers is that a device does not "sign in" or "sign out" properly. That is, when you disconnect a USB peripheral, it should simply become unavailable, and when you reconnect it, it should simply become available again. If the device firmware or drivers are outdated, you may experience various problems, from having to reboot the system for the device to be recognized, to Windows loading a second instance of the driver, to Device Manager showing a second "ghost" instance of the same device, which is marked with a yellow exclamation point and cannot be removed short of removing the underlying device. This problem is most common with bulk-mode devices such as printers and scanners, although we have seen it occur with many different types of USB peripherals. To avoid this problem, ensure that the firmware and drivers for all of your USB devices are current.
USB 1.1 hubs are relatively simple devices, and so seldom cause problems. What problems we have experienced with USB 1.1 hubs, almost without exception, have been caused by hubs that do not supply the full 500 mA to their ports. Cables are a different story. Many cables supplied with USB 1.1 peripherals are not standards-compliant, and may cause problems ranging from sporadic communications glitches to outright failure of the entire USB. If your cables are of unknown provenance, replace them with certified USB cables. We are not aware of any issues with USB 2.0 hubs or the cables supplied with USB 2.0 devices.
Many USB problems are caused by an outdated system BIOS. Before you connect USB peripherals to your system, update your system BIOS to the latest available version. If the latest BIOS update for your motherboard predates the release of Windows 98 in mid-1998, the likelihood that USB will function well on that motherboard is small.
Strangely enough, default BIOS settings are not always appropriate for USB. For detailed information about configuring your BIOS to support USB properly, visit the manufacturer's web site and examine the support page for your specific motherboard model. In general, however, you should configure a motherboard to use the following settings:
Set to Enable. Note that many motherboards, particularly those from 1998 and prior, are set by default to disable USB. Also note that you may have to enable USB on the motherboard even if you have installed a PCI/USB card and are not using the motherboard USB ports.
This BIOS Setup option specifies whether interrupts and other system resources are under the control of the chipset or the operating system. For most USB chipsets, set to Yes for any version of Linux or Windows that supports USB, including Windows 9X/2000/XP. Note, however, that for some chipsets, particularly older models, the proper choice for this setting may depend on which processor is installed. For example, some ALi chipsets require setting this option to Yes if you have a Celeron or Pentium II, III, or 4 installed, but to No if you have a K6-2, K6-III, Pentium, or Pentium Pro installed.
Set to Automatic or System for any version of Linux or Windows that supports USB, including Windows 9X or Windows 2000/XP.
The proper setting for this varies from motherboard to motherboard. In the absence of any specific recommendation from the motherboard manufacturer, we suggest disabling this setting for Windows 9X and enabling it for Windows 2000/XP. If you experience USB problems with one setting, try the other. Under Linux, the "device not accepting address" error message indicates that the HCI is unable to obtain a hardware interrupt. If this message occurs, use BIOS Setup to set "Assign IRQ to USB?" off.
Overclocking a system almost guarantees USB problems. For stable USB operation, set your BIOS to use nominal FSB speed. Boosting the PCI bus above its default 33.3 MHz is one of the most common causes of USB problems. Also note that motherboards vary in how aggressively they set memory timings. Intel motherboards and other motherboards intended for OEM systems typically use relatively relaxed memory timings, which are consonant with reliable operation. Motherboards targeted at the "enthusiast" market often have very aggressive default memory timings, which may contribute to USB problems as well as to overall system instability.
Disable this setting in BIOS. You want the operating system to control power management, if indeed you want to enable power management at all. We recommend against using power management in any form. Enabling ACPI (Advanced Configuration and Power Interface) in BIOS can cause a host of problems with USB. The fault lies not so much with ACPI itself as with poor ACPI implementations. Our rule of thumb is to disable ACPI on any motherboard that uses a chipset other than a very recent Intel model, such as the 845 series. Unfortunately, simply disabling ACPI in BIOS on an existing system doesn't solve the problems. The only practical way we know to eliminate ACPI conflicts is to disable ACPI in BIOS and then strip your hard drive down to bare metal and reinstall the operating system.
If you have a dual-processor system, it is probably set by default to use MPS 1.4. If you experience USB conflicts with this setting, reverting to MPS 1.1 may eliminate the problems.
Configuring IRQ Steering is described fully in Chapter 1. Under Windows 9X, having IRQ Steering enabled and properly configured is important to proper USB functioning. If IRQ Steering is disabled, it's nearly always because the BIOS settings are incorrect. Reboot the system, run BIOS Setup, and make sure that Plug-N-Play OS? is set to true and that IRQ Assignment is set to Automatic or System. When the system restarts, check IRQ Steering status as described in Chapter 1. Briefly, on the Settings page of the PCI Bus Properties dialog, make sure Device enumeration is set to Use hardware. On the IRQ Steering page of the PCI Bus Properties dialog, make sure the Use IRQ Steering checkbox is marked. The IRQ Routing Status pane on the IRQ Steering page should include the following four lines: IRQ Steering Enabled; IRQ Table read from <source>; IRQ Miniport Data processed successfully; and IRQ Miniport loaded successfully.
Despite what Microsoft and USB manufacturers claim, USB does not gracefully share an IRQ with other devices, especially under Windows 9X. Check the Device Manager to determine which IRQ is assigned to the USB HCI and whether that IRQ is shared with other devices. Under Windows 9X it is acceptable for an IRQ Holder for PCI Steering to share the HCI IRQ because that is simply a placeholder rather than a real device. But if the Device Manager shows that the IRQ assigned to the HCI is also being shared with a sound card, video adapter, network adapter, SCSI adapter, modem, or other device, the likelihood of USB problems occurring increases dramatically. For example, Figure 24-13 showed a USB disaster waiting to happen?an elderly Intel SE440BX-2V motherboard with ACPI enabled, using an old Intel 82371AB/EB HCI that shares IRQ 9 with a SCSI host adapter, a video adapter, a network adapter, and a sound adapter. When we tried plugging a USB printer into this system, it just whimpered.
The first step toward getting USB on a dedicated IRQ is to free up as many IRQs as possible. Begin by running BIOS Setup and disabling all unused devices. In many systems, COM1 and COM2 can safely be disabled, as can any printer port that uses an IRQ. If you use a USB mouse and/or keyboard, you may also be able to free up the interrupts assigned to the PS/2 mouse and keyboard ports. After you've freed up as many IRQs as possible, restart the system in Safe Mode, fire up the Device Manager, and delete all the corresponding devices. Note that you must do this in Safe Mode. If you attempt to remove devices while operating in Normal Mode, the next time you restart the system, Windows will restore the device and assign an IRQ to it.
At this point, you may have sufficient free IRQs that the USB HCI has been assigned a dedicated IRQ. If not, you may be able to force conflicting devices to other IRQs by juggling the arrangement of PCI cards in the system. Simply moving a card to a different PCI slot may remove the conflict. If none of these steps results in USB being assigned an unshared IRQ, the next step is to assign IRQs manually. To do so, start Windows in Safe Mode and follow the instructions given in Chapter 1.
A system with severe USB conflicts may display them in the Device Manager operating in Normal Mode. However, just because the Device Manager appears clean in Normal Mode does not mean that no USB problems exist. To view the true situation, restart your system in Safe Mode and run the Device Manager. Delete all instances of USB devices. Then delete the USB root hubs. Finally, delete the USB HCI. Restart your system and allow Windows to reinstall all devices and updated drivers.
Once you have done all of these things, you have established a firm foundation for USB. If you fail to do some or all of these things, you may be able to get USB running successfully, but don't be surprised if you encounter USB problems. Actually, you can do all of these things and still have problems, but at least having taken these steps you've done all you can to ensure reliable USB operation.
If you have a reasonably recent motherboard and have taken the steps described in the preceding section, your USB experience may well be trouble-free. Despite all efforts, however, you may one day be bitten by a USB conflict. If that happens, we suggest as a first step that you review the suggestions in the preceding section. For example, in the interval since you prepared the system, the motherboard maker may have released an updated BIOS, or later firmware versions may now be available for some or all of your USB peripherals. If so, download and install them.
If, having verified each of the preceeding items, you are still having problems with USB, there are several possible courses of action. Recognize, however, that not all USB problems can be resolved merely by tweaking and configuring your current hardware. Some USB problems are resolvable only by replacing hardware?either installing a PCI/USB card, replacing USB peripherals, or both.
Before attempting the following steps, check the Device Manager in Safe Mode. If anything odd appears there?such as two instances of the same peripheral or a peripheral flagged with a warning icon?delete all HID peripherals, USB peripherals, USB root hubs, and USB host controllers, in that order. Restart the system normally and allow it to reinstall all devices found. When a USB peripheral misbehaves, take the following steps:
If the USB peripheral is self-powered (uses a power brick), make sure the power brick is connected to an AC receptacle and that that receptacle has power. Self-powered USB peripherals may be recognized by the system even when they are not connected to AC power, but will be nonfunctional and may also cause other USB peripherals to malfunction.
Hot-plug the peripheral, which is to say disconnect the USB cable from the peripheral while the system and peripheral remain on, and then reconnect the cable. Many USB problems caused by momentary communications glitches are solved by this simple step.
Shut down the computer and turn off the computer and USB hub. Note that neither warm rebooting (Ctrl-Alt-Del etc.) nor even cold rebooting by pressing the reset switch are sufficient. You must actually remove power to the system using the main power switch to reset the USB controller registers. Although we have not encountered the problem ourselves, we have reports that some motherboards that remain powered even when the system is shut off (to support Wake-on-LAN and similar functions) must be physically disconnected from the AC power at the wall receptacle to clear the system entirely. After you have powered down completely, wait a minute or so before turning on the system. Verify that the problem peripheral is now functioning properly. If it is, also verify that your other USB peripherals are recognized and accessible.
If the problem persists, shut off power to the system, disconnect the USB peripheral, and then reconnect it to a different USB port. In order of preference, connect the peripheral to (a) a root hub port on a different USB controller, if your system has multiple USBs, (b) a powered hub port on a different USB controller, (c) a root hub port on the same USB controller, (d) a powered hub port on a different hub on the same USB controller, or (e) a different powered hub port on the same hub.
Try a different cable. Like any type of cable, USB cables vary from well-made to execrable. Those supplied with peripherals may or may not be of good quality. Those you find for a couple of bucks in computer stores are nearly always terrible. Also consider cable length. Although the USB specification allows cables as long as 5 meters, some peripherals function reliably only if you use a shorter cable. For example, some HP devices come with a 2-meter cable and a recommendation that longer cables not be used. We keep a short USB 2.0-certified cable available as a spare for troubleshooting purposes. Surprisingly often, replacing the cable solves the problem.
Connect the problem peripheral to another computer, ideally as the only connected USB device. If it does not function on the second computer, the device itself may be defective. Contact the manufacturer for assistance. If the problem peripheral functions on the second computer, the likely cause of the problem on the first computer is either a conflict between the problem peripheral and other peripherals, or an incompatibility between the problem peripheral and the host controller, which may be undocumented.
To eliminate conflict between peripherals as the cause, disconnect all USB peripherals from the first computer. Restart the computer in Safe Mode and, from the Device Manager, delete all USB devices, then all USB root hubs, and finally all USB host controllers. Shut down the system and turn the power off. Connect only the problem USB device and restart the system. If the problem was caused by a conflict between USB peripherals, the problem peripheral should now be recognized and accessible. You can try adding back the other USB devices until you find the one that conflicts with the device in question. Of course, it is possible to have compound-complex situations such as three- or four-way conflicts, but attempting to resolve those may land you in a mental institution. If you do find that the USB peripheral in question conflicts with another particular USB device, you may be able to use both on your system by installing them on (ideally) different USBs or at least on different root hub ports.
If, despite following these steps the problem peripheral continues to misbehave, the only workable solution may be to replace the peripheral with a comparable competing model or to install a PCI/USB card in your system.
We don't want to give you the impression that USB problems are inevitable, or to discourage you from using USB. If you use only one or a few USB devices, chances are you'll have no problems, particularly if your motherboard and devices are recent and you connect devices to root hub ports or powered hubs. Millions of people use USB successfully?yes, even on old VIA chipsets?but millions more have been discouraged by problems that can sometimes be resolved inexpensively and easily. USB problems can be among the most difficult and frustrating PC problems to fix, simply because there are so many possible causes and combinations of causes. However, if you build a solid foundation for USB and take our advice, the chances are excellent that your experience with USB will be pleasant.