PCIe协议和SATA协议都是分层协议,分为物理层,数据链路层,传输层,命令层和应用层。

硬件工程师主要关注物理层、数据链路层和传输层。所有CMD/data由应用层和命令层打下来,每向下走一层,多一层封装和变换,最后通过差分总线传输出去。

PCIe协议:

应用层和命令层打下来的CMD/data以TLP的格式封装起来,送给数据链路层,链路层给其加上sequence前缀和CRC后缀,成为一个完整的数据报文结构,送到物理层,经过8b/10b或者128b/130b编码后发送出去。关键点在于数据链路层有一个发送buffer,这个buffer可以存储一定量的TLP。每个传输层打下来的TLP首先送到这个发送buffer中,然后再发送给物理层。接收端也有一个接收buffer,可以一连串的接收多个TLP。如此,发送端无需等待接收端的回应,就可以先打多个TLP出去,接收端可以一股脑收起来,一个一个处理,如果接收正确,回复一个ACK DLLP(DLLP是另一种数据结构,用来进行一些控制信息的沟通,不用来传递CMD/data,DLLP由数据链路层自动生成,发送给对方的数据链路层,传输层不知道DLLP的存在),发送端收到这个DLLP,可以择机清空发送buffer中对应的TLP。如果接收端接收到错误的TLP,则回复NACK DLLP,发送方看到之后择机将发送buffer中对应的TLP重新发一遍。这带来的好处有以下:

(1)       发送端多个TLP可以pipe起来。一个TLP无需等待前一个TLP传完并收到ACK DLLP回应,就可以先发出去。反正有buffer可以先存着,物理层有空就发。

(2)       两个设备可以同时给对方打TLP,即全双工通信。一个设备发送TLP的时候,另一个设备无需被动等待,它可以发自己的TLP。 总线两端的设备地位是对等的,谁都可以给对方打CMD或者传data。

<img src="http://pic2.zhimg.com/f4d9bedb4b95be30e5f7778f175791bd_b.jpg" data-rawwidth="554" data-rawheight="190" class="origin_image zh-lightbox-thumb" width="554" data-original="http://pic2.zhimg.com/f4d9bedb4b95be30e5f7778f175791bd_r.jpg">

上图:PCIe的数据链路层结构

SATA协议:

以上说的两个好处,正好对应SATA总线的两个弱点:

(1)       SATA总线发送端不存在pipe。host一个FIS(类似PCIe协议中的TLP)打下去之后,只有device端回复收到,并且通过CRC校验之后(通过R_OK原语,类似PCIe的ACK DLLP),host才能打下一笔FIS。

(2)       SATA总线两端是不对等的,存在host和device的区别,只能主机给device打CMD,不能device给主机打CMD。而且不论是host还是device,一方发送FIS的时候,另一方只能处于接收状态,不能发FIS出去。这就是半双工通信。假如host正往device里面写data,device不可能在此时给host传data的。所以同一时刻,SATA的Rx和Tx只有一根线上是有效数据(payload)。

下图是SATA的一笔NCQ read CMD的总线传输。HOST通过Register FIS把CMD打下来,device收到之后,回复一个Register FIS。Device准备好data后,发送DMA setup FIS 告知host,然后发送data FIS,将数据送给host。传完数据,device发送一个set device bits FIS告知host。整个过程中,不论是host还是device,TP层只能一次发一个FIS,也不存在双方同时给对方发FIS的可能。

&amp;amp;lt;img src="http://pic3.zhimg.com/fc7eb1f5c8fb9c851ec17a335176462e_b.jpg" data-rawwidth="554" data-rawheight="330" class="origin_image zh-lightbox-thumb" width="554" data-original="http://pic3.zhimg.com/fc7eb1f5c8fb9c851ec17a335176462e_r.jpg"&amp;amp;gt;<span id="mce_marker" data-mce-type="bookmark"></span>

