zoukankan      html  css  js  c++  java
  • USB 之传输编码格式 NRZI 介绍

    • 记录NRZI (Non-Return-to-Zero Inerted code) 非归零翻转编码,之前,我先稍微记录一下他的前身。

    • RZ 编码(Return- to - zero coding)

        RZ 编码,简单的来说,就是在每一位普通的编码后面加了一个零电平。所以叫做归零编码,正电平代表1,后面再接一个0电平,告诉接收器该同步了,负电平代表0,然后又接一个0电平。
         如下图所示
    
    ![](http://images2017.cnblogs.com/blog/991711/201708/991711-20170816190305553-401776600.png)
    
        可以看到,每一位后面都接了一位0电平,所以接收器在接收到 0 以后采样即可,这样就不用单独的时钟信号,实际上,RZ编码就相当于把时钟信号用 0 编码在数据之内,这样的信号也叫自同步(self-clocking)信号。
        这样的做法虽然在物理上少了一根时钟线,但是在带宽上确有一大部分都用在 归零 上面了。
    
    • 第二种演变,去掉归零 NRZ (Non - Return - to - Zero - code)编码,就是讲 RZ 编码的归零去掉

        这样做虽然我们带宽不浪费了,但是我们的时钟线的同步信号又要另外给。
    
    • 第三种演变,NRZI(Non - Return - to - Zero - Inverted - code) 非归零翻转编码

        和NRZ 编码不同的是,NRZI 编码利用的电平的翻转来代表一个逻辑,当前电平相对于前一个电平不变代表1,当前电平相对于前一个电平相反代表0
        USB 的传输就是用的 NRZI 编码格式,再USB 中,电平翻转代表逻辑0,电平不变代表逻辑1
    
        如下图所示:
    
    ![](http://images2017.cnblogs.com/blog/991711/201708/991711-20170816191550568-496519174.png)
    
    • 数据同步问题

        再回到同步的问题。
        NRZ 和 NRZI 都没有同步的特性,但是,可以用一些比较特殊的技巧来解决,比如,先发送一个同步头,内容是0101010, 让接受着通过这个同步头来计算发出的频率,然后再用这个频率去接受之后的数据信号。
    
        再USB 中,每一个USB的数据包,最开始的时候都有一个同步域,这个域定义为 0000 0001,这个域通过 NRZI 编码后,就是一个正负正负的方波,接收者可以通过这个方波计算频率,然后同步后面的数据
    
        此外,因为在USB的NRZI编码下,逻辑0会造成电平翻转,所以接受者在接收数据时,根据接收的翻转信号调整频率,保证数据传输正确。
    
        但是,这样还会有一个问题,然后接收者可以主动和发送者之间频率匹配,但是两者之间总会有误差,假如数据时1000个逻辑1,经过 NRZI 编码后,很长时间都是同一个电平,这种情况下,即使接收者和发送者之间的频率相差千分之一,就是造成采样 999 个1或者是1001 个1.
    
        USB 对这种问题的解决方法就是强制插一个0, 也就是传说中的 bit-stuffing,如果输出的数据中有7个连续的1,发送前就会在第6个1后面强制插入一个0,就让发送的信号强制出现翻转,从而强制接受者调整频率,接受者只要删除6个1之后的那个0,就可以恢复原有的数据。
    
  • 相关阅读:
    软件架构设计模式简述
    [翻译]docker生态圈Mindmap
    完美解决Invalid layout of java.lang.String at value问题的方法
    用开源项目JazzyViewPager实现ViewPager切换动画
    用开源项目RangBar来实现有范围的SeekBar
    开源项目MultiChoiceAdapter详解(六)——GridView和MultiChoiceBaseAdapter配合使用
    开源项目MultiChoiceAdapter详解(五)——可扩展的MultiChoiceBaseAdapter
    开源项目MultiChoiceAdapter详解(四)——MultiChoiceBaseAdapter的使用
    开源项目MultiChoiceAdapter详解(三)——MulitChoiceNormalArrayAdapter的使用
    开源项目MultiChoiceAdapter详解(二)——MultiChoiceArrayAdapter的使用
  • 原文地址:https://www.cnblogs.com/chenfulin5/p/7375316.html
Copyright © 2011-2022 走看看