Skip to content
VLSI Mentor

USB · Module 1

The Peripheral-Connectivity Problem

Before a universal peripheral bus, every class of device arrived with its own connector, signalling, host interface, configuration story and driver model — and the cost of that fragmentation landed on the host, the operating system, the peripheral vendor and the user at once. The problem, layer by layer, and the requirements it forces on any architecture meant to replace it.

Before you meet a USB packet, a descriptor or an endpoint, answer the question the whole standard exists to serve: what was actually wrong with how peripherals attached to a computer? The usual answer — there were too many different connectors — is true and almost useless, because a connector is the part of an interface you can see. The expensive fragmentation was behind it.

Picture the attachment surface of a personal computer before a universal peripheral bus existed. A keyboard and a mouse each had a dedicated port. A printer had a different port, shaped for printing. A modem hung off a serial port with framing that had to be agreed in advance. A joystick used a port that doubled as a music interface. A scanner or an external drive frequently arrived with an expansion card in the box, because the machine had no interface it could use. Five classes of device, five unrelated ways of being attached, and no two of them shared a connector, a signalling convention, a discovery mechanism or a driver model.

This chapter builds the model the rest of the curriculum stands on. The goal is not to tour obsolete ports — Chapter 1.2 onward does that properly, one interface at a time. The goal is to see the shape of the problem clearly enough that when USB introduces a host controller, an enumeration sequence, a descriptor set, an endpoint and a hub, none of them looks like an invention to be memorised. Each one is a response to a specific part of the cost established here.

1. One Peripheral Class, One Attachment Stack

Start with the structural fact, because everything else follows from it.

Historically, a peripheral class did not simply need a cable. It needed an entire vertical stack: a connector and pinout, an electrical convention, a wire-level protocol, a piece of host silicon that spoke that protocol, a place in the host's resource map, and software that knew all of the above. The keyboard port was designed for keyboards. The printer port was designed around the mechanics of driving a printer. The serial port was a general-purpose character pipe that assumed both ends had already agreed how characters were framed. None of these was a bad design for its own job. The problem is that there were several of them at once, and they had nothing in common.

A single host connects to five separate and unrelated peripheral interfaces: a serial port carrying a modem, a parallel port carrying a printer, a dedicated keyboard port, a dedicated mouse port, and an expansion card providing an interface for a scanner or external drive. Each interface has its own connector, its own signalling and its own host-side controller, and nothing is shared between them.Hostfive interfaces to buildSerial portframing agreed in advanceParallel portbuilt around printingKeyboard portone device, dedicatedMouse portone device, dedicatedExpansion cardan interface in the boxModemPrinterKeyboardMouseScanner / drive12
Figure 1 — one host, five unrelated attachment stacks; the connector is the least of it.

Read the middle column as the real subject of this chapter. Every block in it is a separate engineering commitment the host had to make, and none of the work done for one block was reusable for the next.

2. Fragmentation Was Never Only the Connector

Take the stack apart. Each layer fragmented independently, and each fragmentation charged a different party.

Physical. Different connectors, different pinouts, different cables, different maximum useful lengths. This is the visible layer, and it is the cheapest one: a user can be told which plug fits which socket, and a shape that only fits one way prevents a whole class of mistake. Connector variety was an irritation. It was not the architectural problem.

Electrical and signalling. Interfaces disagreed about how a bit was represented on the wire, how many wires carried data at once, how the two ends stayed aligned in time, and what the idle line looked like. An interface that sent bits one after another on a single path and an interface that presented several bits side by side, each with its own line, are not variants of one design. They are different designs with different constraints on cable length, cost and noise behaviour.

Protocol and communication model. Some interfaces defined little more than a way to move characters, leaving the meaning of those characters entirely to the two endpoints. Others were built around a specific device's operational model, so the interface itself encoded assumptions about what was attached. A character pipe with no agreed message structure and a port whose control lines were named after printer mechanics do not share a communication model, and software written for one tells you nothing about the other.

System configuration. On the PC in particular, a legacy port was not free-standing: it occupied fixed host resources, and the host had a limited supply of them. Two devices that wanted the same resource could not simply coexist, and in the era before automatic configuration became standard, resolving that could mean choosing settings by hand — on the card, in software, or both. The severity of this varied by platform and by era, and it was not universal; it was, however, common enough on the dominant platform to shape what users expected of installing hardware.

Software. Each interface had its own programming model, so a driver written against one taught you nothing about the next. Worse, at the layer above, there was no standard way for a device to say what it was. A port carried bits; it did not carry identity. Consequently the human, not the machine, was usually the one who determined which driver applied — by knowing what had been plugged in, and installing software to match.

