PCIe扫盲—PCIe错误检测机制的详细资料概述

pcie总线错误检测囊括了链路(link)上的错误以及包传递过程中的错误,如下图所示。用户设计的应用程序层中的错误不属于链路传输中的错误,不应当通过pcie的错误检测与处理机制处理,一般可借助设备特殊中断(device specific interrupt)等合适的方式进行报告与处理。
包传递过程的错误主要通过crc编码来检测。pcie定义了两种crc——lcrc和ecrc。其中lcrc(link crc)由数据链路层产生和校检,用于检测从一端的数据链路层发送到另一端的数据链路层的tlp是否发生的错误。而ecrc(end-to-end crc)由事务层产生和校检,且ecrc是可选的。
有人可能会质疑ecrc存在的必要性,因为lcrc已经对tlp进行了crc校检,在此基础上多加一层ecrc可能是没有必要的。这里来简单地说明一下,一般情况下(尤其是没有switch的简单pcie总线系统中),ecrc的确是没有必要存在的。ecrc主要为解决switch中传输的可能错在的传输错误问题的,换句话说,如果用户的设计中并没有switch(只是简单的root与endpoint的端对端直连),完全可以不使用ecrc。
如下图所示,假设来自endpoint的tlp被正确地传输到switch的downstream输入端口(ingress port),downstream输入端口中的数据链路层也完成了对其的lcrc校检,且未发现错误。然后switch会将该lcrc移除,并添加新的序列号(sequence number),随后重新计算lcrc,再将该tlp发送至switch的upstream输出端口(egress port)。显然,在此过程中tlp是不受保护的,一旦期间数据传输遇到错误等异常,可能会导致重新计算lcrc前的数据已经受到了破坏,且仅仅使用lcrc是无法发现这样的错误的。
注:关于序列号(sequence number),可以参考前面的关于ack/nak的相关文章。
需要注意的是,ecrc是aer中的一部分,要想使用ecrc,该pcie设备必须是支持aer的。
如果按照错误产生的层(layer)来分,则可以分为物理层错误,数据链路层错误和事务层错误。
物理层错误(physical layer errors)主要有:
· 8b/10b编解码异常
· framing异常(8b/10b编码中是可选的,128b/130b中是必选的)
· elastic buffer错误(可选的)
· 起始字符失锁(loss of symbol lock)或者通道对齐失锁(lane deskew)(可选的)
数据链路层错误(data link layer errors)主要有:
· lcrc校检失败
· 序列号(sequence number)异常
· dllp中的16-bit crc校检失败
· 链路层协议错误(link layer protocol errors)
事务层错误(transaction layer errors)主要有:
· ercr校检失败(可选的)
· 异常的tlp(malformed tlp)(即tlp的格式异常)
· 流量控制协议异常(flow control protocol violation)
· 不支持的请求
· 数据损坏(data corruption,又称为poisoned packet)
· completer abort(可选的)
· 接收端溢出(receiver overflow)(可选的)
· 返回包超时(completion timeout)
· 不对应的返回包(unexpected completion,即completion与发出的request不一致)
当接收端的物理层检测到tlp存在错误时,如果再将该tlp继续传送至数据链路层和事务层必然也会发现错误。而过多的错误会让错误分析与处理变得困难。因此,没有必要在向上传递该tlp,而是将其直接扔掉,并报告相应的错误。
然而,即使这样,pcie总线的错误报告中也有很多错误源自同一个错误源。因此需要对错误进行优先级排序,使得错误源(最底层的错误)的优先级更高,能够最先得到处理。pcie总线中的错误优先级排序如下(优先级从高到低):
· 不可更正的内部错误(uncorrectable internal error)
· 接收端buffer溢出
· 流量控制协议错误
· ecrc校检失败
· 异常的tlp(malformed tlp)
· atomicop egress blocked
· tlp包头异常(tlp prefix blocked)
· 访问控制服务(access control services,acs)异常
· mc(multi-cast) blocked tlp
· 不支持的请求(unsupported request,ur),completer abort(ca)或者不对应的返回包(unexpected completion)
· 接收到损坏的数据包(poisoned packet)

作为“世界工厂”的中国,机器人产业该如何发展
行业协会标准免费下载|T/CSA 070-2021 《多功能杆结构设计规范》
MAX15109电流模式开关稳压器
MS6212是一款双向电平转换器,它的作用都有哪些
安科瑞交流多回路智能电量采集监控装置应用于河南某高速公路项目探讨 安科瑞周静娴
PCIe扫盲—PCIe错误检测机制的详细资料概述
英创信息技术精简ISA总线Linux编程–Part1
电热毯温控器电路图
由智能手机控制的无人驾驶小车
中国教授在人工智能芯片领域的最新工作
深康佳与滁州140亿元战略合作落地
经纬恒润二代尾门模块成功配套多款主流车型
人脸识别摄像头模组的广泛应用场景
人工智能已成为我们日常生活中重要的组成部分
DALI2解码模块使用手册
三元锂电池和氢燃料电池两者到底哪里不一样
IOS11最新消息,IOSbeta2正式于今天发布,它到底更新了哪些功能?
AI的技术发展非常快 只有不断进步才能跟上时代潮流
医疗呼吸机的适应症有哪些,它一般用于什么类型的病患
三星投资CPU公司以研发医疗电子技术