USB3.0在Physical layer中定义了超速USB的信号传输技术,在其中最关键的就是引入了8/10b编码技术,如下图中的红色部分。

8/10b编码和解码的的流程如下图所示,在编码时将ABCDE映射为adcdei,FGH映射为fghj,关于8/10B编解码的传输的详细定义可以在ANSIX3.230-1994获得。

8b/10b编码技术优点

        8/10b编码将8位数据编码成10位数据再进行传输,这种做法是为了避免在传输高速数据的时候,还要再单独传输一路高频率的时钟信号,这很容易就会产生EMI(电磁干扰)问题。8/10b技术同时将时钟信号也编码了进去,从而避免了这个问题。

     8b/10b编码的另外一个特性是保证DC 平衡,采用8b/10b编码方式,可使得发送的“0”、“1”数量保持基本一致,连续的“1”或“0”不超过5位,即每5个连续的“1”或“0”后必须插入一位“0”或“1”,从而保证信号DC平衡,它就是说,在链路超时时不致发生DC失调。通过8b/10b编码,可以保证传输的数据串在接收端能够被正确复原,除此之外,利用一些特殊的代码( 在PCI-Express总线中为K码) ,可以帮助接收端进行还原的工作,并且可以在早期发现数据位的传输错误,抑制错误继续发生。

8b/10b编码技术详解

8b/10b编码是将一组连续的8位数据分解成两组数据,一组3位,一组5位,经过编码后分别成为一组4位的代码和一组6位的代码,从而组成一组10位的数据发送出去。相反,解码是将1组10位的输入数据经过变换得到8位数据位。数据值可以统一的表示为DX.Y或KX.Y,其中D表示为数据代码,K表示为特殊的命令代码,X表示输入的原始数据的低5位EDCBA,Y 表示输入的原始数据的高3位HGF,“D.a.b”是资料码(D即是Data),“K.a.b”指控制码(K即是Key),。

8b/10b编码将原8位(一个字节) 数据编码成为10位字符,增加了数据中的高低电平变换(即“1”/“0”变换) ,有利于实现转换前后的时钟同步,此外还能帮助实现直流平衡,以使接收器的输入没有直流(DC)漂移。由于采用了这种编码,链路可以是交流(AC)耦合的,这样就给任一端的设备厂商提供了更大的灵活性。而且这种编码有利于检测出传输过程中单个和多个的比特误码,同时编码设计中的一些特殊码组还有助于比特流的码组定位和信息识别。

例如一组8位元的资料是 10110101:

首先,分成两组 101 与 10101

a=10101(21) b=101(5),符号为 D21.5,a(EDCBA)经过5B/6B编码为abcdei,b(HGF)经过3B/4B编码为fghj。

8b/10b编码输出位元数目总共是10个位元,但只有“+2”“+0”“-2”三种组合。其中“+2”是指4个位元0,与6个位元1;“+0”是指5个位元“0”,与5个位元“1”;“-2”是指6个位元“0”,与4个位元“1”,利用这种“不均等性— Disparity”的特性而具有强大的直流平衡(DC Balance)功能,可使得发送的“0”、“1”数量保持一致,连续的“1”或“0”基本上不超过5位。

 8/10b编码技术在高速率总线上很常见,如:SATA和PCI Express。USB 3.0在设计上和PCI Express有很多相似的地方,如相同的8/10b编码技术、界面速率/数据速率、相同的双向差分传输等。

在USB3.0的physical layer中8/10b编码中同时提供了特殊符号来描述不用的传输状态,如下图,可以看出均为“K.a.b”即控制码(K即是Key),

简而言之,在USB3.0中引入8/10虽然会降低一部分的数据传输率(此时的数据传输率5Gbps/10=500Mb/s),但是通过这部分的牺牲保证了数据传输时候的DC(直流)平衡,并且避免在传输高速数据的时候,还要再单独传输一路高频率的时钟信号,从而使得传输速率能够比2.0提高,并很好的避免了电磁干扰(EMI)问题。

