PCIe总线有三种错误报告方式,分别是:
1. Completions:通过Completion中的状态位向Request返回错误信息
2. Poisoned Packet(又称为错误传递,Error Forwarding):告知接收端当前TLP的Data Payload已经被破坏
3. Error Message(错误消息):向主机报告错误信息
前两种之前的文章都已经提及,错误消息的格式和对应的消息编码如下所示:


为了兼容PCI总线的错误报告机制(使用PERR#和SERR#),PCIe设备会自动将CA、UR和Poisoned TLP转换为对应的错误信息。具体这里就不详细介绍了,有兴趣的可以自行阅读PCIe Spec的相关章节。

PCIe设备的配置空间中的状态与控制寄存器如上图所示,通过这些寄存器可以使能(或禁止)通过错误消息(Error Message)发送错误报告、查询错误状态信息,以及链路训练和初始化状态等。
前面的文章介绍过,默认的错误分类如下表所示:

这些错误类型可以通过设备控制寄存器(Device Control Register)中的相关位,进行使能或者禁止:

也可以通过设备状态寄存器(Device Status Registers)相关位查询错误状态:

当然,当Root接收到错误消息后,怎么处理还要取决于Root Control Register的设置:

链路错误(Link Errors)一般发生在物理层与数据链路层通信的过程中。对于Downstream的设备,如果链路上发生了Fatal错误,此时,该设备并不能够向Root报告错误。这种情况下,需要Upstream设备向Root来报告错误。为了消除链路错误,一般需要对链路进行重新训练(Retrain)。如下图所示,在链路控制寄存器中,可以通过往Retrain Link这一位写1,来强制进行链路重训练。

当发起重训练请求后,软件可以检查链路状态寄存器(Link Status Register)中的Link Training位,来确认链路训练是否已经完成,如下图所示。当该位为1时,表明链路训练尚未完成(或者还没有开始),如果链路训练已经完成,硬件会自动将该位清零。

PCIe总线的错误登记与报告的流程图如下图所示:

-
寄存器
+关注
关注
31文章
5590浏览量
129092 -
总线
+关注
关注
10文章
3014浏览量
91312 -
PCIe
+关注
关注
16文章
1423浏览量
87566
原文标题:【博文连载】PCIe扫盲——PCIe错误报告机制
文章出处:【微信号:ChinaAET,微信公众号:电子技术应用ChinaAET】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
PCB设计中如何进行统一批量检测并生成错误报告
Win8系统操作不当弹出错误报告
关于Quartus II 错误报告Error (171173): Node from partition Top cannot preserve previous placement at PIN_P8 and honor the location assigment to PIN_F8
MPLAB X IDE v3.20编译器使用错误的行号引用报告错误
为什么我设计的TMS320VC5402板子在调试软件时总会出现存储器错误报告?
基于软件错误报告数据集成的改进贝叶斯算法
PCIe总线的错误报告机制中四个比较重要的概念
PCIe扫盲—PCIe错误检测机制的详细资料概述
PCIe总线的两种复位方式
PCIe错误报告的两种机制详解

PCIe总线的三种错误报告方式
评论