USB协议分类
USB1.1 : 支持12Mbps(全速传输)和1.5Mbps(低速传输)
USB2.0: 兼容1.1,并增加了480Mbps(高速传输)
USB3.0:兼容2.0,并增加了5Gbps(超速传输)
USB2.0总线结构
USB2网络采用阶梯式星形结构,一个USB网络中只能有一个主机,USB中所有的数据传输都由主机发起。主机内设置了一根集线器(HUB),提供了主机上的初始附属点。每个设备都被分配了一个唯一标识的地址,地址范围0~127(因为USB数据包的地址数据仅有8位)。
Note:集线器(HUB)也算在一个地址。
检测设备连接和速度
USB2.0仅有4根线,D+与D-的差分双绞线、VCC和GND。
引脚编号 | 信号名称 | 缆线颜色 |
1 | VCC | 红 |
2 | Data-(D-) | 白 |
3 | Data+(D+) | 绿 |
4 | GND | 黑 |
D+与D-共有四种状态:
Data J State : D+ = 1, D- = 0;
Data K State: D+ = 0, D- =1;
SE0: D+ = D- = 0;
SE1: D+ = D- = 1;
USB主机的D+与D-端都下拉了15K电阻;
对于低速设备,在D-端口上拉1.5K电阻至VCC,空闲状态【D+,D-】显示为01(J状态);
对于全速设备,在D+端口上拉1.5K电阻至VCC,空闲状态【D+,D-】显示为10(K状态);
NRZI-I(No Return Zero-Inverse)非归零反相编码
USB所需要传输的数据经过非归反相零编码,该编码方式只有正负电平之分,没有零电平;
使用非归零编码不但可以保证数据传输的完整性,而且不要求传输过程有独立的时钟
遇0翻转,遇1保持
例如:0001对应的非归零反相编码为0100
11011对应的非归零反相编码为11000
每传递6个1,需要强制插入一个0
例如:1111110 (需要发送7bit)
对应的非归零反相编码为 111111 0 1 (实际发送的8bit)
数据采样(鉴相)
USB全速传输的速度为12Mbps,而Phy的时钟可能与该速度部匹配,例如,Phy的时钟为48M,也就意味着每4个时钟,USB的数据才传输一拍,需要确定哪一拍的时钟(时钟序列)进行采样,保证采样的正确性。
在每个数据发送时,会有一个SYNC(同步码,00000001),在该过程中,进行鉴相,确定采样的序列号
毛刺滤除
数据传输过程中存在着毛刺,如果不将其过滤会严重影响数据的正确性,滤除毛刺的方式一般有两种:1.模拟电路的方式(原理类似按键消抖) 2.模拟电路的方式(使用寄存器打拍处理) 本文主要介绍数字电路的处理方式
毛刺有向上的毛刺与向下的毛刺
对于高电平而言,需要滤除向下的毛刺,向上的毛刺不会影响数据的判断;
对于低电平而言,需要滤除向上的毛刺,向下的毛刺不会影响数据的判断;
以下图为例,介绍数字电路的处理方式,标记的位置为出现毛刺的位置
滤除高电平中向上的毛刺:
使用寄存器打一拍(向右移动一个周期时钟),并与原信号进行或运算,具体图示如下:
查看波形,可以看出,高电平的毛刺被滤除,需要注意的是,这种方式会使得高电平延长一个周期
滤除低电平中向下的毛刺
打使用寄存器打一拍(向右移动一个时钟周期,并于原信号进行与运算,具体图示如下:
查看波形,可以看出,低电平的毛刺被滤除,需要注意的是,这种方式会使得低电平缩短一个周期
因此,需要将二者级联(不需要考虑先后顺序),能够获得完整的滤波电路,伪代码示意如下:
reg a,b,b1,c;
//高电平毛刺滤除
a <= signal;
b = a || signal;
//低电平毛刺滤除
b1 <= b;
c = b1 && b;