USB2.0协议
- USB总线的信号
- 常见信号
- 数据编解码和位填充
- USB设备的检测
- USB设备的挂起
- USB传输
- Packet
- Packet包种类
- Data PID作用
- Transaction
- Transfer
- 控制传输(Control Transfers):
- 中断传输(Interrupt Transfers)
- 同步传输(Isochronous Transfers)
- 大容量数据传输(Bulk Transfers)
- 控制传输的过程
USB总线的信号
使用差分传输,两个数据线D+和D-
差分信号1:D+高电平;D-低电平
差分信号0:D-高电平;D+低电平
常见信号
USB总线的信号:USB总线的信号说经过编码最后呈现的格式
对于全速设备J状态是差分信号1,K状态时差分信号0
常见信号 | 状态介绍 |
---|---|
ldle空闲状态 | J状态,数据发、送前后总线的状态 |
Suspend挂起状态 | 3ms以上的J状态 |
Resume恢复信号 | 20ms的K状态+低速EOP |
Reset信号 | 主机拉低两根信号线(SE0状态)10ms,把设备设置到默认的未配置状态 |
SYNC | 3个KJ状态切换,后跟随2位时间的K状态 |
SOP | 包传输开始标志,从IDLE状态切换到K状态 |
EOP | 包传输开始标志,持续2位时间的SE0信号,后跟随1位时间的J状态 |
数据编解码和位填充
常见信号是由输入信号经过编码得到,下面是具体过程
-1-位填充:输入数据先经过位填充再编码
数据流中每6个连续的“1”,就要插入1个“0”,从而保证编码数据出现电平变化
-2-编码:USB采用NRZI(非归零编码)对发送的数据包进行编码
输入数据0, 编码成“电平翻转”
输入数据1, 编码成“电平不变”
编码出来的序列,高电平:J状态;低电平:K状态
-3-解码:接收方赋值解码NRZI码流,然后识别出填充位,并丢弃它们
原始数据----填充数据----NRZI编码数据的过程
编码出的数据即为USB总线的信号
USB设备的检测
主机通过设备在D+或D-上的上拉电阻检测设备的连接和断开事件,并由此判别设备的速度
D+1.5K上拉:高速、全速设备
D-1.5K上拉:低速设备
主机先把高速设备检测为全速设备,然后再通过总线握手机制来识别高速和全速设备
USB设备的挂起
总线连续3ms没有信号传输时,会进USB挂起模式Suspend
USB周期性地发送SOF信号或Keep Alive信号防止设备挂起
高速信道上,主机按照125us( +/- 65ns )的周期发送SOF
全速信道上,主机按照1ms( +/- 500ns )的周期发送SOF
低速信道上,主机按照1ms的周期发送Keep Alive (End of Packet)
USB传输
传输依赖于Transfer,一个Transfer有多个Transaction,每个Transaction有三个Packet。
Packet
不同的Packet类型由不同的PID决定,包括Token令牌包、Data数据包、Handshake握手包、Special特殊包
Packet包种类
Token令牌包
SOF包:用于高速设备的周期性地发送防止挂起
DATA包
Handshake包
Data PID作用
数据同步:
• RX方PID为期待收到的PID,
• Reset后发送方接受方pid都是data0,
•当收到正确的PID时,RX翻转,并返回ACK,否则不翻转
数据重发:
• RX收到期望收到的PID,发送ACK,但ACK丢失,
• TX处PID不翻转,
• RX收到的PID与RX的PID不一致,
• RX忽略此数据,发送ACK
TX收到ACK翻转PID,此时TX发送的PID与RX期望的PID一样
Transaction
Transaction可以分成三类
Setup transaction:主机用来向设备发送控制命令
DataIN transaction:主机用来从设备读取数据
DataOUT transaction:主机用来向设备发送数据
Transaction的packet组成
Token packet:总是由主机发出
Data packet:包含此次transaction的数据负载
Handshake packet:可选对于Data的应答
Transfer
USB协议定义了四种传输类型控制传输,中断传输,同步传输,大容量数据传输
控制传输(Control Transfers):
非周期性,突发,双向,用于命令和状态的传输。
中断传输(Interrupt Transfers)
周期性,低频率,单向, 允许有限延迟的通信
- 全速端点,中断传输的间隔时间在1ms到255ms之间,
- 低速端点,间隔时间限制在10ms到255ms之间,
- 对于高速端点,间隔为2^(bInterval−1)×125us, bInterval的值在1到16之间
同步传输(Isochronous Transfers)
周期性、单向,整个带宽都将用于保证同步传输的数据完整,不支持出错重传,并且在数据中保存时间戳的信息
大容量数据传输(Bulk Transfers)
非周期性,突发,单向,大容量数据的通信,数据可以占用任意带宽,并容忍延迟
控制传输的过程
控制传输包括建立过程(Setup Stage)–数据过程(Data Stage)–状态过程(Status Stage)
• SETUP过程transaction
主机发送令牌包:SETUP---->主机发送数据包:DATA0---->设备返回握手包:ACK或不应答
• Data过程transaction
主机发送令牌包:DataIN或DataOut---->发送方发送PID为1数据包---->接受方返回握手包
• Status过程的transaction
主机发送令牌包:DataOUT或DataIN(Data相反)---->发送方发送PID为1数据包---->接受方返回握手包