USB Power Limits for Bus-Powered Devices in Mac OS 9
During the Mac OS 9 era, managing USB power for bus-powered devices required balancing strict hardware limits with an operating system transitioning into modern plug-and-play standards. This article examines the core power management considerations of the time, including the division between low-power and high-power ports, the power limitations of peripheral hubs like the Apple USB Keyboard, system alert behaviors, and the impact of Energy Saver sleep states on device stability.
The 100 mA vs. 500 mA Power Budget
The USB 1.1 standard implemented in Mac OS 9 defines two power categories for host-supplied electricity over a 5-volt bus:
- Low-Power Ports (100 mA): Available on unpowered (bus-powered) USB hubs.
- High-Power Ports (500 mA): Available directly from root ports on the Mac motherboard or from self-powered hubs connected to an external AC adapter.
Mac OS 9 strictly enforces these limits through the device's configuration descriptors. When a device requests more current than a port is rated to supply, the operating system halts enumeration to prevent overdrawing the power supply.
The Apple Keyboard Hub Limitation
The integrated USB hub found on the original Apple USB Keyboard and the later Apple Pro Keyboard represents the most frequent point of failure for bus-powered devices in Mac OS 9.
Because the keyboard itself is bus-powered, it allocates only 100 mA per downstream port. While low-draw devices such as the Apple USB Mouse function properly, high-draw bus-powered accessories—such as early USB flash drives, Zip drives, optical mice, scanners, and audio interfaces—exceed this 100 mA limit. Plugging these devices into the keyboard triggers an alert stating that the device cannot operate because it requires more power than is available.
System Alerts and Overcurrent Handling
Mac OS 9 communicates power status via standard system dialog boxes:
- Insufficient Power Warnings: If a peripheral requests more than the port's available power budget during device enumeration, Mac OS 9 disables the peripheral and alerts the user to move it to a root USB port or a powered hub.
- Overcurrent Protection: If a peripheral experiences an electrical short or draws excessive current beyond its negotiated descriptor, the hardware controller trips an internal fuse or overcurrent circuit, and Mac OS 9 displays a warning alerting the user that a USB device has been deactivated to protect the computer.
Energy Saver and Sleep-State Challenges
Mac OS 9 relies on the classic Energy Saver control panel to manage machine idle states. Power management over the USB subsystem introduced notable stability challenges for bus-powered hardware:
- Selective Suspend Deficiencies: Unlike modern operating systems, Mac OS 9 does not support granular, device-level selective suspend. When the system sleeps, the USB root controller cuts or significantly reduces power to the bus.
- Re-Enumeration Failures: Bus-powered devices that rely on continuous power to maintain internal state often fail to wake cleanly. Upon system wake, these devices frequently crash the Mac OS 9 USB stack, fail to remount, or cause system lockups (Type 11 or Type 2 errors).
- Workarounds: Users and developers frequently had to disable deep system sleep in the Energy Saver control panel to maintain continuous operation for sensitive bus-powered hardware, such as MIDI interfaces or external storage drives.
Driver and Descriptor Configuration
For hardware developers targeting Mac OS 9, USB descriptors required precise implementation:
- The
bMaxPowerField: The device descriptor must declare its maximum power consumption in 2 mA units. In Mac OS 9, rounding errors or claiming 500 mA when operating on a 100 mA budget causes the Mac OS 9 USB Support software (versions 1.4 through 1.5.x) to reject the device immediately. - Dual-Power Fallbacks: Bus-powered devices designed to work on both keyboards and root ports required firmware capable of falling back to a low-power mode (under 100 mA) if full power was denied during enumeration.