这篇文章,USB 2.0协议支持3种速率设备如何被主机检测插入、区分是哪一种速率和检测拔出。初步了解USB数据是的传输,和数据包格式。
1 基础信息
USB 2.0协议支持3种速率:低速(Low Speed,1.5Mbps)、全速(Full Speed, 12Mbps)、高速(High Speed, 480Mbps)。
USB接口有4条线:5V、D+、D-、GND。
两根信号线实现了空闲(idle)、开始(SOP)、传输数据(Data)、结束(EOP)等功能。
反向不归零编码与位填充:电平遇 0 翻转遇 1 不变,如果6个连续1,需要插入一个0信号
USB实际传输过程中的数据(高速设备):
2 USB插拔与识别
2.1 低速与全速设备的插拔
HUB端口D+、D-有15K的下拉电阻,平时为低电平;
全速/高速设备D+有1.5K的上拉电阻,插入HUB后 D+ 会被拉高,拔出则变低;
低速设备的D-有1.5K的上拉电阻,插入HUB后 D- 会被拉高,拔出则变低;
2.2 高速设备的识别与拔出
至于高速设备,一开始被识别为全速设备,通过高速检测握手信号区分。
高速设备的识别:主机发出SE0,全速设备发出K信号表示支持高速模式,HUB发出一系列KJ信号,表示HUB支持高速模式。这些名词后面会有解释。
高速设备断开:工作在高速状态下,D+的上拉电阻是断开的,所以无法通过D+的电平变化监测是否断开。高速状态下,D+、D-会有45欧的下拉电阻,来消除反射信号,断开设备后,hub发出信号,得到的反射信号无法衰减,视为断开。
3 USB信号
3.1 两根信号线,表示四种状态
差分1:D+大于某个值(HIGH),D-小于某个值(LOW)
差分0:D-大于某个值(HIGH),D+小于某个值(LOW)
单端1:D+和D-小于某个值(LOW
单端0:D+和D-大于某个值
3.2 JK信号
低速与全速/高速设备空闲状态不同(上拉电阻的位置不同),为了统一,有了J、K信号
J:低速设备差分0,高速设备差分1;(idle状态)
K:低速设备差分1,高速设备差分0;
3.3 USB 包初识
(1)SOP:Start Of Packet由idle状态切换到到K状态;
(2)SYNC:
USB没有时钟线,通过SYNC信号,告知对方传输速率
a)低速与全速:
低速或全速的同步域为00000001
SYNC格式为3对KJ外加2个K(SOP中的K状态就是SYNC信号的第1位数据)。
b)高速:15对KJ,外加2个K
高速的同步域为31个0,后面为一个1。
补充:这里KJ信号其实就是一系列方波(遇0翻转)
(3)EOP:End Of Packet
a)低速与全速:
由数据的发送方发出EOP,数据发送方驱动D+、D-这两条线路,先设为SE0状态并维持2位时间,再设置为J状态并维持1位时间,最后D+、D-变为高阻状态,这时由线路的上下拉电阻使得总线进入Idle状态。
b)高速
暂不了解
参考
USB2.0包Packet的组成 - USB中文网 (usbzh.com)