4.2关于PCIE的链路层,如果是你该如何设计?


这是剖析PCIE协议的第22篇文章

内容简介

2024-01-29

全文共1544字,阅读大约需要5分钟本文主要分为两个部分

1、如何实现两点间的可靠传输?

2、概括性的介绍下数据链路层包含哪些内容


01

PCIE数据链路层是干啥的?


    PCIE数据链路层的设计方法挺值得我们学习,部分思路也适合板间或芯片间的数据交换。在介绍数据链路层内容之前可以先思考这样一个问题,这对我们理解后续内容有所帮助。


    如下两个设备进行全双工的数据交换。设备A是主设备,会主动发起读写请求,设备B是从设备。设备A、B的通信逻辑是:


1、如果收到读请求需立即返回数据


2、如果收到写数据需返回接收完成标志,但不会主动发起。


我们该如何保证、如何知晓二者的通信质量呢?



在通信的过程中,可能存在的问题无非以下两点:


1、是没有收到数据


2、收到数据包有问题


    但在不同场景会有不同的表现形式。一般会用到循环数和校验数这俩大法宝,CRC校验数保证数据包的完整性,循环数保证数据包的顺序。如下图是一包数据的构成,Payload就是我们所要传递的数据内容,CYC是循环数,每发送一包数据,就加一。



那么如何使用?


    校验数不必说,发送端添加,接收端检查。CYC检测是否丢包,是否存在乱序的情况。发送端和接收端都会维护一个循环数,例如设备A给设备B发送一包数据CYC是0,设备B收到检查是0,然后就应该给自己维护的CYC加一,因为下一包必然是1,等设备A给设备B再发送一包数据CYC是2并不是1,设备B就应该上报循环校验错误,并告知主设备。


1.1

主设备可能的故障状态及处理方法有


1 设备A没有收到反馈数据

    设备A发起请求后,应启动超时检查机制,当计数到一定值没有收到数据则认为两条链路最起码之一存在问题,这是主设备可以尝试再发几次,如果依旧收不到反馈就认为链路故障


2 设备A收到数据校验错误

    反馈链路通信存在问题,可以再重发数据,看看反馈数据是否还是有校验错,如果有则认为反馈链路存在问题


3 设备A收到数据循环数错误

    设备B会将收到的循环数返回给设备A,如何是出错可能有大于和小于两种情况:

    1)收到序列号小于设备A当前序列号

    2)收到的序列号大于设备A当前序列号


1.2

从设备可能的故障状态及处理方法有


1 设备B收到数据校验错

给设备A发一包告知一下


2 设备B收到数据循环数错误

    出错同样可能有大于和小于两种情况:

    1)收到序列号小于设备A当前序列号

    2)收到的序列号大于设备A当前序列号








    以上方案即可保证两点间的可靠传输,一般实践中,我们可能不去做重传机制,但数据检测机制是必须要有的,而PCIE的数据链路层则是检测与重传都有,它利用Ack/Nak数据包实现了类似上述的过程,保证传输的可靠性。


02

PCIE数据链路层是干啥的?


    数据链路层上连事务层,下接物理层,起到了一个承上启下的作用。链路层不仅负责事务层TLP包的收发和再次打包拆包,还会产生本层的数据包用于链路维护,数据链路层的数据包被称为Data Link Layer Packets (DLLPs)。DLLP只会出现在链路层,不会体现在物理层中。



2.1

数据链路层有个DLLP


    数据链路层主要目的是保证点对点数据交换的可靠传输。如下图是个TLP包的传输示例,一个TLP包可能会经过多个Switch到达目的地。但数据链路层不负责这些,他需要保证的是两个设备间的可靠传输,如下图DeviceA、B可能就是EP和Switch,也可能是Switch和Switch之间,也可能是Switch和RC之间,无论怎样,只描述两点之间的传输方式。 



    总之,数据链路层会有个除去TLP之外的数据包存在,叫DLLP,如下图概述性的介绍了数据链路层的数据处理逻辑,我们在后文会详细阐述。



2.2

DLLP是干啥的?


    如下图是DDLP包的组成形式,包含一个字节来表示DDLP数据包的类型,3个额外字节表示该类型数据包所携带内容,最后2字节作为包校验。这一共是6个字节,实际上DLLP是8字节,如果物理层采用8B/10B编码会给数据包添加一个字节的SDP和一个字节的END俩控制符,SDP是Start of DLLP的缩写,表示帧开始,END也就是结束符。如果物理层采用128b/130编码,那会在帧头添加一共2字节的SDP,帧尾不加结束符。



    根据帧类型,DLLP数据包分为4种,如下表所示,保证TLP包传输完整性的Ack/Nak、电源管理、供应商自定义和流量控制,在数据链路层这章节主要介绍Ack/Nak的使用是如何保证TLP包传输完整性的,也就是下一节内容。




欢迎关注公众号点击【资料下载】领取相关资料







快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~

有建议、有需求、有疑问、联系我

<