Operational. How a device behaved around attachment, removal and power was interface-specific and frequently unspecified. Several legacy interfaces were designed on the assumption that the peripheral was present when the machine started and stayed there. And there was no general power-delivery contract across the attachment surface: some interfaces supplied a small amount of power to a device they were designed for, others supplied none, so a peripheral of any appetite commonly shipped with its own supply and needed a second place to plug in.

3. The Host Paid for Every Interface It Offered

Now count the cost on the host side, because that is the cost that scales badly.

Supporting a peripheral class meant putting a controller for that interface in the system, giving it a place in the host's resource map, and carrying software that drove it. Every interface added logic, pins, board area and a software stack — and each one served, at most, the devices designed for it. Two serial devices could not share one serial port simply because the port was idle; a printer port could not be pressed into service for a keyboard.

This produces an unpleasant scaling property. If each new peripheral class requires a new host interface, then the host's complexity grows with the variety of peripherals the market invents — a quantity the host designer neither controls nor can predict. Support ten classes and the host carries ten interfaces, most of them idle most of the time, each consuming resources that cannot be recovered when its device is absent.

The comparison worth holding is to on-chip design, where the same argument was settled long ago. Wiring each block to a processor with private signals works for two blocks and collapses for twenty, which is why an SoC fixes one interface and reuses it — exactly the reasoning developed in CPU-to-Peripheral Communication and in Why AXI Exists. The peripheral edge of a system faced the same structural question, and for a long time answered it the other way.

4. Identity and Configuration Were the User's Job

Here is the part that a connector-shaped account of the problem misses completely.

Attaching a device is only the beginning. Before anything useful happens, the system has to know what was attached, how to talk to it, and what resources it may use. In a fragmented attachment surface, none of that was answered by the interface. A port delivered bits. Whether those bits came from a modem or a barcode reader was not something the port could report, because it had no mechanism for the question.

So the knowledge lived outside the machine. The user knew what they had plugged in. The user supplied software to match. The user, on some platforms and in some eras, also arbitrated resource conflicts. That is a workable arrangement exactly once per device and exactly once per machine, and it becomes unworkable as soon as devices are numerous, moved between machines, or attached by someone who does not know what is inside the box.

Note what this implies for any replacement architecture: self-description is not a convenience feature. If a device cannot tell the host what it is, a human must, and every problem of installation follows from that single missing capability.

5. Attachment Was Not an Event the System Expected

Two further properties of the legacy surface belong together, because both concern what happens at the moment of connection.

Hot-plug. Several legacy interfaces were designed around a device that is present at power-on. There was no defined sequence for a device appearing later, no guaranteed electrical behaviour for contacts mating under power, and no software path for “something new is here.” The safe practice — power down, connect, power up — was not superstition; it was the absence of a specification saying otherwise. Behaviour varied by interface and by implementation, which is itself the point: the user could not rely on a rule, because there was no rule.

Power. With no common power contract, a peripheral's energy needs became a packaging and cabling problem. A device that needed more than its interface happened to offer arrived with its own supply, its own cable and its own demand on a wall socket. This is a small cost per device and a large one in aggregate, and it is the reason a desk with six peripherals had a tangle underneath it.

Both properties describe the same missing idea: the architecture had no notion of a device arriving. Attachment was a state assumed at boot, not an event handled at runtime.

6. Expansion Ran Out Before Demand Did

Finally, count the ports. The legacy attachment surface offered a small, fixed number of each kind — typically one keyboard port, one mouse port, one printer port, one or two serial ports. That allocation was decided when the machine was built, by someone guessing what its owner would need.

When demand exceeded the guess, the remedies were all poor. Open the machine and install an expansion card, which requires the machine to be opened, the card to exist, and free resources to be available. Use a mechanical switch box to share one port between two devices, only one of which can be active. Or do without.

The structural failure is that capacity was fixed at manufacture and could not be extended by the user. A system in which adding the fifth device of a kind is qualitatively harder than adding the second has not solved attachment; it has deferred the problem to whoever hits the limit.

7. What a Replacement Would Have to Solve

Now derive, rather than recall. Each requirement below is forced by a specific cost established above — read it as an argument, not a list.

One reusable host interface, not one per class. §3 showed host complexity growing with peripheral variety. The only way to break that coupling is to make the host's interface independent of what is attached, so that supporting a new device class costs no new host interface.

A defined electrical and wire-level agreement. If one interface is to serve many classes, the disagreement documented in §2 has to be settled once: one signalling convention, one framing, one set of rules about what the line means. Devices then differ in what they say, not in how they say it.

