1:概述:
DLLP一般指的是由发送端的数据链路层发送,接收端的数据链路层接收的数据包,其和事务层(Transaction Layer)一般没有什么关系,本文将要介绍的DLLP指的正是这样的数据包,一般用于Ack/Nak机制,功耗管理,Flow Control和一些厂商自定义用途等,示意图如下:
DLLP的格式是固定的,一共有8个字节,包括Framing (SDP & END)。和TLP不一样的地方是DLLP并未携带任何路由信息,原因很简单,因为DLLP只在相邻两个设备的数据链路之间通信,DLLP包始于数据链路层也止于数据链路层,并且DLLP一般也不需要和事务层交换信息;
注:前面文章中介绍的Flow Control,Ack/Nak等都是针对TLP,并不会对DLLP产生影响,但是这些功能正是借助DLLP才得以实现的。
DLLP的一般格式如下所示:
DLLP的类型与目标应用如下表中所示:
其中用于Ack/Nak的DLLP的格式如下:
当用于Ack/Mak时,在Byte2&3有12个有效bit,用于放置PCIe报文序列号(NEXT_RCV_SEQ)
当收到完好的TLP报文时:
- 如果接收报文序列号等于NEXT_RCV_SEQ,那填入当前序列号,发送ACK类型报文给对端;
- 如果接收报文序列号小于NEXT_RCV_SEQ,即收到了重复报文,则填入NEXT_RCV_SEQ-1,即上一个完好的TLP报文序列号,以ACK类型报文发送给对端;
如果收到错误的序列号大于NEXT_RCV_SEQ的TLP报文:
- 则发送Nak报文给对端,填入NEXT_RCV_SEQ-1,即上一个完好TLP报文序列号
详细的重传过程见 :PCIe专题学习——3.2(数据链路层Ack/Nak机制解析)_pcie lcrc-CSDN博客
2:用于功耗管理(Power Management)的DLLP的格式如下
3:用于Flow Control的DLLP的格式如下
4:厂商自定义的DLLP格式如下
Ack/Nak机制详解:
https://zhuanlan.zhihu.com/p/446366874