USB通信的层次结构
Frame
(帧): 从时间的维度看,USB通信是由一系列的Frame(帧)组成的Transaction
(事务): 每一个Frame(帧)又可以分成不同的Transaction, 具体的Transaction类型为以下3种:IN/Read/Upstream Transaction
输入(Host)事务OUT/Write/Downstream Transaction
输出(Host)事务Control Transaction
控制事务Packet
每一次Transaction又由不同的Packets所组成Token Packet
Data Packet
Handshake Packet
Special Packet
USB Transactions (USB 事务)
USB Transactions主要由四种Packet组成, Token Packet
, Data Packet
,Handshake Packet
和Special Packet
。
通常的一次Transaction由3个Packets组成:Tocken->Data->Handshake
Packet (包)
通常一个Packet由5个部分组成。
- PID: Packet ID
- ADDR: Device Address
- EP: Endpoint Number
- Payload DATA
- CRC: 5/16 bits CRC
Token Packets
Token Packets
主要分四种:IN, OUT, SETUP, SOF
DATA Packets
Data Packets
主要由三部分组成:Packet ID(DATA1/DATA0, toggle), Payload data, CRC16。
Handshake Packets
Handshake Packets
主要有4种:
- ACK: 返回成功
- NAK: Device忙,或者没有什么需要执行。
- STALL: Device出错
- NYET: Host only, Not ready.
Special Packets
- PRE: 由host向hubs发送,指示下一个packet是low speed
- SPLIT: Host only, split transaction
- ERR: Host only, 由hub向host发送,指示在一次split transaction中出错
- PING: Host only, check status
IN/Read/Upstream Transaction
IN Transaction主要用于Device向Host发送数据。
- Host 向 Deivce发送一个IN Tocken Packet
- Device如果忙,则回复NAK Packet, Host在收到NAK Pakcet之后则持续向Device发送IN Tocken Packet。
- 当Device准备好时,回复Data Packet, Host在收到Data packet之后回复一个ACK handshake。
OUT/Write/Downstream Transactions
OUT Transaction主要用于Host向Device发送数据。
- Host向Deivce发送一个OUT Tocken Packet和一个DATA Packet。
- Device忙,则回NAK, Host则会复发OUT和DATA
- Device在成功收到数据后,回ACK handshake packet。
Control Transactions
Control Transaction最多由3个Stage组成, Setup stage, Data stage, Status stage。其中Data stage不是必需的,有的control transaction没有data stage。
- Setup Stage
Setup stage中的setup packet只会出现在control transaction中, device必须回ACK, 不能回NAK。
- Data Stage
Data Stage可以有若干的Data transaction。这个stage只有在host和device需要data传输时才会存在,通常setup stage的payload可以cover, 这个时候就不需要data stage.
- Status Stage
以下是control read transaction和control write tranasaction分别对应的status stage。