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. Hive数据导入

    可以通过多种方式将数据导入hive表 1.通过外部表导入 用户在hive上建external表,建表的同时指定hdfs路径,在数据拷贝到指定hdfs路径的同时,也同时完成数据插入external表. ...

  2. SQL Cursor 基本用法

     1 table1结构如下  2 id    int  3 name  varchar(50)  4   5 declare @id int  6 declare @name varchar(50) ...

  3. centos 6 搭建ftp服务器支持匿名读写

    转载请注明: 凌云物网智科嵌入式实验室: http://iot-yun.com/     郭文学<guowenxue@gmail.com> vsftpd在运行时一定要关闭SELinux,否 ...

  4. oracle查看死锁和处理方法

    在操作数据库中经常会遇到表死锁问题,特别是不良的数据库设计和操作的时候,更容易遇到死锁问题.今天在系统中往oracle中添加数据时,特意快速多点几次添加的时候,就出现了死锁问题,而且刚好在读取和更新表 ...

  5. Jqure实现下拉多选

    Web ")                 {                     try                     {                          ...

  6. 自己写的自动生成动态边框的jquery小插件

    思路就是在元素四周添加<ul>列表,然后周期性地改变它的颜色,实现动态的效果,不支持ie7.ie8 预览链接http://gorey.sinaapp.com/myBorder/border ...

  7. angularjs-ngModel传值问题

    js NiDialog.open({ windowClass: '', backdrop: 'static', keyboard: false, templateUrl: '/static/tpl/a ...

  8. Sqlserver通过链接服务器访问Oracle

    工作中遇到的情况,win 7 64位操作系统的就安装64位的oracle 客户端,然后重启sql service服务后再创建sql 链接服务器.关于如何创建链接服务器请查看下面的大神的链接: http ...

  9. oracle行列转换总结-转载自ITPUB

    原贴地址:http://www.itpub.net/thread-1017026-1-1.html 谢谢原贴大人 最近论坛很多人提的问题都与行列转换有关系,所以我对行列转换的相关知识做了一个总结, 希 ...

  10. Linux 删除文件夹

    inux删除目录很简单,很多人还是习惯用rmdir 1.直接rm就可以了:rm -rf 目录名字 -r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思