4.1 PCIE的数据链路层是干什么的?
这是剖析PCIE协议的第21篇文章
内容简介
2024-01-29
本章节规划的五篇文章分为两个部分。
第一部分也就是本文内容,概述性的介绍下PCIE数据链路层是什么,会干什么。
第二部分是后续的4篇文章,介绍Ack/Nak协议,这东西蛮有意思的,对我们设计也挺有帮助。主要介绍下链路层是如何保证事务层TLP在两点间可靠传输的。
其中数据链路层还有流量控制、电源管理等内容,这些打算作为单独章节在介绍完物理层后再叙。
”
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规定包类型,其后的内容随时类型不同而不同。
数据链路层的状态管理?
数据链路层不是说上电就进入了工作状态,可以干活了。也需拜一拜状态,要瞧一瞧物理层准备好没,告诉一下事务层可以给数据了。
数据链路层通过数据链路控制和管理状态机(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
底层链路建立好了,初始化好了,可以干活了
欢迎关注公众号点击【资料下载】领取相关资料
快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~
有建议、有需求、有疑问、联系我