Device-provided identity. §4 showed that when a device cannot describe itself, a human must. A replacement therefore needs a mandatory, machine-readable way for a device to state what it is and what it can do — in a format the host can read before it has any device-specific software at all.

Automatic configuration at attach time. Identity is useless if resources are still assigned by hand. The host must be able to detect an arrival, address the new device, read its self-description and bind software to it without user intervention.

Attachment and removal as designed-for events. §5 showed hot-plug was undefined rather than merely difficult. A replacement must specify what happens electrically and in software when a device appears or disappears while the system is running — including a device that is removed mid-operation.

Extensible capacity. §6 showed fixed port counts failing. A replacement needs a way to expand the number of attachment points after manufacture, without adding host interfaces — which means some device whose job is to provide more ports.

One bus shared by unlike traffic. A keyboard sends a few bytes when a human moves; a storage device wants throughput; a microphone wants a steady rate rather than a fast one. If all of them share one interface, the architecture must provide different service models on the same wires, or it merely relocates the fragmentation it set out to remove.

Power delivered by the interface. §5 showed separate supplies proliferating. A defined power contract — with a stated budget and a way to ask for it — removes the second cable for devices whose appetite fits.

Room to grow. None of the above may assume today's device classes. The identity and service mechanisms must be general enough that a class nobody has thought of yet can be attached without changing the host.

The architectural shape the requirements imply: a host with a single reusable interface connects to one standardised peripheral interconnect responsible for attachment detection, device identity, configuration and shared service models, and that interconnect serves many unlike device classes including input devices, printing, storage and classes not yet invented.Hostone interface, reusedOne defined interconnectdetect · identify · configure · shareInput devicestiny, sporadic trafficPrintingbulk, order mattersStoragethroughput mattersA class not yet inventedmust attach unchanged12
Figure 2 — what those requirements add up to: one host interface, many device classes.

Notice that nothing in Figure 2 is specific to USB. It is what the argument produces. Any architecture that took the problem in §§1–6 seriously would have to contain something answering each box.

8. USB as the Architectural Response

USB — the Universal Serial Bus — is the peripheral architecture built to satisfy that list. Introduce it in exactly those terms, because every mechanism you will meet later maps onto a requirement above, and the mapping is the point.

The host owns one interface and one host controller, so peripheral support no longer scales with device variety. Devices attach over a defined electrical and wire-level agreement, so the class of a device changes what it says, not how it says it. When a device is attached, the host detects it electrically and then runs a defined sequence — enumeration — that gives the device an address on the bus and reads its self-description. That self-description is a set of descriptors: structured, machine-readable data stating what the device is, what it can do, and what it needs, in a format the host can parse before it holds any software specific to that device. Because descriptors also declare a device class, a host can often bind a generic class driver rather than a vendor-supplied one.

Communication with a configured device happens through endpoints — the addressable sources and sinks of data inside it — and each endpoint declares which of several transfer types it needs, so a keyboard's few sporadic bytes and a drive's sustained throughput are served by the same bus under different service models. Attachment points are extended by hubs, which provide more ports without adding host interfaces, so capacity is no longer fixed at manufacture. Attachment and removal are specified runtime events rather than boot-time assumptions. And the interface carries a defined power budget that a device can draw against, which removes the separate supply for devices whose appetite fits within it.

It is worth being honest about what this did not do. USB did not make peripherals identical, did not remove device-specific software, and did not make every legacy interface obsolete on arrival — other interfaces continued to exist and to suit other jobs, and the same structural argument played out separately inside the machine, in the shift from shared buses to switched links traced in Evolution of System Interconnects, and at the network edge in Why Ethernet Exists. What USB changed is where the variety lives: below a standardised attachment, discovery and transport layer instead of above the bare metal of a dozen unrelated ports.

9. Why This Matters to a Semiconductor Engineer

This is not background reading, and the reason is a principle worth stating directly.

Standardisation does not make the engineering disappear. It makes the engineering reusable and interoperable. Every requirement in §7 became silicon, firmware or software that somebody designs and verifies:

Host-controller hardware. Something must generate bus activity, manage attached devices, and present a register interface to the operating system. That is a substantial design, and its interface to software is itself standardised so one driver serves many vendors' controllers.

Device-controller hardware. Something inside every peripheral must answer the host: respond during enumeration, implement endpoint buffering, and drive a protocol state machine that the specification — not the product team — defines.

PHY and interface logic. The defined electrical agreement of §7 lands on a real transmitter, receiver, and the logic that detects attachment and recovers timing from the line.

Firmware and descriptors. A device's self-description is data somebody authored, and a malformed descriptor is a bring-up failure that looks, from the outside, like a device that simply does not work.

