热门文章
大家好!我是张飞实战电子黄忠老师!今天给大家分享USB的NRZI编码。
标准的USB连接线使用4芯电缆:5V电源线、差分数据线D-、差分数据线D+、以及GND(USB协议规定,设备在未配置前,可以从Vbus上最多获取100mA的电流,在配置之后,最多可以从Vbus上获取500mA的电流)。
在USB OTG中,又增加了一种MINI USB接头,使用的是5根线,比标准的USB多了一条身份识别(ID)线,USB使用的是差分传输模式,因而有2条数据线,分别是D+和D-。在USB的低速和全速模式中,采用的是电压传输模式;而在高速模式下,则是用电流传输模式。
USB2.0支持3中传输模式,低速模式(1.5Mb/s)、全速模式(12Mb/s)、高速模式(480Mb/s)、传输速度是指总线上每秒传输的位数,实际的数据速率要比这个速度低一些,因为还有很多的协议开销。
USB使用的是NRZI编编码方式,NRZI编码是一种映射一个二进制信号的方法,以便通过USB线缆传输该信号,在该编码方案中,当数据为0时,电平翻转,数据为1时,电平不翻转。如下图所示。顶部是将要通过 USB 传送的数据。底部是编码的 NRZI 数据。
为了防止出现长时间电平不变化(这样不利于时钟信号的提取),在发送数据前要经过位填充处理。通过在 6 个连续的逻辑 1 后面插入一个逻辑 0 可以实现位填充。位填充是为了通过保持锁相环(PLL)对 USB 硬件进行同步化。如果该数据内有太多的逻辑 1,那么 NRZI 编码流中将没有足够用于实现同步化的转换。USB 硬件上的接收器会自动检测额外位,并忽略它。该额外位填充是引起 USB 上的额外开销的原因。下图显示的是一个带有位填充的NRZI 数据的示例。请注意,“Data to Send”(将要发送的数据)流为 8 个逻辑 1。在该编码数据中,在第六个逻辑1 后面插入了一个逻辑 0。这样,第七和第八个逻辑 1 将位于逻辑 0 后
经过位填充后的数据,由串行接口引擎SIE将数据串行化和NRZI编码后,发送到USB的差分数据线上。在接收端,刚好是一个相反的过程。接收端采样数据线,由SIE将数据并行化(反串行化),然后去掉条重围(反位填充),恢复处原来的数据。
通常我们使用现成的USB芯片,如位填充、串行化、反串行化、CRC校验等处理过程,芯片内部的硬件已经帮我们做好了,因此可以不用关心这些细节。但是往往知道这些细节,在处理问题的时候,非常有用。你会了吗?
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表乌云踏雪网立场。
文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。