小猫爪: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的操作及其简单。

  1. 写EIMCR,使能全局EIM通道开关
  2. 写EICHEN,使能单个通道开关
  3. 写EICHx_WORDy,决定翻转data和check的哪一个bit,就把对应的bit置1(不同通道对应的bit分布在上面的表格中有描述)。
  4. 成功写入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表示通道号)。

  1. 配置CRx,根据需求使能相关中断
  2. 检测到错误时,SRx相关标志置位
  3. EARx记录发生错误的地址,SYNx记录ECC sysdrome
  4. CORR_ERR_CNTx错误累加器加1
  5. 如果使能了中断,则产生中断,用户可在中断中进行相关错误处理操作

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相关推荐

  1. 小猫爪: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 通道 ...

  2. 小猫爪:S32K3学习笔记03-S32K3之eMIOS

    小猫爪:S32K3学习笔记03-S32K3之eMIOS 1 前言 2 eMIOS资源介绍 3 CNT和Counter Bus 4 UC的工作模式 4.1 General-Purpose Input a ...

  3. 小猫爪:S32K3学习笔记20:S32K3之SCST及其应用

    小猫爪:S32K3学习笔记20:S32K3之SCST及其应用 1 前言 2 SCST简介 3 移植 4 应用 4.1 启动测试 4.2 使能FPU相关测试项 4.3 49号测试项中的MPU配置 4.4 ...

  4. 小猫爪:S32K3学习笔记09-S32K3之Safety简介

    小猫爪:S32K3学习笔记09-S32K3之Safety简介 1 前言 2 Safety相关硬件介绍 3 Safety相关软件介绍 4 Safety文章目录 END 1 前言   接下来,就要开始进学 ...

  5. 小猫爪: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 ...

  6. 小猫爪:S32K3学习笔记04-S32K3之LCU

    小猫爪:S32K3学习笔记04-S32K3之LCU 1 前言 2 LCU的框架 3 LC逻辑运算单元 3.1 input&output&sync&force 3.2 LUT b ...

  7. 小猫爪: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 ...

  8. 小猫爪:S32K3学习笔记17-S32K3之数据完整性的保障和手段

    小猫爪:S32K3学习笔记17-S32K3之数据完整性的保障和手段 1 前言 2 三个保障 2.1 EDC 2.2 XBIC 2.3 ECC 3 一个手段 END 1 前言   大家都知道,怎样保证数 ...

  9. 小猫爪:S32K3学习笔记18-S32K3之Safety外设总结

    小猫爪:S32K3学习笔记18-S32K3之Safety外设总结 总结 END 总结   在前面已经对S32K3对功能安全这一块相关的外设大致都介绍了一遍,这篇文章就来对S32K3与Safety有关的 ...

最新文章

  1. 感恩有你,链客一周年!
  2. ASP.NET Razor – C# 循环和数组简介
  3. vc6.0上安装qt插件
  4. 递归算法学习系列之寻找第K大
  5. 树形结构的数据存储和数据库表设计
  6. Java内部类详解(转)
  7. 玩的时候好好玩,学的时候好好学。不做半吊子
  8. C#命名规范,SqlServer命名规范
  9. 让 Android WebView 支持文件下载的三种解决方案
  10. bat脚本保存dir结果_MySQL备份脚本,应该这么写
  11. 在创建maven项目时出现: GC overhead limit exceeded 问题
  12. 如何从stackoverflow的api 中获取是数据_如何修复Vue中的 “this is undefined” 问题
  13. VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性
  14. Python 3.7 pygame 下载方法
  15. QT 5.9.5的快捷键操作
  16. 怎么用ps整合html图片,如何用PS把两张图片合并在一起?
  17. 安卓如何修改dns服务器地址,安卓手机怎么修改DNS?安卓手机修改DNS服务器图文详情介绍[多图]...
  18. PHP 实现身份证号实名认证功能
  19. 三进制 四进制计算机原理,三进制计算机(中国三进制计算机)
  20. mysql的基础查阅

热门文章

  1. easyExcel中合并单元格文件读取实现方案
  2. wap视频广告遇到的问题
  3. g54y6huj6yh
  4. 用vb脚本语言找出c盘所有文件及其子文件中后缀名为.txt的文档,2012年3月计算机二级VB练习题及答案:文件...
  5. Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果)...
  6. java gul_[java实战篇]--java的GUI(1)
  7. Apache ECharts的缘起和发展
  8. 用友T3软件超值的打印秘籍,你值得收藏!
  9. BCD码中的8421码 2421码 5421码和余3码的简单使用
  10. 神武3服务器神武币交易中心,《神武3》电脑版:神武币使用方向攻略,神武币如何花在刀刃上...