1、NRZI编码和位填充(Bit Stuffing)
NRZI,Non-Return-to-Zero, Inverted,翻译成中文是翻转不归零码
。不归零
的意思是编码方式相对于归零码(
正电平,负电平,0电平)而言,还是只有两种电平,不用每次编码完都回到0电平。翻转
是指当出现逻辑0
时,电平翻转,因此不需要负电平来表示0。总结一下编码方式:0变1不变
为什么要用NRZI? (1)没有归0步骤,节省了大量的数据带宽;(2)没有负电平,表示起来方便
如何自同步? NRZ编码本身并不带自同步功能,USB在协议中加入了同步头(SYNC),对于每一个USB Packet,都有一个同步域固定为0000_0001,这个域翻译成NRZI编码就是01010100,接收者通过这个同步头可以算出发送者的频率。
为什么需要Bit-Stuffing? SYNC可以解决同步的问题,但是如果发送端一直发1,那由NRZI编码后的电平会一直保持不变,从SYNC计算出来的频率只要有一点点偏差,累积后都会造成较大的误差,所以USB协议中采取了bit stuffing的机制来避免出现长时间的1。简单说,每6个连续的1之后,会强制插入一个0,使得发送信号强制出现翻转,接收方在收到翻转信号时可以调整频率,从而实现时钟同步。
2、ULPI协议
ULPI协议的全称是UTMI+Low Pin Interface。从名字上就可以看出ULPI是UTMI的Low Pin版本。UTMI(USB2.0 Transceiver Macrocell Interface,USB2.0收发器宏单元接口)是一种用于USB controller和USB PHY通信的协议。相对于ULPI,UTMI有更多的控制信号,支持8bit/16bit 数据接口。前者PIN少,后者PIN多,所以如果用ULPI,PHY一般外部另接;用UTMI,PIN多,一般内置。
- UTMI 接口信号
- ULPI 接口信号
参考:
1、https://blog.csdn.net/huangkangying/article/details/103570707?spm=1001.2014.3001.5501