Communication
During USB communication data is transmitted as packets. Initially, all packets are sent from the host, via the root hub and possibly more hubs, to devices. Some of those packets direct a device to send some packets in reply.
After the sync field, all packets are made of 8-bit bytes, transmitted least-significant bit first. The first byte is a packet identifier (PID) byte. The PID is actually 4 bits; the byte consists of the 4-bit PID followed by its bitwise complement. This redundancy helps detect errors. (Note also that a PID byte contains at most four consecutive 1 bits, and thus will never need bit-stuffing, even when combined with the final 1 bit in the sync byte. However, trailing 1 bits in the PID may require bit-stuffing within the first few bits of the payload.)
Type | PID value (msb-first) |
Transmitted byte (lsb-first) |
Name | Description |
---|---|---|---|---|
Reserved | 0000 | 0000 1111 | ||
Token | 1000 | 0001 1110 | SPLIT | High-bandwidth (USB 2.0) split transaction |
0100 | 0010 1101 | PING | Check if endpoint can accept data (USB 2.0) | |
Special | 1100 | 0011 1100 | PRE | Low-bandwidth USB preamble |
Handshake | ERR | Split transaction error (USB 2.0) | ||
0010 | 0100 1011 | ACK | Data packet accepted | |
1010 | 0101 1010 | NAK | Data packet not accepted; please retransmit | |
0110 | 0110 1001 | NYET | Data not ready yet (USB 2.0) | |
1110 | 0111 1000 | STALL | Transfer impossible; do error recovery | |
Token | 0001 | 1000 0111 | OUT | Address for host-to-device transfer |
1001 | 1001 0110 | IN | Address for device-to-host transfer | |
0101 | 1010 0101 | SOF | Start of frame marker (sent each ms) | |
1101 | 1011 0100 | SETUP | Address for host-to-device control transfer | |
Data | 0011 | 1100 0011 | DATA0 | Even-numbered data packet |
1011 | 1101 0010 | DATA1 | Odd-numbered data packet | |
0111 | 1110 0001 | DATA2 | Data packet for high-bandwidth isochronous transfer (USB 2.0) | |
1111 | 1111 0000 | MDATA | Data packet for high-bandwidth isochronous transfer (USB 2.0) |
Packets come in three basic types, each with a different format and CRC (cyclic redundancy check):
Read more about this topic: Universal Serial Bus