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 ...
随机推荐
- aop注解 自定义切面的注解写法
spring.xml中 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...
- HDUOJ---2110
Crisis of HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- NYOJ----次方求模
次方求模 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 求a的b次方对c取余的值 输入 第一行输入一个整数n表示测试数据的组数(n<100)每组测试只有一 ...
- RabbitMQ消息队列的小伙伴: ProtoBuf(Google Protocol Buffer) [转]
什么是ProtoBuf? 一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化.它很适合做数据存储或 RPC 数据交换格式.可用于通讯协议.数据存储等领域的语言无关.平台无关.可扩 ...
- Python学习笔记——MySQL的基本操作(2)
1 运算符操作(配合查.修.删操作) 数据库的语法结构 查:select * from 表名 where 字段名 运算符 数字/字符; 改:update 表名 set 字段名=值,... wher ...
- Android 布局之LinearLayout 子控件weight权重的作用详析
关于Android开发中的LinearLayout子控件权重android:layout_weigh参数的作用,网上关于其用法有两种截然相反说法: 说法一:值越大,重要性越高,所占用的空间越大: 说法 ...
- 页面日期选择控件--jquery ui datepicker 插件
日期选择插件Datepicker是一个配置灵活的插件,我们可以自定义其展示方式,包括日期格式.语言.限制选择日期范围.添加相关按钮以及其它导航等.官方地址:http://docs.jquery.com ...
- JavaScript - 返回头部
制作浮动top $(window).scroll( function() { var scrollValue=$(window).scrollTop(); scrollValue > 600 ? ...
- MySQL Study之--MySQL下图形工具的使用(MySQL Administrator)
MySQL Study之--MySQL下图形工具的使用(MySQL Administrator) 系统环境: 操作系统: Windows 7(64) 下载地址:http://www.soft ...
- Java并发和多线程那些事儿
我记得我接触电脑的时候是在小学三年级的时候,那是1995年,那年发布了windows95,但是我学习的时候还是只是dos系统,简单对于文件的一些命令操作还有五笔 在过去的那个年代,电脑都是单CPU,也 ...