本文转载自: FpgaHome微信公众号
本文我们将向大家介绍PCIe引脚定义以及PCIe协议层。
1. PCIe引脚定义
PCI Express,官方简称PCIe,是计算机总线的一个重要分支, 插槽图片如下:
下表列出在边缘连接器上的PCI Express卡两侧的导线。在印刷电路板(PCB)的焊接侧为A侧,并且组件侧的B侧。PRSNT1# 和PRSNT2# 引脚必须比其余稍短,以确保热插入卡时其余管脚完全插入。WAKE# 引脚采用全电压唤醒计算机,但必须拉高从备用电源,以表明该卡是能够唤醒。
2. PCIe协议层
PCIE协议中包括应用层、事务层、数据链路层和物理层。
应用层(Application Layer):应用层是在事务层之上的一层,它处理与连接的设备进行的高级通信。这可能包括配置设备、初始化寄存器、发送和接收控制命令等。
事务层(Transaction Layer):事务层是PCIe协议的核心,它负责将上层软件请求转化为数据传输和交换。事务层处理内存读写请求、配置空间访问以及其他与连接的设备进行通信的请求。
事务层接收由应用层传来的组成TLP核心部分所需要的信息,并将数据组装成Header 和 Data(有些TLP没有DATA),计算End CRC (ECRC)。
数据链路层(Data Link Layer):数据链路层接收事务层传过来的TLP包,然后在其前面加上12bit 的Sequence ID,并根据目前所有的信息计算32bit 的CRC (LCRC),并附着在后面。
物理层(Physical Layer):主要职责是处理所有的数据物理传输,发送端数据分发到各个Lane传输(stripe),接收端把各个Lane上的数据汇总起来(De-stripe),每个Lane上加扰(Scramble,目的是让0和1分布均匀,去除信道的电磁干扰EMI)去扰(De-scramble),以及8/10或者128/130编码解码,等等。物理层接收数据链路层传过来的TLP包,然后在其前面和后面分别附加1 Byte的 Start 和 End 帧字符。
3. TLP包
打包后的TLP包格式如下图所示,并且每块数据组成部分来自哪一个协议层都用不同的颜色标出。
Data是事务层上层给的数据,事务层给它头上加个Header,然后尾巴上再加个CRC校验,就构成了一个TLP;这个TLP下传到数据链路层,又被数据链路层头上加了个包序列号,尾巴再加个CRC校验,构成一个DLLP;然后DLLP下传到物理层,头上加个Start,尾巴加个End符号,把这些数据分派到各个Lane上,然后每个Lane上加扰码,经8/10或128/130编码,最后通过物理传输介质传输给接收方。
接收方物理层是最先接收到这些数据的,然后执行逆操作;在数据链路层,校验序列号和LCRC;如果检查无误,剥掉序列号和LCRC,往事务层走;如果校验出错,通知对方重传;在事务层,校验ECRC,如果有错则抛弃数据,如果没错,则去掉ECRC,获得数据。
下面一张图更加详细的向大家展示了数据是如何从上到下,一层一层的打包,最终通过物理层输出。
4.总结
本文向大家初步介绍了下PCIe协议层,如果觉得我们原创或引用的文章写的还不错,帮忙点赞和推荐吧,谢谢您的关注。
---------------------------------------------
参考文献:
[1] KnightLi, PCIe Express总线引脚定义, https://www.knightli.com/
[2] llxxyy507, PCIe数据包,https://blog.csdn.net/llxxyy507/article/details/114957485
[3] 技术考古员, PCIe分层结构, http://www.ssdfans.cn.