Skip to content
VLSI Mentor

USB · Module 3

The D+ Line

The pair is symmetric as a measurement and asymmetric in its roles. What D+ specifically carries, why a full-speed device announces itself on this conductor and what that makes the idle state, and why the naming implies a fixed polarity that does not exist.

Chapter 3.2 established that the receiver's decision depends on the difference between the conductors. That makes the pair perfectly symmetric as a measurement — subtraction does not care which term you call which.

It is not symmetric in anything else, and this chapter is about the difference. The two conductors have different roles, different responsibilities at attachment, and different consequences when something goes wrong with one of them. This chapter takes D+; Chapter 3.4 takes D-, and the pair of chapters together dismantles the most persistent misconception in USB's physical layer.

1. Two Roles, Not One

D+ does two separate jobs, and keeping them apart is the whole content of this chapter.

As half of the signalling pair, D+ is one of the two conductors the differential receiver subtracts. In this role it is genuinely interchangeable with D-: reverse the two and the receiver still sees a difference, just with the opposite sign. Nothing about the measurement singles out D+.

As a static indicator, D+ is one of the two conductors that a device can bias to announce its presence — and, for a full-speed device, it is the conductor. A full-speed device presents a pull-up resistor to a positive supply on D+. That is a static electrical condition, not signalling: it is present before any communication occurs, and its purpose is to be noticed.

Those two roles are why this chapter exists. The first role is symmetric and the second is not, and almost every confusion about D+ comes from applying an intuition formed in one role to the other.

2. What a Full-Speed Pull-Up Does to the Line

Chapter 3.5 owns the pull-up mechanism properly and Chapter 3.6 owns the host side. What belongs here is the consequence for this conductor.

A downstream port with nothing attached holds both conductors low, so the pair sits in SE0. When a full-speed device attaches, its pull-up on D+ raises that conductor while D- remains held low. The pair is no longer SE0: one conductor is high and the other is low, which Chapter 3.1 established is a signalling condition.

The D plus conductor shown with its two roles. From the device side, a pull-up resistor to a positive supply biases D plus, which is a static condition announcing a full-speed device's presence. From the host side, a pull-down holds the conductor low when nothing is attached. The same conductor also carries one half of the driven differential signal during communication. A differential receiver sees only the driven difference and is insensitive to the static bias; a single-ended receiver sees the conductor's own level and is therefore what makes the bias observable.Device pull-up on D+static — announces full speed (3.5)Host pull-down on D+static — holds low when idle (3.6)The D+ conductorcarries both at onceSingle-ended receiversees the bias — how presence isnoticedDifferential receiversees only the driven difference12
Figure 1 — the same conductor carries a static bias that announces the device and a dynamic contribution to signalling. Only the single-ended receiver can see the first.

Now the consequence that matters. For a full-speed device, that resting condition — D+ high, D- low — is the idle state, and the idle state is named J.

Read that sentence carefully, because it contains a trap. It is entirely correct, it is what almost every USB reference says, and reading it as a definition of J is the mistake Chapter 3.4 exists to correct. What has actually been established is narrower: for a full-speed device, the idle condition happens to be D+ high, and the idle condition is called J. The name J is attached to the idle condition, not to the polarity.

3. Attachment, on This Conductor

Full-speed attachment and idle, viewed on D+ — logical line-state view

7 cycles
A full-speed device attaching, viewed as logical line states. Initially nothing is attached and both conductors are held low by the host pull-downs, so the pair is in SE0. The device is then attached and its pull-up raises D plus while D minus remains low, so the pair moves to the idle state, which for a full-speed device is named J. Signalling then begins and the pair alternates between J and K. The figure is a logical line-state view and shows no voltages, rise times or the settling behaviour of a real attachment.pull-up raises D+ — the device is now visiblepull-up raises D+ — thedevice is now visibledriven signalling: the pair reversesdriven signalling: the pairreversesD+ (s.e.)0011101D- (s.e.)0000010line stateSE0SE0JJJKJmeaningnothing attachednothing attachedidle (attached)idle (attached)idle (attached)signallingsignallingt0t1t2t3t4t5t6
Figure 2 — a full-speed attachment seen on D+: SE0 while nothing is present, then the pull-up raises the conductor and the pair rests in the idle state.

4. Why the Asymmetry Exists at All

It is worth asking why the designers did not keep the pair symmetric and signal speed some other way.

The answer is economy. The interface needed a way for a device to announce two things — that it is present, and how fast it speaks — before any communication is possible. Communication cannot be used to carry that information, because the host does not yet know how to communicate with the device: the signalling rate is one of the things being announced. So the announcement has to be made by a mechanism that works with no protocol at all.

Biasing a conductor is such a mechanism. It requires no clock, no encoding and no agreement — just a resistor — and it is observable the moment the device is connected. And because there are two conductors, the choice of which one to bias can itself carry information. One bit, expressed as a resistor's position, available before anything else works.