为什么PCI-e比SATA快这么多?的更多相关文章

  1. [转帖]超能课堂:Intel平台芯片组变迁史

    https://www.expreview.com/69419.html 现在我们在购买电脑时一个最重要的硬件就是主板了.作为承载CPU等主要硬件的平台,其最重要的功能就是连接外围设备,扩展计算机.但 ...

  2. 【学习笔记】Linux基础(零):预备知识

    学习笔记(连载)之Linux系列 Note:本学习笔记源自<鸟哥的Linux私房菜(基础学习篇)>一书,为此书重要内容的摘要和总结,对于一些常识性的知识不再归纳 新型冠状病毒引发的肺炎战& ...

  3. win10下安装Ubuntu出现win10无法进入的情况

    昨天晚上在win10上安装Ubuntu Kylin16.04系统,结果发现重启的时候进不去windows系统了,而且报的错误是 /EndEntire file path: /ACPI(a0341d,0 ...

  4. 安装win8+Ubuntu14.04双系统的经验总结

    当时查资料,很多人推荐了easyBCD直接安装ubuntu,但是在我的笔记本上行不通.我的笔记本是Lenovo V480+win8正版系统.这是因为我的笔记本的引导结构是EFI,而不是MBR.我的方法 ...

  5. 我眼中的Linux设备树(二 节点)

    二 节点(node)的表示首先说节点的表示方法,除了根节点只用一个斜杠"/"表示外,其他节点的表示形式如"node-name@unit-address".@前边 ...

  6. Linux设备树(二 节点)

    二 节点(node)的表示 首先说节点的表示方法,除了根节点只用一个斜杠“/”表示外,其他节点的表示形式如“node-name@unit-address”.@前边是节点名字,后边是节点地址.节点名字的 ...

  7. vivado 创建PL工程

    参考来源 https://china.xilinx.com/video/hardware/i-and-o-planning-overview.html 前言 我Win10系统上的Xilinx Plat ...

  8. [转帖]速度快散热好 为什么U.2 SSD还没普及?

    速度快散热好 为什么U.2 SSD还没普及?   经典的影视剧中总有那么几位武林高手,江湖上只闻其名,不见其形.今天我们要聊的这位爷,誓要拳打南山M.2,脚踩北海SATA 3!它就是固态硬盘界久负盛名 ...

  9. x1c2017 8G版 win linux的取舍纠结记录

    x1c 2017 的 i5 7200U 8G ram 的丐版.换了1T SSD.其实一般使用没啥问题. 1 外出携带的轻便性太满意(mac13寸相比之下都太重了): 2 coding时候的安静性,比原 ...

随机推荐

  1. HTTP协议 状态码详解

    http://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html

  2. 使用SqlAlchemy时如何方便的取得dict数据、dumps成Json

    使用Sqlalchemy可以方便的从数据库读取出python对象形式的数据(吐槽:说实话对象形式也没多方便,还不如我之前从关系型数据库直接读取出dict形式的数据用起来方便,具体参见我以前的文章htt ...

  3. Driving the Activity Lifecycle

    Before Robolectric 2.2, most tests created Activities by calling constructors directly, (new MyActiv ...

  4. 启动hadoop时候报错:localhost: ssh: Could not resolve hostname localhost: Temporary failure in name resolution”

    这个错误是由于配置文件没有配置好.解决方案如下: 1 打开profile文件 vim /etc/profile 2 在文件最后加入的内容应该如下(高亮的两句一般是大家缺少的): export JAVA ...

  5. 原生JS添加节点方法与jQuery添加节点方法的比较及总结

    一.首先构建一个简单布局,来供下边讲解使用 1.HTML部分代码: <div id="div1">div1</div> <div id="d ...

  6. 访问nginx提示gateway timeout 504 ,发现总是当调用时间超过30s时提示504错误

    解决办法: 需要修改php-fpm的配置文件 request_terminate_timeout=30s 参考文档: http://baike.baidu.com/view/641394.htm ht ...

  7. c#迭代算法

    //用迭代算法算出第m个值 //1,1,2,3,5,8...;           //{1,0+1,1+1,1+2,2+3 ,3+5} static void Main(string[]   arg ...

  8. VB热点答疑(2016.5.11更新Q4、Q5)

    收录助教君在VB习题课上最常被问到的问题,每周更新,希望对大家有所帮助. Q1.如何让新的文本内容接在原来的内容后面/下一行显示? A1.例如,Label1.text原本的内容是"VB程序设 ...

  9. 使用soapUI代替WSDL2JAVA生成cxf HTTPS 客户端调用代码

    如果直接用cxf下面的wsdl2java生成https服务调用代码,会报https证书的错误.在你不想导入证书的情况下,可以使用soapUI进行客户端代码的生成,步骤如下: 1.设置CXF,如下图: ...

  10. 258. Add Digits(C++)

    258. Add Digits Given a non-negative integer num, repeatedly add all its digits until the result has ...