USB is the Universal Serial Bus -- an interface added to PCs in the late 1990s to provide a simple, moderate speed, interface to low data rate peripherals such as modems, keyboards, printers, mice, scanners, digital cameras, etc. USB is used by PCs, Macs, and other computing devices. USB1.0 provides communications at 1.5Mbit/s with unshielded wiring or 12Mbit/s with shielded wiring. USB2.0 was released in 2002 allows an additional data rate of 480Mbit/sec. The bandwidth is shared between devices. The actual bandwidth available to any given device will be less -- at times possibly much less -- than the advertised bandwidth, depending on the number and configuration of USB devices attached.
USB controllers are usually integrated onto the motherboard, but PCI card installable controllers/ports are available. At the PC, USB ports use a four pin (Type A) connector vaguely similar to a wide RJ-11 telephone connector. A different type of connector (Type B) is used at devices if the cable is not permanently attached. Although the PCI Spec did not permit it, cables with two type A connectors are available as are "mini-type B" form factor connectors. USB controllers are always Plug and Play devices. Although they may be able to share an IRQ when the PC is in protected mode, the USB controllers require a unique IRQ if they are used to support Windows real/safe mode use of USB keyboards, mice, etc. USB devices are identified dynamically and are assigned a unique number (address) 1-127 as they are identified.
The physical architecture consists of a controller in the PC, one or more (often two or four) ports at the PC; (a) 4 wire cables(s) to either devices or hubs that split signals. USB hubs are active devices, not simple passive repeaters -- more like ethernet switches than ethernet hubs. If hubs are used they can, in principle, be daisy chained or treed as deeply as desired up to a limit of 7 levels including the port at the PC and the eventual device. There is a maximum limit of 127 devices. USB devices may have their own power supply, but low powered devices can obtain power current at 5v from the bus. Powered (termed "self-powered") hubs can supply 500ma to each port. Passive hubs deliver 100ma to each port. Passive hubs should (must in spec-speak) be connected to an active port, not another passive hub. Connecting passive devices that obtain all their power from the port they are connected to to a passive hub can be iffy since there is no guaranteed connector, flashing light, or other indication that power availability requirements are being violated. USB cables are limited to 5 meters (about 16 feet), but amplified cables purportedly capable of supporting much longer spans without intermediate hubs are available.
Identified problems with USB include incompatibilities between USB host controller software and drivers; incompatibilities between USB controllers and devices; Inability of USB ports to deliver enough power for bus powered devices in some (illegal?) configurations; wiring/plug issues; and blocked/delayed interrupts if a shared IRQ is used. Expanding on these issues:
There are two kinds of USB controller hardware. Intel chipsets support the Universal Host Controller Interface (UHCI). Most VIA chipsets support the Open Host Controller Interface (OHCI). The proper interface driver for the controller must be installed. (USB 2.0 will replace the UHCI with Enhanced Host Controller Interface (EHCI).
On the PC, USB1.0 is supported by Linux 2.2.7 and Windows 95 OSR2 and later. Support for most devices in Windows 95 OSR2 is problematic. Windows 98 or later are recommended.
In both Linux and Windows, the software architecture for USB support consists of three layers. At the top (closest to Applications software) are device specific drivers. Below them is a 'USB Host Controller' driver that deals with global USB issues. Below that is a 'USB Root Hub' controller that deals with the details of communicating with the individual devices on each port.
Some general information about USB devices and drivers can be gleaned from the ASCII C:\WINDOWS\INF\USB.INF file on Windows PCs. (The INF directory is hidden). Any specific device may come with its own INF file on floppy disk or CD.
Linux Architecture -- A 2.2.7 or later kernel is required. Linux includes a layer of device drivers, one per attached USB device. Below them is a core USB controller ("host controller"). Below that are individual drivers for each USB port on the machine ("root hub"). Thus, for example, a USB modem would have a USB Modem driver that uses a USB core to call a driver for a specific USB controller. Depending on the chipset, OHCI or UHCI drivers will be required at the controller level. If modules are to be used, usbcore.o and one of usb-uhci.o, uhci.o or usb-ohci.o must be loaded. Device specific modules like scanner.o or acm.o may also be needed.
USB devices in Linux are identified as /dev/usb/deviceID where deviceID is something like ttyACM0 (First Abstract Control Model modem). Although it is not required to use a USB device, Linux also has a provision for a "USB Filesystem" This is not a filesystem, it's a set of simulated text files that provide status information on USB components. It is usually mounted as /proc/bus/usb. /proc is a directory full of simulated text files providing status on many Linux components.
Windows Architecture: Windows uses a three level architecture similar to Linux although it is often referred to as a two level architecture (The specific device driver layer is ignored). A specific device driver mediates between the USB driver and the using application. The USB core is called a 'Host Controller' and generally will require a driver called OPENHCI.SYS or UHCD.SYS. The specific port level driver is called a "Root Hub". The driver is USBHUB.SYS which replaced the older USBD.SYS. The installation script for USB is WINDOWS\INF\USB.INF. Manufacturers may provide their own drivers.
Microsoft first provided USB1.0 support in Windows 95 OSR2, but it rarely worked. It is generally felt that Windows 98/Windows 2000 are needed. The initial Windows XP release does not include USB2.0 support. Patches were promised in 1Q2002 to Windows XP and 2000 to provide USB2.0 support. Presumably they were eventually delivered.
Return To Index Copyright 1994-2002 by Donald Kenney.