USB3.0中的8/10b编码技术详细解释相关推荐

  1. usb3.0 u盘 安装 linux,在16G USB3.0中安装ubuntu10.10成功!U盘功能可用

    折腾了快两天,终于成功的将ubuntu装入U盘,同时能够保持U盘功能,激动ing... 感兴趣的同学可以查看附件.(ps:不会传,现把全文内容附上,说不上原创,不过集合了网上很多的资源,自己稍有发挥. ...

  2. 高速串行总线系列(1)8B/10B编码技术

    目录 8B/10B编码 5B/6B 编码表 3B/4B 编码表 控制字符编码表 8B/10B编码的利用率 参考文献 8B/10B编码 为什么要使用8B/10B编码? 8b/10b编码的特性之一是保证D ...

  3. 8b10b编码源码 matlab,8b/10b编码技术系列(一):Serdes、CDR、K码

    和大家分享一下关于8b/10b编码的知识点,如有什么错误之处或大家有什么额外的见解欢迎大家公众号后台留言! 一.Serdes高速收发器 在传统的源同步传输中,数据和时钟分离,在速率较低(<100 ...

  4. 8b/10b编码技术系列(一):Serdes、CDR、K码

    和大家分享一下关于8b/10b编码的知识点,如有什么错误之处或大家有什么额外的见解欢迎大家公众号后台留言! 一.Serdes高速收发器 在传统的源同步传输中,数据和时钟分离,在速率较低(<100 ...

  5. theano中的Rop和Lop的详细解释

    #------------------------------------------序------------------------------------------------------- ...

  6. Linux系统中一些目录和文件的详细解释(参照RHEL5.4)

    linux有四种基本文件系统类型: –普通文件:如文本文件.c语言源代码.shell脚本等,可以用cat.less.more.vi等来察看内容,用mv来改名: –目录文件:包括文件名.子目录名及其指针 ...

  7. scala中的算术符重载代码详细解释

    overload_exercise.scala代码如下: object Overload_Exercise extends Serializable { //--------------------- ...

  8. vue中组件的导出导入_5.2 vue中 keep-alive 组件的作用,详细解释keep-alive使用方法...

    问题:vue中 keep-alive 组件的作用 keep-alive:主要用于保留组件状态或避免重新渲染. 比如: 有一个列表页面和一个 详情页面,那么用户就会经常执行打开详情=>返回列表=& ...

  9. Python numpy中的hsplit()和vsplit()函数详细解释

    在网上看到了一些关于vsplit()函数和hsplit()函数的解释,感觉不是很好理解, 同时有的也不是很全面.这里我想根据我的个人理解,用我自己的语言表达出这两个函数的解释. hsplit():按列 ...

最新文章

  1. java反序列化weblogic_[Todo]Java反序列化-weblogic
  2. tidb 企业_TiDB 在马上消费金融核心账务系统归档及跑批业务下的实践
  3. boost::gil::detail::convolve_2d用法的测试程序
  4. QT实现有纹理和照明的简单立方体。
  5. matlab广泛用于什么,目前,Matlab已成为世界上最受欢迎的科学和工程计算软件工具....
  6. 创建oracle数据库表空间并分配用户
  7. NHibernate.3.0.Cookbook第三章第9节的翻译
  8. 支付宝手机h5网页支付不再提供「继续浏览器付款」按钮了吗
  9. jlist放jbutton 按钮事件失效_电动高处作业吊篮操作如何面对一些突发事件
  10. 围观京东云,您有一份区块链技术礼包待查收!
  11. Google “推翻”无监督研究成果!斩获 ICML 2019 最佳论文
  12. 成都文理学院计算机一级还没考过,两次查成绩不一致,合格成不合格?成都文理学院官方回应...
  13. php下载视频文件怎么打开,php是什么格式视频文件(php文件打开教程)
  14. 黑苹果日记三(驱动)
  15. linux换终端的背景颜色,linux 终端背景色修改
  16. 一个简单的sql查询脚本
  17. Unity --- 导航网格 与 导航的使用
  18. html5诊断报告,放射科诊断报告模板.docx
  19. win10c语言关机,win10如何设置定时关机?
  20. tf.constant学习

热门文章

  1. 唯一编号算法:生成GUID
  2. 腾讯数据分析证书到手了!
  3. 春节出行带个对讲机 旅行实测威诺VR-N65
  4. 索尼收购以色列半导体公司 推动物联网业务发展
  5. CS_2021_11_log
  6. K3s完整版离线部署
  7. WIZnet以太网帽[RP2040]+MQTT发布[mosquitto]
  8. cocosCreator原生平台编译测试
  9. 用Java批量下载人教网电子课本和教师用书
  10. CSS文字单行隐藏和多行隐藏