Search code examples
usbhardware

Why is not USB interrupt-driven?


What's the rationale behind making USB a polling mechanism rather than interrupt-driven? The answers I can come up with some reasoning are:

  • Leave control of processing efficiency and granularity to OS, rather than the device itself.
  • Prevent "interrupt storms" by faulty devices.

Some explanations on the net that I found say that it's mostly because of the nature of USB devices. They are mostly microcontroller-based systems which cannot queue larger transfers therefore require short interrupt intervals and such short interrupt intervals may not be the most efficient. Is that true?

Could there be other reasons?


Solution

  • The overarching premise of the development of USB was, "cheap chips". This was done, through the use of polling, which reduces the need for a higher arbitration protocol.

    Firewire, which did allow for interrupts from the devices and even DMA, was much more expensive. So USB won in the low-cost field, and firewire in low-latency/low-overhead/... field. Due to history USB more or less won.