PCIE学习笔记--PCIe错误源详解(二)
转载地址:http://blog.chinaaet.com/justlxy/p/5100057799
这篇文章主要介绍事务(Transaction)错误、链路流量控制(Link Flow Control)相关的错误、异常的TLP(Malformed TLP)以及内部错误(Internal Errors)等。
事务(Transaction )错误
事务错误主要包括不支持的请求(Unsupported Request)、Completer Abort、非预期的Completion和Completion超时。该错误类型主要通过返回的Completion TLP包头中的Compl. Status告知Requester,如下图所示。另外,之前介绍TLP Header的文章中也简单地提到过相关内容,可以回顾一下:http://blog.chinaaet.com/justlxy/p/5100053354
不支持的请求(Unsupported Request)主要包括:
1. 请求类型不被当前PCIe设备支持
2. 消息中使用了不支持或者未定义的消息编码
3. 请求的地址空间超出(或者不在)设备的地址空间中
4. 针对Completer的IO或者存储映射控制空间(Memory-mapped Control Space)进行的Poisoned写操作(EP=1)
5. Root或者Switch的Downstream端口接收到针对其二级总线(Secondary Bus)上的不存在的设备的配置请求(Configuration Request)
6. Endpoint接收到Type1型的配置请求
7. Completion中使用了保留的Completion状态编码(参考上面的表格)
8. 设备(的某个功能,Function)处于D1、D2或者D3hot电源管理状态时,却接收到了除了配置请求和消息之外的内容
Completer Abort(CA)主要包括:
1. Completer接收的特殊请求,只有在违背其规则的情况下才能对该请求进行响应(返回Completion)
2. 因为某些恒定的错误状态(Permanent Error Condition),导致Completer无法响应接收到的请求
3. Completer接收到存在访问控制服务错误(Access Control Services Error,ACS Error)的请求
4. PCIe-to-PCI桥接收到针对其连接的PCI设备的请求,但是该PCI设备无法处理该请求
非预期的Completion主要包括:
1. Requester接收到的Completion和其发出的Request不一致
Completion超时:
所有的PCIe设备都必须支持Completion超时定时器,除非该设备只是用于初始化配置事务的。需要注意的是,PCIe设备必须能够针对多个事务(Transaction)分别计时。PCIe 1.x和2.0的Spec建议超时时间最好设置为10ms至50ms之间,对于一些特殊情况,超时时间最低可设置为30us。PCIe 2.1 Spec开始,增加了第二设备控制寄存器(Device Control Register 2)用于查看和控制超时时间的值。如下图所示:
如果,某个请求对应多个Completion,那么除了最后一个Completion,其他的Completion不会造成该请求的定时器停止计时。
链路流量控制(Link Flow Control)相关的错误
链路流量控制相关的错误主要有:
1. 在FC初始化时,链路相邻设备无法完成针对任何一个VC的,最小的FC Credits的交换更新(Advertises)
2. 链路相邻设备交换更新(Advertises)的FC Credits超过了最大值(Data Payload最大为2047,Header最大为127)
3. 链路相邻设备交换更新时,FC Credits为非零值,且该链路的FC Credits之前已经被初始化为无限值了
4. 接收端Buffer溢出,导致数据丢失(可选的,但是如果使能,则认为是Fatal Error)
关于Flow Control可以参考之前的文章:http://blog.chinaaet.com/justlxy/p/5100053464
和http://blog.chinaaet.com/justlxy/p/5100053465
异常的TLP(MalformedTLP)
异常的TLP(Malformed TLP)错误主要有:
1. Data Payload超过了最大值(Max Payload Size)
2. 数据长度(Data Length)与包头中的长度值不一致
3. 存储地址起始位置跨越了4KB边界(Naturally-aligned 4KB Boundary)
4. TD(TLP Digest)的值与ECRC是否使用不一致
5. 字节使能冲突(Byte Enable Violation)
6. 未定义的类型值(Type Field Values)
7. Completion违反了RCB(Read Completion Boundary)值
8. 针对非配置请求返回的Completion中的状态为配置请求重试状态(Configuration Request Retry Status)
9. TC域包含了一个未被分配到当前使能的VC的值(也被称为TC Filtering)
10. IO或者配置请求冲突(可选的)
11. 中断Emulation消息向下发送(可选的)
12. TLP前缀错误(具体请参考PCIe Spec V2.0的2.2~2.6相关章节)
内部错误(Internal Errors)
一般指的是Switch等桥设备内部产生的错误
PCIE学习笔记--PCIe错误源详解(二)的更多相关文章
- IP2——IP地址和子网划分学习笔记之《子网掩码详解》
2018-05-04 16:21:21 在学习掌握了前面的<进制计数><IP地址详解>这两部分知识后,要学习子网划分,首先就要必须知道子网掩码,只有掌握了子网掩码这部分内容 ...
- MyBatis学习笔记2--配置环境详解
1.MyBatis-config.xml详解 一个完整的配置文件如下所示 <configuration> <!-- <properties resource="jdb ...
- 【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析
这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处 ...
- jQuery学习笔记之Ajax用法详解
这篇文章主要介绍了jQuery学习笔记之Ajax用法,结合实例形式较为详细的分析总结了jQuery中ajax的相关使用技巧,包括ajax请求.载入.处理.传递等,需要的朋友可以参考下 本文实例讲述了j ...
- [读书笔记]C#学习笔记三: C#类型详解..
前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...
- [Spring学习笔记 5 ] Spring AOP 详解1
知识点回顾:一.IOC容器---DI依赖注入:setter注入(属性注入)/构造子注入/字段注入(注解 )/接口注入 out Spring IOC容器的使用: A.完全使用XML文件来配置容器所要管理 ...
- CSS学习笔记(9)--详解CSS中:nth-child的用法
详解CSS中:nth-child的用法 前端的哥们想必都接触过css中一个神奇的玩意,可以轻松选取你想要的标签并给与修改添加样式,是不是很给力,它就是“:nth-child”. 下面我将用几个典型的实 ...
- ubuntu学习笔记-tar 解压缩命令详解(转)
tar 解压缩命令详解 -c: 建立压缩档案 -x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能 ...
- STM32学习笔记:IIC通信协议详解(附带软件模拟源码)
什么是IIC(I2C)? IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司设计出来的一种简单.双向.二线制.同步串行总线.它是一种多向控制总 ...
随机推荐
- Spring Cloud Eureka 之常用配置解析
[原创内容,转载.引用请注明出处] 1. 配置项解析 1.1 通用配置 # 应用名称,将会显示在Eureka界面的应用名称列 spring.application.name=config-servic ...
- 双非Java的学习之旅以及秋招路程
个人信息: 趁着中秋写个帖子记录一下吧.渣渣本,无实习,无高质量证书,走了很多弯路,最后选择的Java后端.现在算是半躺平了,接了几个中小厂的offer保底,20w多的薪资,后面还有几家公司接着面.不 ...
- js设计模式之发布订阅模式
1. 定义 发布-订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知. 订阅者(Subscriber)把自己想订阅的事件注册(Subscri ...
- ecshop刷新页面出现power by ecshop和链接的解决办法
当小伙伴在使用echop模板进行修改的时候,如果你删掉底部自带版权后,再调试程序刷新界面的时候,时不时就会冒出一个power by ecshop,而且是带有链接的,很不舒服,所以需要去掉,下面是最简单 ...
- Jenkins操作手册 - 巨详细,一篇足矣!
一.继续集成相关概念 1.1.什么是持续集成? 随着软件开发复杂度的不断提高,团队开发成员间如何更好的协同工作以确保软件开发的质量已经成为开发过程中不可回避的问题.尤其是近年来敏捷开发在软件领域越来越 ...
- Docker系列(6)- 常用命令(2) | 镜像命令
准备工作 知道查看官方文档,官方文档描述的很详细,并且每一种类型.每一个命令的选项都有例子 会使用docker --help查看 镜像命令 docker images 查看所有本地主机上的镜像 [ro ...
- Java线程类
基础知识 线程状态 根据Thread.State类中的描述,Java中线程有六种状态:NEW,RUNNABLE,WAITING,TERMINATED,BLOCKED. 就绪状态(NEW):当线程对象调 ...
- 关于python中的可哈希与不可哈希
可哈希:简要的说可哈希的数据类型,即不可变的数据结构(字符串str.元组tuple.对象集objects).它是一个将大体量数据转化为很小数据的过程,甚至可以仅仅是一个数字,以便我们可以用在固定的时间 ...
- 【CTF】msf和impacket联合拿域控内网渗透-拿域控
前言 掌控安全里面的靶场内网渗透,练练手! 内网渗透拿域控 环境:http://afsgr16-b1ferw.aqlab.cn/?id=1 1.进去一看,典型的sql注入 2.测试了一下,可以爆库,也 ...
- WPF进阶技巧和实战01-小技巧
Svg在WPF中的使用 方法1:拷贝svg中的部分代码转换成Geometry(作为Path的Data使用) 在vs或者直接打开svg,看到如下代码: <?xml version="1. ...