USB 之传输编码格式 NRZI 介绍
记录NRZI (Non-Return-to-Zero Inerted code) 非归零翻转编码,之前,我先稍微记录一下他的前身。
RZ 编码(Return- to - zero coding)
RZ 编码,简单的来说,就是在每一位普通的编码后面加了一个零电平。所以叫做归零编码,正电平代表1,后面再接一个0电平,告诉接收器该同步了,负电平代表0,然后又接一个0电平。
如下图所示

可以看到,每一位后面都接了一位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
如下图所示:

数据同步问题
再回到同步的问题。
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,就可以恢复原有的数据。
USB 之传输编码格式 NRZI 介绍的更多相关文章
- Python+Appium自动化测试(9)-自动选择USB用于传输文件(不依赖appium对手机页面元素进行定位)
一,问题 app自动化测试使用Android真机连接电脑时,通常会遇到两种情况: 1.测试机连接电脑会弹窗提示USB选项,选择USB用于"传输文件",有些手机不支持设置默认USB选 ...
- Linux单设备多路USB串口的实现方法介绍
某设备需要提供多路USB串口的功能给主机端使用,比如一路用作业务1通信功能,一路用作业务2通信功能,一路用作debug抓log用途,诸如此类.如下图所示. 要实现上述设备功能,可以参考如下步骤. 1) ...
- USB系列之七:ASPI介绍及命令测试
在以前的一篇博文<关于构建DOS下编程平台的总结>中曾经介绍了一种在DOS下驱动U盘的方法,我们大致回顾一下.在config.sys中加入两个驱动程序,就可以驱动U盘:device = a ...
- linux下usb驱动接口中端点介绍
端点 USB 通讯的最基本形式是通过一个称为端点的东西.一个USB端点只能向一个方向传输数据(从主机到设备(称为输出端点)或者从设备到主机(称为输入端点)).端点可被看作一个单向的管道. 一个 USB ...
- USB interrupt传输和isochronous传输的区别
一直没理解USB的iso传输和interrupt传输的区别. 后来仔细看了下USB2.0 SPEC后才明白. interrupt传输和iso传输,都是等时的传输,也就是某个时间间隔发送一次. 区别在于 ...
- usb驱动开发篇简易介绍
我这里重点的介绍如何写驱动程序,对于一些应用程序我就不做介绍了,因为我对于那些高层的东西写得很少.倘若再讲,有班门弄斧之嫌,呵呵! 作为WIN98和WIN2K推荐的一项新技术来说,USB的驱动程序和以 ...
- Oracle传输表空间介绍
传输表空间通过拷贝数据文件的方式,实现可跨平台的数据迁移,效率远超expdp/impdp, exp/imp等工具.还可以应用跨平台&数据库版本迁移表数据.归档历史数据和实现表空间级时间点数据恢 ...
- Rsyslog的三种传输协议简要介绍
rsyslog的三种传输协议 rsyslog 可以理解为多线程增强版的syslog. rsyslog提供了三种远程传输协议,分别是: 1. UDP 传输协议 基于传统UDP协议进行远程日志传输,也是传 ...
- WPF USB设备采集开源工具介绍
最近项目需要需要试试采集电脑USB 设备信息 找到了 开源 示例 代码非常好 公共库也很友好 可能知名度太低 才4star https://github.com/vurdalakov/usbd ...
随机推荐
- Intellij IDEA 设置代码着色
从visual studio到Eclipse再到Intllij IDEA,其实每个编译器都有自己的风格,但是就美观上来说,个人觉得还是visual studio的代码着色比较美观,exlipse次之, ...
- 手机imie号介绍使用
http://zhidao.baidu.com/question/3682744.html手机机身号又叫手机串号,是国际移动设备识别码,GSM手机机身号简称IMEI,CDMA手机机身号简称ESN. 一 ...
- UE 技巧
http://cache.baiducontent.com/c?m=9d78d513d98416b8599d830e7c01a7170e2585744ddcc4523f8a9c12d522195646 ...
- Android 布局详解 -三表格布局(TableLayout)以及重要属性
TableLayout跟TableRow 是一组搭配应用的布局,TableLayout置底,TableRow在TableLayout的上方,而Button.TextView等控件就 ...
- js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”. 1..停止事件冒泡 JavaScript代码 //如果提供了事件对象,则这是一个非IE浏览器if ( ...
- 【ERROR】EXP-00091
问题: 在我们做exp的过程中可能经常会遇到EXP-00091: Exporting questionable statistics.这样的EXP信息,其实它就是exp的error message,它 ...
- 详细介绍Java中的堆和栈
栈与堆都是Java用来在RAM中寄存数据的中央.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运转时数据区,类的对象从中分配空间.这些对象经过new.newar ...
- DOA——ESPRIT算法
相位phei = 2*pi*f*d*sind(theta),因此理论上来讲测向的算法都可以用来测频. ESPRIT:Estimating signal parameters viarotational ...
- MySql按字段分组取最大值记录
数据库原始数据如下:数据库名:tbl_clothers 需求是:按照type分组,并获取个分组中price中的最大值,解决sql如下: 方法一: select * from (select type, ...
- Android开发5——文件读写
一.基本概念 在Android应用中保存文件,保存的位置有两处 ①手机自带的存储空间,较小(如200M),适合保存一些小文件,Android中保存位置在data/data/应用包名/files目录 ② ...