Drivers and class software. Generic class drivers exist precisely because descriptors made the device's identity machine-readable. Device-specific software did not vanish; it became the exception rather than the rule.

Verification. A standardised protocol is a specification you can write assertions against and a reason protocol verification IP is worth building — the fragmented alternative offered no such leverage.

Debug. Because the bus is standardised, an analyser can decode it, which is what makes a protocol trace an engineering instrument rather than a pile of edges.

The through-line: the complexity in §§1–6 did not evaporate. It was gathered into one architecture, specified once, and then implemented many times by people who could rely on each other's compliance.

10. Common Misconceptions

11. Reason It Through

Work through this before reading the answer.

A system supports five peripheral classes over five unrelated interfaces. A proposal replaces all five connectors with a single connector shape, so that every peripheral plugs into any port. Behind the connector, the five interfaces keep their own signalling, their own discovery behaviour, their own configuration models and their own drivers. Has the peripheral-connectivity problem been solved?

What has improved? Exactly one thing, and it is real: the user can no longer fail to find the right socket. The physical layer of §2 has been unified.

What has not changed? Everything expensive. The host still implements five interfaces, so §3's scaling problem is untouched — a sixth device class still costs a sixth interface. Devices still cannot describe themselves, so §4's identity gap remains and the user still supplies the driver. Configuration is still per-interface. Hot-plug is still undefined. Capacity is still fixed. Nothing about §§3–6 depended on connector shape.

What has got worse? A new failure mode has been created. A connector that physically fits now carries no guarantee that the interface behind it matches the device, so an attachment that the user can see is correct may not work — and the mechanical constraint that used to prevent that mistake has been removed. A uniform connector over non-uniform behaviour is a promise the architecture cannot keep.

What is the lesson? Standardising the visible interface without standardising the contract behind it is not architecture; it is packaging. The cost of fragmentation lives in signalling, identity, configuration, service models and lifecycle — so a genuine solution must unify those, and the shared connector is the consequence of having done so, not a substitute for it.

12. Understanding Check

13. Summary

The peripheral-connectivity problem was not a shortage of good interfaces. It was the absence of a shared one. Each class of peripheral arrived with its own vertical stack — connector, signalling, protocol, host controller, resource footprint, configuration story and driver model — and because nothing was shared between stacks, the work done for one class was worth nothing to the next.

That fragmentation charged four parties at once. The host carried an interface per class, so its complexity scaled with the variety of peripherals the market produced. The operating system carried a driver model per interface and no way to learn a device's identity from the interface itself. The peripheral vendor designed an attachment scheme as well as a product. And the user supplied the identity the architecture could not, arbitrated resource conflicts on some platforms, powered devices the interface would not, and hit a port limit fixed when the machine was built.

Working forward from those costs produces a short list of requirements: one reusable host interface, a settled electrical and wire-level agreement, device-provided identity, automatic configuration on attach, attachment and removal as specified runtime events, extensible capacity, different service models over one transport, a defined power contract, and room for device classes nobody has invented yet. USB is the architecture built to satisfy that list — its host controller, enumeration sequence, descriptors, endpoints, transfer types, hubs and bus power each answer a specific line of it. None of that complexity was eliminated. It was specified once and made reusable, which is a different and more valuable thing.

14. What Comes Next

You now have the problem. Chapter 1.2, Legacy Peripheral Interfaces, walks the pre-USB landscape properly, and Chapters 1.3 to 1.5 take the three interfaces that mattered most on the PC — the serial port, the parallel port, and the dedicated keyboard and mouse ports — one at a time. That detail matters before USB's answer can be judged: a solution is only as convincing as your understanding of what it replaced, and the specific limitations of those interfaces are what Chapter 1.6 measures USB's design goals against.

Browse the full path on the USB tutorials index. For the same “the requirements conflicted, so the architecture changed shape” reasoning applied elsewhere, see Evolution of System Interconnects for the link inside the machine and Why Ethernet Exists for the one leaving it. For what a mature enumeration mechanism looks like on a different bus — the same idea of a host discovering and configuring what is attached — see PCIe Enumeration.

Continue learning

Standards & specifications

Governing standard
USB-IF (Universal Serial Bus Specification)(opens USB Implementers Forum (USB-IF) in a new tab)

Defines the USB bus — its electrical signalling, connectors, packet and transaction model, device framework and the descriptors a device must expose — together with the device-class specifications layered on it. It does not define host-controller register interfaces (xHCI and EHCI are separate documents) nor any operating system's driver architecture.

This page also covers RTL structure, verification approach and debugging technique. Those are engineering practice built on the standard, not requirements the standard itself imposes.

Where this fits

Part of the USB curriculum.