SATA 学习笔记——Link Layer 8b/10b 编码解析
一、故事前传

我们上回说到Link layer的结构,link layer的作用大致可以包括以下几点:
Frame flow control
CRC的生成与检测
对数据与控制字符的Scrmable/Descramble
8b/10b编解码
将传输层进来的数据转为Frame
二、8b/10b编解码
8b/10b编码是目前高速串行通信中经常用到的一种编码方式,直观的理解就是把8bit数据编码成10bit来传输。
为什么要引入这种机制呢?其根本目的是“直流平衡”。当高速串行流动逻辑1或逻辑0有多个位没有产生变化时,信号的转换就会因为电压位阶段关系而造成信号错误,直流平衡的最大好处便是可以克服以上问题。
将8bit编码成10bit后,连续的1或者0不能超过5位,所以10b中0和1的位数只可能出现3中情况:
有5个0和5个1
有6个0和4个1
有4个0和6个1
这样引出了一个新术语“不均等性”(Disparity),就是1的位数和0的位数的差值,根据上面3种情况就有对应的3个Disparity0、-2、+2.
(Disparity 共有3中可能数值:0、-2、+2)
在SATA协议中资料值可以统一的表示为Dx.y或Kx.y,其中D表示资料字元,K表示特殊的控制字元, x表示输入的原始资料的低5位元,y表示输入的原始资料的高3位元。 通俗的讲,也就是8bit原始数据会分成两部分,其低5位进行5B/6B编码,高3位则进行3B/4B编码。
对K控制字元的编码方式和D资料字元编码方式一样。
协定中只使用了两个控制字元K28.3和K28.5
K28.5只用在Primitive基元ALIGNp byte0,
K28.3用在除ALIGNp之外的其他任何Primitive基元的byte0.
举个栗子:例如一个8bit数据101 10101,x=10101(十进制为21) y=101(十进制为5),我们就把这8bit数据写成D21.5。对照5B/6B以及3B/4B加密对照表(如下表),可以得到10bit数据为101010 1010


SATA 学习笔记——Link Layer 8b/10b 编码解析的更多相关文章
- UFLDL深度学习笔记 (五)自编码线性解码器
UFLDL深度学习笔记 (五)自编码线性解码器 1. 基本问题 在第一篇 UFLDL深度学习笔记 (一)基本知识与稀疏自编码中讨论了激活函数为\(sigmoid\)函数的系数自编码网络,本文要讨论&q ...
- 【itercast OSI 七层网络模型 学习笔记】Layer 1 物理层
NIC:网卡(基本上是一层功能) 传输介质:以太网,分有线和无线 开始以太网只有10Mbps的吞吐量,使用的是带有冲突检测的载波侦听多路访问(CSMA/CD,Carrier Sense Multipl ...
- CocosBuilder 学习笔记(3) AnimationManager 与 ccbi 文件解析
[CocosBuilder]学习笔记目录 1. 相关的类 先介绍和AnimationManager相关的几个类: CCBSequence 时间线.有成员duration(时间线时间,默认10秒).na ...
- CMake学习笔记四:usb_cam的CMakeLists解析
最近在学习cmake,在完整看了<cmake实践>一书后,跟着书上例程敲了跑了一遍,也写了几篇相关读书笔记,算是勉强基本入门了.所以找了usb_cam软件包的CMakeLists.txt来 ...
- 【Oracle学习笔记-2】Oracle基础术语解析
来自为知笔记(Wiz) 附件列表 Oracle概念解析.png 表空间.png 大小关系.png 段segment.png 块block.png 区entent.png 数据库基本概念.png
- 学习笔记之Python最简编码规范
Python最简编码规范 - 机器学习算法与Python学习 https://mp.weixin.qq.com/s/i6MwvC4jYTE6D1KHFgBeoQ https://www.cnblogs ...
- 【Swift】学习笔记(一)——熟知 基础数据类型,编码风格,元组,主张
自从苹果宣布swift之后,我一直想了解,他一直没有能够把它的正式学习,从今天开始,我会用我的博客来驱动swift得知,据我们了解还快. 1.定义变量和常量 var 定义变量,let定义常量. 比如 ...
- ArcGIS API for JavaScript 4.2学习笔记[13] Layer的弹窗(PopupTemplate)
上一篇文章中讲到Popup是一个弹窗,是View对象的默认内置弹窗,并且在View对象构造时就顺便构造了. 那么这个PopupTemplate是什么呢? 后半截单词Template是"模板& ...
- python学习笔记-基础、语句、编码、迭代器
#python的优缺点优点:Python简单优雅,尽量写容易看明白的代码,尽量写少的代码.缺点:第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地 ...
- UFLDL 教程学习笔记(三)自编码与稀疏性
UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授及其团队编写的一套 ...
随机推荐
- centos7 firewalld配置常用规则
限制ssh服务只允许某个ip ### 允许某个ip(调整前,务必添加定时任务`29 17 * * * systemctl stop firewalld`) firewall-cmd --permane ...
- MySQL 8.2.0部署安装验证
MySQL 8.2.0部署安装验证 背景 昨天捯饬了半天Oracle23c Free版本发现自己白忙活了. 然后想着继续看一下 MySQL8.2. 看看会不会又继续白忙活 下载与安装 https:// ...
- [转帖]RAC AWR重要指标说明
1.Global Cache Load Profile Global Cache blocks received: 接收到的全局缓冲块 Global Cache blocks served: 发送的 ...
- [转帖]Kafka查看topic、consumer group状态命令
https://www.cnblogs.com/AcAc-t/p/kafka_topic_consumer_group_command.html 最近工作中遇到需要使用kafka的场景,测试消费程序启 ...
- [转帖]VMware ESXi 各版本号对照表
本博文转自以下链接: VMware ESXi Release and Build Number History | virten.net vSphere ESXi 7.0 Name Patch Dat ...
- [转帖]模拟enq: TX - row lock contention争用
https://www.modb.pro/db/623036 enq: TX - row lock contention它表示一个事务正在等待另一个事务释放被锁定的行.这种等待事件通常发生在并发访问数 ...
- [转帖]Springboot配置https访问
https://www.cnblogs.com/feifuzeng/p/14709372.html 介绍 该篇博文主要介绍如何配置Springboot使其打包部署的服务必须通过HTTPS协议才可访问, ...
- BMC修改密码
公司里的服务器都托管出去了, 为了好维护, 都给自己的机器设置了BMC远程管理的端口, 安全起见自己修改了密码. 方法很简单.默认用户密码是 用户:root 密码: root 用户:admin 密码: ...
- NetCore高级系列文章03---中间件
.net web 一路发展过来,经历了 .net webfrom. .net Mvc ..net core不论哪种架构,都会对用户的请求到达服务器后经历一系列类似于管道的处理.在.net webfro ...
- Java 自增自减运算符和移位运算符介绍
摘自 JavaGuide (「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识.准备 Java 面试,首选 JavaGuide!) 自增自减运算符 在写代码的过程中,常见的 ...
