小猫爪:S32K3学习笔记10-S32K3之EIM和ERM
小猫爪:S32K3学习笔记10-S32K3之EIM和ERM
- 1 前言
- 2 EIM(Error Injection Module)
- 3 ERM(Error Reporting Module)
- 4 MCAL配置和代码
- END
1 前言
这Safety第一站就是EIM(Error Injection Module)和ERM(Error Reporting Module)。看名字就知道这两个模块是一对大聪明,一个负责注入错误,一个负责汇报错误。
2 EIM(Error Injection Module)
首先得知道EIM这个注入错误的对象其实是S32K3的Memory。首先EIM把S32K3的整个Memory按照大小和功能总共分成了31个区域(众所周期,K3是有低配版,所以K3系列不是都有31个区域的,这一点具体得参考RM手册),然后为每个区域单独规划一个通道,即EIM总共有31个通道。
我截取部分通道如下(其他通道具体请参考RM手册EIM章节):
在表中能看到通道号和对应的区域,那么Data bits和Check bits,这两个东西代表着什么意思呢?其中Data bits指的是这个Memory总线上得数据位数,而Check bits则是对应的检验数。举个例子,在K3的Flash中是有ECC校验机制的,那么在这里,Data bits即为数据的位数,而Check bits即为ECC校验码的位数。
31个通道搞清楚了,那么EIM是怎么给目标区域注入错误的呢?EIM的功能框图如下所示:
可以很清楚的看到其实EIM的注入错误,并不是去真实的去改变目标地址的数据和校验值,而是在总线上做手脚,在data和check传输的过程中强行翻转bit,导致传输到其他模块的data和check不匹配,从而达到注入错误的目的。这手段简直就是树叶擦屁股,给爷漏了一手啊。所以说基于这个原理的话,只要你给相关区域注入了错误,那么只要访问这整个区域的任何一处地址那都会触发ECC错误。
原理搞清楚了,接下来看卡这个操作在寄存器中是怎么体现的。打开寄存器,EIM总共就三个寄存器,一个是EIMCR, EICHEN,EICHx_WORDy(x表示通道号),这也就意味着EIM的操作及其简单。
- 写EIMCR,使能全局EIM通道开关
- 写EICHEN,使能单个通道开关
- 写EICHx_WORDy,决定翻转data和check的哪一个bit,就把对应的bit置1(不同通道对应的bit分布在上面的表格中有描述)。
- 成功写入EICHx_WORDy后,EICHEN中单个通道的开关会被Disable。
这里需要注意一点,data和check建议只翻转一个,而且翻转控制在1bit和2bit。如果超过2bit的话可能会导致意想不到的事情发生。
3 ERM(Error Reporting Module)
再来看看EIM的大兄弟ERM,EIM负责注入错误,而ERM负责汇报错误。当然ERM不仅仅能汇报EIM注入的错误,只要是Memory处出现了相关的错误,那么ERM都能够检测出来。在这里可以提一下,这里的错误指的是相关Memory发生了ECC错误,因为K3的Memory都是有ECC检测机制的。
ERM则是根据访问Memory的不同主机以及访问的不同区域划分出不同的Module,每个module对应一个通道,总共有20个通道,如下:
在表中可以清晰的看到不同通道号对应的不同Module,以及一个叫做Capture Status,描述了当ERM检测到memory错误时,它最后能汇报出的该错误的信息。其中single-bit error和multi-bit error为错误类型,其中single为可纠正错误,而multi为不可纠正错误;sysdrome为ECC校验的sysdrome值,此外还有发生错误的物理地址。
这里扯个题外话,有人可能会有疑问,表中的17,18,19三个通道分别是FLASH的port0,1,2,这三个port分别代表什么?这就要涉及到K3的FLASH的访问端口了,K3根据FLASH的不同访问主机整出了三个访问端口,如下:
其中p0是给CM7_0用的,p2是给CM7_用的,而p1则是给其他主机用的,如HSE,DMA。这就是ERM通道表中17,18,19通道的由来。
ERM的工作机制非常简单,当检测到Memory发生了ECC错误的时候,相关标志置位,记录错误发生的地址和sysdrome,如果使能了中断,那么会产生相应的中断。
再来看看其在寄存器中的体现,ERM的寄存器有CRx, SRx,EARx,SYNx,CORR_ERR_CNTx(x表示通道号)。
- 配置CRx,根据需求使能相关中断
- 检测到错误时,SRx相关标志置位
- EARx记录发生错误的地址,SYNx记录ECC sysdrome
- CORR_ERR_CNTx错误累加器加1
- 如果使能了中断,则产生中断,用户可在中断中进行相关错误处理操作
4 MCAL配置和代码
EIM和ERM的MCAL的配置非常简单,甚至在MCAL中都没有单独的配置模块和分块,如果要使用EIM和ERM,只需要在Mcu模块中使能一下两者的时钟即可,如下:
关于EIM和ERM的MCAL驱动不在RTD标准包里面,而是在SPD软件包里,SPD在NXP官网上就可以下载,下载完发现在SPD的安装包里面只有四个模块:
EIM和ERM的功能则是集成在了eMcem中,而关于EIM和ERM的使用大多就是使用EIM注入错误,用ERM得到错误信息并处理。与EIM和ERM有关的函数有如下:
//注入错误
Std_ReturnType eMcem_InjectFault( eMcem_FaultType nFaultId );
//清除错误标记
Std_ReturnType eMcem_ClearFaults( eMcem_FaultType nFaultId );
//获取ERM错误信息
Std_ReturnType eMcem_GetMemErrInfo( eMcem_ChannelType nChannelId, eMcem_MemErrInfoType *pInfo );
//配置EIM错误bit
Std_ReturnType eMcem_SetupInjectionChannel( eMcem_FaultType nChannelId, uint16 u16BitPos1, uint16 u16BitPos2 );
在这里就不做例子了,因为除了ERM(负责收集Memory的ECC错误)之外,K3还有一个更大的错误收集器,那就是FCCU,它可以收集ERM所有的错误,此外,它还收集了K3内部的所有错误,所以一般都是使用EIM注入错误,使用FCCU来处理,而ERM只是用来协助错误处理的工具人。等说到FCCU的时候,将三者集合在一起出个示例。
END
小猫爪:S32K3学习笔记10-S32K3之EIM和ERM相关推荐
- 小猫爪:S32K3学习笔记05-S32K3之ADC
小猫爪:S32K3学习笔记05-S32K3之ADC 1 前言 2 资源简介 3 ADC功能详解 3.1 ADC mux-mode channels 3.2 ADC内部框架 3.3 时钟源 3.4 通道 ...
- 小猫爪:S32K3学习笔记03-S32K3之eMIOS
小猫爪:S32K3学习笔记03-S32K3之eMIOS 1 前言 2 eMIOS资源介绍 3 CNT和Counter Bus 4 UC的工作模式 4.1 General-Purpose Input a ...
- 小猫爪:S32K3学习笔记20:S32K3之SCST及其应用
小猫爪:S32K3学习笔记20:S32K3之SCST及其应用 1 前言 2 SCST简介 3 移植 4 应用 4.1 启动测试 4.2 使能FPU相关测试项 4.3 49号测试项中的MPU配置 4.4 ...
- 小猫爪:S32K3学习笔记09-S32K3之Safety简介
小猫爪:S32K3学习笔记09-S32K3之Safety简介 1 前言 2 Safety相关硬件介绍 3 Safety相关软件介绍 4 Safety文章目录 END 1 前言 接下来,就要开始进学 ...
- 小猫爪:S32K3学习笔记11-S32K3之FCCU
小猫爪:S32K3学习笔记11-S32K3之FCCU 1 前言 2 FCCU的功能框图 2.1 错误输入 2.2 时钟输入 2.3 FSM 2.4 FOSU 3 FCCU的状态机 4 MCAL配置 5 ...
- 小猫爪:S32K3学习笔记04-S32K3之LCU
小猫爪:S32K3学习笔记04-S32K3之LCU 1 前言 2 LCU的框架 3 LC逻辑运算单元 3.1 input&output&sync&force 3.2 LUT b ...
- 小猫爪:S32K3学习笔记21-S32K3之SAF及其应用
小猫爪:S32K3学习笔记21-S32K3之SAF及其应用 1 前言 2 SAF简介 3 SAF框架 4 SAF组件 4.1 eMcem和Bist 4.2 sReco 4.3 mSel 4.4 sBo ...
- 小猫爪:S32K3学习笔记17-S32K3之数据完整性的保障和手段
小猫爪:S32K3学习笔记17-S32K3之数据完整性的保障和手段 1 前言 2 三个保障 2.1 EDC 2.2 XBIC 2.3 ECC 3 一个手段 END 1 前言 大家都知道,怎样保证数 ...
- 小猫爪:S32K3学习笔记18-S32K3之Safety外设总结
小猫爪:S32K3学习笔记18-S32K3之Safety外设总结 总结 END 总结 在前面已经对S32K3对功能安全这一块相关的外设大致都介绍了一遍,这篇文章就来对S32K3与Safety有关的 ...
最新文章
- 感恩有你,链客一周年!
- ASP.NET Razor – C# 循环和数组简介
- vc6.0上安装qt插件
- 递归算法学习系列之寻找第K大
- 树形结构的数据存储和数据库表设计
- Java内部类详解(转)
- 玩的时候好好玩,学的时候好好学。不做半吊子
- C#命名规范,SqlServer命名规范
- 让 Android WebView 支持文件下载的三种解决方案
- bat脚本保存dir结果_MySQL备份脚本,应该这么写
- 在创建maven项目时出现: GC overhead limit exceeded 问题
- 如何从stackoverflow的api 中获取是数据_如何修复Vue中的 “this is undefined” 问题
- VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性
- Python 3.7 pygame 下载方法
- QT 5.9.5的快捷键操作
- 怎么用ps整合html图片,如何用PS把两张图片合并在一起?
- 安卓如何修改dns服务器地址,安卓手机怎么修改DNS?安卓手机修改DNS服务器图文详情介绍[多图]...
- PHP 实现身份证号实名认证功能
- 三进制 四进制计算机原理,三进制计算机(中国三进制计算机)
- mysql的基础查阅
热门文章
- easyExcel中合并单元格文件读取实现方案
- wap视频广告遇到的问题
- g54y6huj6yh
- 用vb脚本语言找出c盘所有文件及其子文件中后缀名为.txt的文档,2012年3月计算机二级VB练习题及答案:文件...
- Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果)...
- java gul_[java实战篇]--java的GUI(1)
- Apache ECharts的缘起和发展
- 用友T3软件超值的打印秘籍,你值得收藏!
- BCD码中的8421码 2421码 5421码和余3码的简单使用
- 神武3服务器神武币交易中心,《神武3》电脑版:神武币使用方向攻略,神武币如何花在刀刃上...