Pakete sind die grundlegenden Elemente der USB-Kommunikation. Jedes Paket beginnt mit einem Synchronisationsfeld, gefolgt vom Packet Identifier (PID). Je nach Pakettyp folgen dem PID entweder keine weiteren Felder oder andere Felder. Das Feld Paketende beendet das Paket.
Ausgehend vom inaktiven Zustand „J“ beginnt ein Paket für Low-Speedund Full-Speed-USB mit einem 8-bit- Synchronisationsfeld (SYNC). Das SYNC-Feld besteht aus drei „KJ“-Paaren, gefolgt von zwei Mal „K“. Das SYNC-Feld für High-Speed-USB besteht aus 15 „KJ“-Paaren, gefolgt von zwei Mal „K“. Das sich wiederholende SYNC-Feld kann durch Hubs auf 5 „KJ“-Paare, gefolgt von zwei Mal „K“ verkleinert werden.
Das zweite Byte enthält den PID und besteht aus einem 4-bit-PID und seinem zugehörigen 4-bit-Prüf-PID. Stimmen der erste 4-bit-PID und der zugehörige 4-bit-Prüf-PID nicht überein, so liegt ein PID-Verschlüsselungsfehler vor. Das niedrigstwertige Bit wird zuerst und das höchstwertige Bit zuletzt in das Bussystem eingespeist. Der 4-bit-PID-Wert codiert 17 verschiedene Pakettypen:
PID-Typ | PID-Name | PID |
---|---|---|
Token |
OUT IN SOF SETUP |
0001 1001 0101 1101 |
Daten |
DATA0 DATA1 DATA2 MDATA |
0011 1011 0111 1111 |
Handshake |
ACK NAK STALL NYET |
0010 1010 1110 0110 |
Spezial |
PRE ERR SPLIT PING Reserviert |
1100 1100 1000 0100 0000 |
Tabelle 3. Liste der USB-Pakettypen
Zu beachten ist, dass die Codierungen für die Pakettypen PRE und ERR identisch sind. Die Pakettypgruppen sind Token, Daten, Handshake und Spezial. Das Feld Paketende (EOP) ist 3 bit lang. Das EOP-Feld beginnt mit zwei SE0-Bits und endet mit einem „J“-Bit. Handshake-Pakete wie „Datenpaket akzeptiert“ (ACK) und „Datenpaket nicht akzeptiert“ (NAK) bestehen aus SYNC-Byte, PID-Byte und EOP. Vom Host gesendete Token-Pakete bestehen aus je einem SYNC- und PIDByte, gefolgt von zwei Bytes, die aus einer 11-bit-Adresse und der 5 bit langen zyklischen Redundanzprüfung (CRC) bestehen. Die 11-bit-Adresse der Token OUT, IN und SETUP ist in eine 7-bit-Geräteadresse und eine 4-bit-Endpunktidentifizierung unterteilt.
Die Adresse „Null“ ist eine spezielle Adresse und wird von einem Gerät verwendet, dem zu Beginn des Enumerationsprozesses keine Adresse zugewiesen wurde. Im späteren Verlauf der Enumeration weist der Host dem Gerät eine Adresse zu, die „ungleich Null“ ist.
Alle Geräte verfügen über einen Null-Endpunkt, der der Steuerung und Statusüberwachung der Geräte dient. Andere Geräte-Endpunkte dienen als Datenquellen und/oder -senken. Der Host sendet ein OUT-Token an ein Gerät, gefolgt von einem Datenpaket. Der Host sendet ein IN-Token an ein Gerät und erwartet den Empfang eines Daten- oder Handshake-Pakets, z.B. ein NAK, vom Gerät.
Datenpakete enthalten ein PID-Byte, Datenbytes und 16-bit-CRC. DATA0- und DATA1-Pakete verfügen über eine 1-bit-Sequenznummer, die beim Stoppen und Warten auf die sich wiederholende Handshake-Anforderung verwendet wird. DATA0- und DATA1-Pakete wechseln sich bei fehlerfreier Übertragung ab. Tritt ein Übertragungsfehler auf, werden die Datenpakete mit identischer Sequenznummer zurückgesandt. Eine fehlerfreie Datentransaktion bedeutet, dass der Host ein DATA0-Paket an das Gerät sendet und das Gerät mit einem Handshake-ACK-Paket antwortet. Anschließend sendet der Host ein DATA1-Paket. Empfängt der Host jedoch kein Handshake-ACK-Paket, sondern ein NAK-Paket vom Gerät, antwortet er mit einem DATA0-Paket. Hat das Gerät ein ACK-Paket gesendet und empfängt das Datenpaket mit identischer Sequenznummer, bestätigt das Gerät den Empfang des Datenpakets, ignoriert jedoch die doppelt vorhandenen Daten.
Das Token-Paket „Start of Frame“ (SOF) wird zum Synchronisieren isochroner und abgefragter Datenflüsse verwendet. Die 11-bit-Frame-Nummer wird mit jedem nachfolgenden SOF um 1 erhöht.