4.1 PCIE的数据链路层是干什么的?


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



内容简介

2024-01-29

全文共1241字,阅读大约需要4分钟,终于说到了数据链路层,总共规划了五篇文章。本文是第一篇,主要介绍下PCIE的数据链路层是干啥的,但本章节主要介绍Ack/Nak,例如流量控制、电源管理等作为单独章节在介绍完物理层后再叙。


    本章节规划的五篇文章分为两个部分。


    第一部分也就是本文内容,概述性的介绍下PCIE数据链路层是什么,会干什么。


    第二部分是后续的4篇文章,介绍Ack/Nak协议,这东西蛮有意思的,对我们设计也挺有帮助。主要介绍下链路层是如何保证事务层TLP在两点间可靠传输的。


    其中数据链路层还有流量控制、电源管理等内容,这些打算作为单独章节在介绍完物理层后再叙。




01

PCIE数据链路层是干啥的?


    数据链路层作为中间层级,上衔事务层下接物理层。它的主要职责是为两个组件之间交换事务层数据包(TLP)提供一种可靠的机制,并兼有流量控制、电源管理等功能。


    它关注的是俩个直连设备间的数据交换,至于数据从哪个设备来最终到哪去不关心。要保证的也是两点间的可靠传输。



数据链路层提供的服务主要有:


1.1 相连设备间的数据交换

1 接收从传输事务层传输的TLP,并将其传递给传输物理层

2 接收从物理层接收的TLP,并将其传递给接收事务层


1.2 错误检测和重传

1 为从事务层来的TLP添加序列号和LCRC

2 对从物理层来的TLP进行序列号校验和CRC校验

3 为了实现重传功能开辟一定大小的缓冲区

4 支持Ack、Nak协议来保证TLP的可靠传输

5 可以生成错误日志

6 具备应答超时的重传机制


1.3 初始化和电源管理

    跟踪链路状态,链路层也有工作状态,包括有效、无效和复位三个状态,工作状态会告知事务层


1.4 数据链路层数据包(DLLP)用于

1 执行链路管理功能,包括TLP确认、电源管理和流控制信息的交换。


2 需明确,TLP包是从一个组件路由到另一个组件,可能通过一个或多个中间组件。数据链路层数据包DLLP只能在相邻的两个组件间传递。



    如下是数据链路层的TLP包,sequence和LCRC是在链路层添加的。



    如下图是数据链路层的DLLP包,其中Type规定包类型,其后的内容随时类型不同而不同。




02

数据链路层的状态管理?


    数据链路层不是说上电就进入了工作状态,可以干活了。也需拜一拜状态,要瞧一瞧物理层准备好没,告诉一下事务层可以给数据了。


    数据链路层通过数据链路控制和管理状态机(DLCMSM)来跟踪物理层的链路状态。DLCMSM是规范给的缩略词,全称是“Data Link Control and Management State Machine”。数据链路层会根据物理层状态来对本层状态进行迁移,本层状态机的跳转如下图所示:



2.1

状态解释


DL_Inactive

    物理层报告链路不可操作或未连接到端口,也就是物理链路不可用。在进入DL_Inactive时会重置所有数据链路层状态信息为默认值,丢弃数据链路层重(传)试缓冲区的内容。在DL_Inactive状态时会向事务层和其他数据链路层报告DL_Down状态、丢弃来自事务层和物理层的TLP信息和不生成或接收DLLP


DL_Init

物理层报告链路可操作也就是以建立连接,数据链路层可以初始化默认虚拟通道的流量控制,但不接收TLP包,也不传递DLLP包。


DL_Active

    正常操作模式,数据链路层可以正常的执行数据交互,


2.2

链路层的输出状态

   

    数据链路层从物理层获取当前PCIE链路状态进行状态迁移,在状态迁移的过程也会告知事务层链路的当前状态,链路层给到事务层的状态就俩,如下:


DL_Down

     当前设备还没有与对端设备建立链接,事务层啥也不能干


DL_Up

    底层链路建立好了,初始化好了,可以干活了


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






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

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

<