前言:
PCI总线中定义两个边带信号(PERR#和SERR#)来处理总线错误。其中PERR#主要对应的是普通数据奇偶校检错误(Parity Error),而SERR#主要对应的是系统错误(System Error)。具体如下:
· 普通的数据奇偶校检错误——通过PERR#报告
· 在多任务事务(Multi-task Transaction,又称为Special Cycles)时的奇偶校检错误——通过SERR#报告
· 地址和命令的奇偶校检错误——通过SERR#报告
· 其他错误——通过SERR#报告
在PCI(Peripheral Component Interconnect)和PCI Express(PCIe)体系结构中,边带信号(Sideband Signals)是一些用于提供控制和状态信息,而非数据传输本身的信号。在这些信号中,有两个特别重要的是SERR(System Error)和PERR(Parity Error)。尽管PCIe架构在很多方面与传统PCI不同,但它仍然保留了一些早期技术的特征,包括对错误处理的支持。下面是这两个信号的详解:
1 PERR(Parity Error)
目的与作用: PERR是用来指示数据传输中的奇偶校验错误的信号。在PCI总线上,数据传输伴随着一个奇偶校验位。如果在接收端计算的奇偶校验结果与发送端的不符,PERR信号会被触发。这意味着传输的数据在从一个端点到另一个端点的过程中出现了错误。
处理方式: 当PERR信号被触发时,系统可以采取多种措施,如重试传输、记录错误到日志中、或者在某些情况下停止操作,具体取决于系统设计和错误的严重性。
2 SERR(System Error)
目的与作用: SERR被用来指示严重的系统错误,这些错误通常是无法通过重试等简单方法恢复的。SERR通常与硬件失败、系统崩溃或者其他重大问题关联。SERR提供一种机制,使得系统在遇到严重错误时能快速响应。
处理方式: 触发SERR通常会导致系统采取更加激进的措施,如立即停止所有操作、复位或者重新启动系统。由于涉及到的错误通常很严重,因此这个信号的使用相对较少,只在不得已的情况下才会被用到。
一个简单的例子如下图所示:
3 错误分类
3.1 PCIe将错误分为两大类:
3.1.1 可更正错误(Correctable Errors):
这些错误可以在不影响系统持续运行的情况下被检测并修复。如小的数据包错误、信号干扰等,通常不会导致数据损坏。
3.1.2 不可更正错误(Uncorrectable Errors):
这些错误通常更加严重,可能导致数据损失或者系统崩溃。如果发生不可更正错误,可能需要采取措施,如重新初始化接口或重启系统。
3.2 错误定义
错误定义包括一系列的错误事件,下面是一些主要类型:
数据链路层错误(Data Link Layer Errors):
可更正错误:
Bad DLLP: 数据链路层包(DLLP)发生错误。
Bad TLP: 传输层包(TLP)发生错误。
不可更正错误:
数据链路协议错误: 数据链路层发生的协议违规,通常指示硬件问题。
物理层错误(Physical Layer Errors):
可更正错误:
接收错误: 由于信号畸变等原因接收到错误的数据。
不可更正错误:
底层序列错误: 物理层发生的序列错误,可能是硬件故障的迹象。
传输层错误(Transaction Layer Errors):
可更正错误:
头部日志溢出: 即将溢出的未处理事件日志。
不可更正错误:
无法识别的TLP: 接收端无法识别的TLP。
流控错误: 流控制管理出错。
其他错误事件:
未达到的请求与完成超时: 发出的请求没有收到响应或者响应超时。
携带错位和突发事件: 数据携带和收发过程中的错位事件。
3.3 错误报告
PCIe使用高级错误报告(AER)来提供对错误的管理,其包括:
记录在相应的状态寄存器中: 每当发生错误时,错误事件的相关信息会被记录在特定的状态寄存器内。
错误消息: 发生错误时,会生成相应的错误消息,来通知主机或系统进行处理。
错误信号: 某些错误会触发硬件信号,例如,系统错误信号(System Error, SERR)。
3.4 错误处理
系统或设备接收到错误报告后,可以采取以下一种或多种措施来处理错误:
记录错误信息,并且根据错误重要性上报至操作系统或管理软件。
尝试进行错误校正(如果是可更正错误)。
系统管理员可以获取详细错误日志以分析故障原因并进行维修。
在不可更正错误出现时进行系统重启或其他必要的恢复操作。
总结:
PCIe架构在设计上已经大大改进了错误检测和处理机制,引入了更先进的技术如高级错误报告(Advanced Error Reporting, AER)等,因此,并不直接使用类似于传统PCI中的PERR和SERR信号。虽然在概念上PCIe继续支持通过其高级特性来表达相似的错误检测和报告机制,但它通过不同的方式实现这些功能,例如通过特定的消息和状态寄存器来报告和管理错误。
总的来说,虽然PERR和SERR这些信号源于早期的PCI技术,在PCIe中它们的直接应用被更高级的机制所替代,但理解它们对于理解计算机系统中的错误处理仍然是有帮助的。