That is an elegant piece of design and it is the reason for the asymmetry. It also means the asymmetry is a property of the device's configuration, not of the conductors themselves. D+ is not intrinsically the announcement line; it is the conductor that a full-speed device biases. Which sets up the next chapter exactly.

5. What This Means for Hardware and Verification

For the digital side, the important consequence is a boundary: the static bias is not something RTL observes or controls. Whether a pull-up is presented is a matter of a resistor and, in many devices, a switch controlling whether that resistor is connected — which is a device-level and often analog concern. What the digital domain receives is the consequence, as a line-state indication. RTL that tries to model resistors has crossed a boundary it should not.

A device controlling when its pull-up is presented is a real and important capability, since it is how a device can make itself appear to detach and re-attach — but the mechanism belongs to Chapter 3.5 and its uses to later modules.

For verification, D+'s dual role creates a stimulus dimension that is easy to miss. An environment that models only driven signalling exercises the conductor in one of its two roles. The static conditions — nothing attached, a pull-up presented, a pull-up removed while the bus is otherwise active — are the other role, and they are what the presence and speed machinery is built on. A device model that is always simply there never exercises attachment at all.

And for debug, the two roles fail differently and distinguishably. A fault in the static role prevents the device from ever being noticed: the port stays at SE0 and nothing further happens, which is a clean and early symptom. A fault in the dynamic role lets the device be noticed and then communicate badly. Whether the port ever left SE0 is therefore among the most informative single observations available, because it separates not noticed from noticed and broken — two problems with entirely different causes.

6. Common Misconceptions

7. Reason It Through

A newly built full-speed device is attached to a host. Nothing happens: the host never reports an attachment, and a scope on the port shows both conductors remain low indefinitely.

What has been established by the observation? That the port never left SE0 — which per §5 separates not noticed from noticed and broken, and places this firmly in the first category. Everything downstream of detection, including every line of the device's digital logic, is irrelevant so far because none of it has been given a reason to run.

What conditions produce a permanent SE0 on an attached port? The host's pull-downs are holding both conductors low, which is their job when nothing is presenting a bias. So the question is why no bias is present. Either the device is not presenting its pull-up — absent, misplaced, connected to a supply that is not up, or switched off by a device that controls when it presents — or the connection itself is not made on that conductor, or the device has no power to bias with.

Why is the device's digital design not a candidate? Because nothing has asked it to do anything. The host has not begun communicating, and it has not begun because it has not noticed a device. A controller that is entirely broken and one that is perfect look identical from here.

What single measurement would discriminate fastest? Whether the device is presenting the pull-up at all — measured at the device end rather than the host end, so that a cable or connector fault is separated from a device fault. If the bias is present at the device and absent at the host, the problem is between them; if it is absent at both, the problem is the device's biasing arrangement or its power.

The general lesson. The first question in a physical-layer bring-up is not what the device is doing but whether it was ever noticed, because the answer partitions the entire problem space and is cheap to obtain.

8. Understanding Check

9. Summary

The pair is symmetric as a measurement — subtraction does not care which conductor is which — and asymmetric in every other respect.

D+ carries two kinds of information at once. As half of the signalling pair it contributes to the difference the receiver decides on, and in that role it is interchangeable with D-. As a static indicator it is the conductor a full-speed device biases with a pull-up, which is not signalling: it is an electrical condition present before any communication, invisible to a differential receiver and observable only single-endedly.

The static mechanism exists because a device must announce presence and speed before communication is possible, since the signalling rate is among the things being announced. A resistor needs no clock, no encoding and no agreement — and because there are two conductors, the choice of which one to bias carries a bit of information by itself.

For a full-speed device the resting condition is D+ high with D- low, that condition is the idle state, and the idle state is named J. That sentence is correct and is routinely over-read: the name is attached to the idle condition, not to the polarity, and the asymmetry is a property of the device's configuration rather than of the conductors.

Practically: RTL neither observes nor controls the bias and receives only its consequence; verification must cover the static conditions, not only driven signalling; and whether the port ever left SE0 is among the most informative single observations in bring-up, because it separates never noticed from noticed and broken.

10. What Comes Next

Everything in this chapter was qualified with for a full-speed device, repeatedly and deliberately.

Chapter 3.4 removes the qualification and finds that the answers change. A low-speed device biases the other conductor, which means its idle condition is the opposite polarity — and since idle is J in both cases, J is a different physical polarity at low speed than at full speed. The name is the same; the voltages are reversed.

That is the fact this module has been building toward, and it is why every earlier chapter refused to define J as a voltage pattern. It also has a direct consequence for RTL: any logic that decides J or K must be told what speed it is operating at, and a decoder that hard-codes a polarity is correct for exactly half the devices it will ever meet.

Browse the full path on the USB tutorials index.

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.