Back
Next
http://www.beyondlogic.org/usbnutshell/usb3.shtml
http://www.usbmadesimple.co.uk/index.html
Frame contains one or more packets :
Packet
8 bit sync - probably 01010101 (low speed)
32 bit sync - high speed - used to sync clocks.
8 bit Packet id (PID) 4 bit low-bit first id and its 4 bit complement.
data appropriate to packet type. Specifies the type of packet (below).
Followed by zero or more bytes of data.
Types :
Token - from root (control from hub)
PID, Address, Endpoint, CRC
PID type :
SOF - start of frame.
IN - poll packet asks device to return certain data.
OUT - announces that data will be sent to device.
SETUP - used for configuration.
PING (USB2) - host asks upstream device if it is willing to participate.
Used to resume transmission after receiving an NYET.
SPLIT (USB2) - with faster speeds, this allows faster transactions between
hubs while still interacting with upstream device at appropriate speed.
Data - bidirectional.
* PID, Data, CRC
PID type : DATA0, DATA1 # low and full speed.
When sent, flagged as a DATA0 or DATA1 packet. Packets are alternated, to
help detect when/if a packet has been lost.
PID type : MDATA # high speed.
USB 2 uses MDATA when sending multiple packets of isochronous data.
It then flags the last packet with DATA0, DATA1, or DATA2.
depending on the number of packets previously sent.
Data being moved - up to 1K for high-speed (8 bytes for low speed).
USB 2 - up to 8KiB.
CRC cyclic redundancy check 16-byte(bit?).
Handshaking - response from service device.
PID type :
ACK - previous data packet correctly received. Or response to PING
indicating data transmission may resume.
NAK - data not being accepted, retry later.
STALL - error condition - re-initialize device(?)
NYET (USB2) - split transaction pause because buffers full - transaction
may continue when conditions change.
ERR (USB2) - split transacting failed.
****************
Host sends SOF packet to initialize a frame.
Host sends one of the address tokens, most often IN or OUT.
Data packet transferred in chosen direction.
Receiving point sends ACK or other appropriate handshake packet.
* Host may send ACK when receiving data from upstream. All other handshakes
generated only by upstream devices.