PCIe系列专题之三:3.1 数据链路层DLLP结构及类型
一、故事前传
之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol),主要包括事务层(Transaction layer), 数据链路层(Data link layer)和物理层(Physical layer)。
较为详细解释请见之前的文章:
1. PCIe技术概述;
2.0~2.8 PCIe Transaction layer事务层详细解析;
3.0. Data Link Layer数据流链路层概述;
二、数据链路层DLLP结构及类型
上篇文章数据链路层概述中提到"DLLP不同于TLP,是产生与数据链路层,中止与数据链路层。DLLP并不是有TLP加上Sequence和LCRC组成的,具有单独的格式"。我们本文就主要介绍一下DLLP的结构与类型。
先看一张图,在数据链路层中TLP和DLLP的样式如下:
在数据链路层中,TLP要加上前缀Squence ID和后缀LCRC,如上图。而DLLP在数据链路层产生,包含的信息有DLLP Type,Attitude Field以及CRC。
需要指出的是,DLLP里面的CRC为16位,与TLP的后缀LCRC(32位) 不同,不要混淆咯~
一个DLLP的大小是固定的,为6 Bytes,如下图。第一个Byte为DLLP Type,第二到四个Bytes是于DLLP类型相关的属性参数,最后两个Bytes是CRC区域。如下图。
DLLP的类型大致分为四类:Ack/Nak, Power Management, Flow control以及用户自定义。
Ack/Nak DLLP格式:
Power Management DLLP格式:
0010 0000b = PM_Enter_L1
0010 0001b = PM_Enter_L23
0010 0011b = PM_Active_State_Request_L1
0010 0100b = PM_Request_Ack
Ps: 电源管理部分的详细内容在后续章节介绍。
Flow Control DLLP格式:
Ps: 这部分其实在前面的章节介绍了,具体请翻阅前面的文章。
用户自定义DLLP格式:
附录: DLLP详细列表
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术