In the USB world, the most basic data transfer is done in packet, but to understand the on-the-wire protocol, there are other things to understand.
Packet
USB Packet types: (Source:
http://www.usbmadesimple.co.uk/ums_3.htm)
| PID
Type |
PID
Name |
PID<3:0>* |
| Token |
OUT |
0001b |
| IN |
1001b |
| SOF |
0101b |
| SETUP |
1101b |
| Data |
DATA0 |
0011b |
| DATA1 |
1011b |
| DATA2 |
0111b |
| MDATA |
1111b |
| Handshake |
ACK |
0010b |
| NAK |
1010b |
| STALL |
1110b |
| NYET |
0110b |
| Special |
PRE |
1100b |
| ERR |
1100b |
| SPLIT |
1000b |
| PING |
0100b |
| Reserved |
0000b |
Transaction:
One transaction has 3 packets: Token + Data + Handshake for a successful transaction. (*). Nak and Stall error condition could happen after Token when no data is available.
There are 3 types of transactions: IN, OUT, SETUP
*: For IN and OUT transactions
used for isochronous transfers, there are only 2 packets; there is no handshake packet.
Transfer:
There are 4 types of transfer:
- Control
- Interrupt
- Bulk
- Isochronous (such as audio data)
HID device only uses Control and Interrupt
Control transfer = 3 transactions: SETUP + IN/OUT DATA + STATUS(IN/OUT transaction)
Other transfers has just one transaction: IN/OUT data.
In general, you want to pay attention to Transfer or Transaction level, not packet level.