8.2 USB States
Some of the USB bus states are:
Idle: The bus is in idle state when the pulled-up line is high and the other line is low. This is the state of the lines before and after a packet transmission.
Detached: When no device is connected to the bus, the host sees both lines as low.
Attached: When a device is connected to the bus, the host sees either D+ or D– go to logic high, which means a device has been plugged in.
J state: The same as idle state.
K state: The opposite of J state.
SE0: The single ended zero state, where both lines on the bus are pulled low.
SE1: The single ended one state, where both lines on the bus are high. SE1 is an illegal condition on the bus; it must never be in this state.
Reset: When the host wants to communicate with a device on the bus, it first sends a “reset” condition by pulling low both data lines (SE0 state) for at least 10ms.
EOP: The end of packet state, which is basically an SE0 state for 2 bit times, followed by a J state for 1 bit time.
Keep alive: The state achieved by EOP. Keep alive is sent at least once every millisecond to keep the device from suspending.
Suspend: Used to save power, suspend is implemented by not sending anything to a device for 3ms. A suspended device draws less than 0.5mA from the bus and must recognize reset and resume signals.
Resume: A suspended device is woken up by reversing the polarity of the signal on the data lines for at least 20ms, followed by a low-speed EOP signal.
8.3 USB Bus Communication
USB is a host-centric connectivity system where the host dictates the use of the USB bus. Each device on the bus is assigned a unique USB address, and no slave device can assert a signal on the bus until the host asks for it. When a new USB device is plugged into a bus, the USB host uses address 0 to ask basic information from the device. Then the host assigns it a unique USB address. After the host asks for and receives further information about the device, such as the name of the manufacturer, device capabilities, and product ID, two-way transactions on the bus can begin.
8.3.1 Packets
Data is transmitted on a USB bus in packets. A packet starts with a sync pattern to allow the receiver clock to synchronize with the data. The data bytes of the packet follow, ending with an end of packet signal.
A packet identifier (PID) byte immediately follows the sync field of every USB packet. A PID itself is 4 bits long, and the 4 bits are repeated in a complemented form. There are seventeen different PID values, as shown in Table 8.4. These include one reserved value and one that is used twice, with two different meanings.
Table 8.4: PID values
| PID type | PID name | Bits | Description |
|---|---|---|---|
| Token | OUT | 1110 0001 | Host to device transaction |
| IN | 0110 1001 | Device to host transaction | |
| SOF | 1010 0101 | Start of frame | |
| SETUP | 0010 1101 | Setup command | |
| Data | DATA0 | 1100 0011 | Data packet PID even |
| DATA1 | 0100 1011 | Data packet PID odd | |
| DATA2 | 1000 0111 | Data packet PID high speed | |
| MDATA | 0000 1111 | Data packet PID high speed | |
| Handshake | ACK | 1101 0010 | Receiver accepts packet |
| NAK | 0101 1010 | Receiver does not accept packet | |
| STALL | 0001 1110 | Stalled | |
| NYET | 1001 0110 | No response from receiver | |
| Special | PRE | 0011 1100 | Host preamble |
| ERR | 0011 1100 | Split transaction error | |
| SPLIT | 0111 1000 | High-speed split transaction | |
| PING | 1011 0100 | High-speed flow control | |
| Reserved | 1111 0000 | Reserved |
There are four packet formats, based on which PID is at the start of the packet: token packets, data packets, handshake packets, and special packets.
Figure 8.4 shows the format of a token packet, which is used for OUT, IN, SOF (start of frame), and SETUP. The packet contains a 7-bit address, a 4-bit ENDP (endpoint number), a 5-bit CRC checksum, and an EOP (end of packet).
Figure 8.4: Token packet
A data packet is used for DATA0, DATA1, DATA2, and MDATA data transactions. The packet format is shown in Figure 8.5 and consists of the PID, 0–1024 bytes of data, a 2-byte CRC checksum, and an EOP.