NRZI编码

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

NRZI编码像UART、I2C、SPI、USB这样的串行总线,通信时连续的0、1信号只通过一根数据线发送给接受者。但是因为发送者和接收者运行的频率不一样,信号的同步就是个问题,比如,接受者接收到了一个持续一段时间的低电平,无法得知这究竟是代表了5个0还是1000个0。一个解决办法,就是在传输数据信号的同时,附加一个时钟信号线,用来同步两端的传输,接受者在时钟信号的辅助下对数据信号采样,就可以正确解析出发送的数据了,比如I2C就是这样做的,SDA来传输数据,SCL来传输同步时钟:虽然这样解决了问题,但是却需要附加一根时钟信号线来传输时钟。有没有不需要附加的时钟信号,也能保持两端的同步呢?有的,这就是RZ编码(Return-to-zeroCode),即归零编码。在RZ编码中,正电平代表逻辑1,负电平代表逻辑0,并且,每传输完一位数据,信号返回到零电平,也就是说,信号线上会出现3种电平:正电平、负电平、零电平:从图上就可以看出来,因为每位传输之后都要归零,所以接受者只要在信号归零后采样即可,这样就不在需要单独的时钟信号。实际上,RZ编码就是相当于把时钟信号用归零编码在了数据之内。这样的信号也叫做自同步(self-clocking)信号。这样虽然省了时钟数据线,但是还是有缺点的,因为在RZ编码中,大部分的数据带宽,都用来传输“归零”而浪费掉了。那么,我们去掉这个归零步骤,NRZ编码(Non-return-to-zeroCode)就出现了,和RZ的区别就是NRZ是不需要归零的:这样,浪费的带宽又回来了,不过又丧失宝贵的自同步特性了,貌似我们又回到了原点,其实这个问题也是可以解决的,不过待会儿再讲,先看看什么是NRZI:NRZI编码(Non-Return-to-ZeroInvertedCode)和NRZ的区别就是NRZI用信号的翻转代表一个逻辑,信号保持不变代表另外一个逻辑。USB传输的编码就是NRZI格式,在USB中,电平翻转代表逻辑0,电平不变代表逻辑1:翻转的信号本身可以作为一种通知机制,而且可以看到,即使把NRZI的波形完全翻转,所代表的数据序列还是一样的,对于像USB这种通过差分线来传输的信号尤其方便~现在再回到那个同步问题:的确,NRZ和NRZI都没有自同步特性,但是可以用一些特殊的技巧解决。比如,先发送一个同步头,内容是0101010的方波,让接受者通过这个同步头计算出发送者的频率,然后再用这个频率来采样之后的数据信号,就可以了。在USB中,每个USB数据包,最开始都有个同步域(SYNC),这个域固定为00000001,这个域通过NRZI编码之后,就是一串方波(复习下前面:NRZI遇0翻转遇1不变),接受者可以用这个SYNC域来同步之后的数据信号。此外,因为在USB的NRZI编码下,逻辑0会造成电平翻转,所以接受者在接受数据的同时,根据接收到的翻转信号不断调整同步频率,保证数据传输正确。但是,这样还是会有一个问题,就是虽然接受者可以主动和发送者的频率匹配,但是两者之间总会有误差。假如数据信号是1000个逻辑1,经过USB的NRZI编码之后,就是很长一段没有变化的电平,在这种情况下,即使接受者的频率和发送者相差千分之一,就会造成把数据采样成1001个或者999个1了。USB对这个问题的解决办法,就是强制插0,也就是传说中的bit-stuffing,如果要传输的数据中有7个连续的1,发送前就会在第6个1后面强制插入一个0,让发送的信号强制出现翻转,从而强制接受者进行频率调整。接受者只要删除6个连续1之后的0,就可以恢复原始的数据了。在此也顺便说一下另一种常用的编码方式:曼彻斯特编码曼彻斯特(Manchester)码是一种双相码。用高电平到低电平的转换边表示0,而用低电平到高高电平的转换边表示1。

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功