0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MARCH 主要提供了哪两种 RAM 检测方式?

lhl545545 来源:与非网 作者:佚名 2020-08-28 14:44 次阅读

随着越来越多的工业应用对产品的可靠性和安全性要求越来越高,我们在做产品设计的时候不仅要正确的实现产品功能,同时也需要通过一些功能安全认证,比如家电行业的 IEC60730 等或者 ISO13849 等。一般的系统故障可以通过设计的迭代和严格测试来避免,但是硬件的随机失效理论上是无法完全消除的,所以要想提高硬件随机失效的诊断覆盖率,就需要软硬件诊断机制来保障。

作为系统的核心控制部分,MCU 主平台的诊断机制就是最关键的部分。针对一般通用的 MCU,以 Piccolo C2000 系列为例,硬件上提供了一些诊断或者校验机制,如下所示:

MARCH 主要提供了哪两种 RAM 检测方式?

同时 TI 也提供了一些软件诊断方案,如 MSP430 IEC60730 Software Package 和 C2000 SafeTI 60730 SW Packages 软件库等,可以提供很多的诊断测试功能,例如 CPU时钟、外设、RAM 等的诊断,已经可以满足一部分的需求。如下图所示为 C2000 SafeTI 60730 SW Packages 中的功能和资源消耗。

然而在实际的应用中,有些安全标准要求对 RAM 进行周期性的在线诊断,同时不能影响程序的正常运行。但是程序在运行过程中存储在 RAM 中的数据会实时的变化,而 RAM 的诊断往往会破坏这些存储的数据,比如电机控制类的实时性要求较高的场合。所以在没有 ECC 的情况下,如何对 RAM 进行实时在线的诊断是一个值得讨论的问题。

下面以电机控制为例,讨论硬件校验的实现,尤其是 RAM 在线检测的过程。

1. 系统软件流程

非破坏性的诊断可以放在背景循环里面进行,这些软件诊断不会对实时性中断造成影响,例如看门狗测试,内部晶振测试,FLASH CRC 校验,静态变量 RAM CRC 校验,堆栈溢出判断,以及 GPIO 口诊断等。另外一些破坏性的或者对实时控制有影响的诊断,可以放到主中断中进行,如 RAM March 校验,ALU 诊断以及 CPU 寄存器诊断等。具体流程图如下所示:

MARCH 主要提供了哪两种 RAM 检测方式?

2. RAM 诊断的方法

以 C2000 SafeTI 60730 SW Packages 为例,主要提供了两种 RAM 检测方式。

一种是 CRC 检测 STL_CRC_TEST_testRam,此功能用于测试 RAM 的位错误。该测试以 0 和 1 的交替模式填充被测 RAM 区域,并使用 PSA 计算 RAM 的 CRC。对于给定的 RAM 存储器区域,如果 RAM 存储器中没有任何 stuck bit,则 CRC 值应始终相同。并行串行分析器(PSA)是 c28x 器件中的一个模块,可用于生成 40 位给定存储区域上的 CRC。 PSA 多项式为 Y = x40 + x21 + x19 + x2 + 1。PSA 通过监视数据读取数据总线(DRDB)来计算 CRC 值。 一旦激活就会监控 Data Read Data Bus (DRDB),当 CPU 通过 DRDB 读取数据时,PSA 每个时钟周期会为 DRDB 上的数据生成一个 CRC。由于此测试具有破坏性,因此需要将要测试的 RAM 内容保存到单独的 RAM 位置。

MARCH 主要提供了哪两种 RAM 检测方式?

当然也可以使用软件 CRC 的方式,使用起来更灵活,并且可以选择非破坏性的方式来计算 CRC,对一些静态常量存储的区域可以考虑这种 CRC 方式。另外一点是软件 CRC 算法可以更方便的进行代码评估,以满足不同安全标准的要求。

另一种是 MARCH 检测 STL_MARCH_TEST_testRam,此功能直接对 RAM 进行 32bit 的读写测试,可以选择进行 MarchC 13N 或者 MarchC- 测试。由于此测试具有破坏性,因此也需要将要测试的 RAM 内容保存到单独的 RAM 位置。

3. RAM 在线检测的实现

由于需要周期性的 RAM 检测,以电机控制为例,可以将 RAM 检测放到主中断里面执行。同时关键是不能影响控制程序的运行和实时性,所以主要考虑两点:

第一是主中断时间有限,要尽可能减小 RAM 检测的时间,所以可以将 RAM 分成多个小段进行检测,每段 RAM 越小,占用中断的时间越小,但是所有 RAM 检测一遍的时间会变长,这个需要综合考虑。

第二是不能破坏 RAM 中的变量值,所以在检测是之前将 RAM 段中的内容保存到专门区域,戴检测完成并且通过之后,再将保存好的数据恢复过来,使用 memCopy 来提高效率。

具体实现方法如下:

首先定义好各个 RAM 区间的地址范围,可以参考具体的数据手册,如下所示:

MARCH 主要提供了哪两种 RAM 检测方式?

然后定义好检测的范围和每次检测的数据长度:

MARCH 主要提供了哪两种 RAM 检测方式?

注意由于 STL_MARCH_TEST_testRam 函数执行 32 位读 / 写测试,而在测试 RAM 单元阵列时,由于 RAM 单元的 16 位体系结构,所以要求起始地址为偶数,结束地址为奇数,可以测试的最大内存范围限制为 65535 个 32 位字。所以要求测试长度也需要为奇数。

在主中断里面的 RAM 在线检测函数里,首先将要检测区域的 RAM 值保存下来:

if ((gStructSTLMonitor.NowRamAddrStart 》= MARCH_RAM_START)

&& (gStructSTLMonitor.NowRamAddrStart 《= (MARCH_RAM_END-RAM_CHK_NUM)))

{

gStructSTLMonitor.NowRamAddrEnd = gStructSTLMonitor.NowRamAddrStart + RAM_CHK_NUM;

memCopy((uint16_t *)gStructSTLMonitor.NowRamAddrStart,(uint16_t *)

gStructSTLMonitor.NowRamAddrEnd,(uint16_t *)MARCH_RAM_BK);

}

然后进行检测:

gStructSTLMonitor.status = STL_MARCH_TEST_testRam((uint32_t *)

gStructSTLMonitor.NowRamAddrStart,(uint32_t *)gStructSTLMonitor.NowRamAddrEnd);

if(gStructSTLMonitor.status != SIG_RAM_MARCH_TEST)

{

STL_SetFail();

}

else

{

memCopy((uint16_t *)MARCH_RAM_BK,(uint16_t *)(MARCH_RAM_BK + RAM_CHK_NUM),

(uint16_t *)gStructSTLMonitor.NowRamAddrStart);

gStructSTLMonitor.NowRamAddrStart = gStructSTLMonitor.NowRamAddrEnd + 1;

gStructSTLMonitor.gTestStep++;

}

注意检测成功之后马上恢复当前区域的 RAM 值,并为下一次检测做好准备。如果检测发现故障,则进入故障处理函数。
责任编辑:pj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5357

    浏览量

    120622
  • 存储器
    +关注

    关注

    38

    文章

    7513

    浏览量

    163981
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1369

    浏览量

    114765
收藏 人收藏

    评论

    相关推荐

    常见人体姿态评估显示方式两种方式

    人体姿态评估中有两种常见的显示方式,分别是火柴人效果与BodyPix效果。其中火柴人效果本质就是基于关键点的深度学习模型推理以后的显示效果;Bodypix本质就就是语义分割模型
    的头像 发表于 11-11 11:21 238次阅读
    常见人体姿态评估显示<b class='flag-5'>方式</b>的<b class='flag-5'>两种</b><b class='flag-5'>方式</b>

    什么是电流保护的接线方式?有两种接线方式?

    方式。下面将对这两种接线方式进行介绍。 一、完全星形接线方式 完全星形接线方式,也称为三相三继电器接线
    的头像 发表于 10-06 17:37 1502次阅读
    什么是电流保护的接线<b class='flag-5'>方式</b>?有<b class='flag-5'>哪</b><b class='flag-5'>两种</b>接线<b class='flag-5'>方式</b>?

    Linux应用层控制外设的两种不同的方式

    众所周知,linux下一切皆文件,那么应用层如何控制硬件层,同样是通过 文件I/O的方式来实现的,那么应用层控制硬件层通常有两种方式
    的头像 发表于 10-05 19:03 570次阅读
    Linux应用层控制外设的<b class='flag-5'>两种</b>不同的<b class='flag-5'>方式</b>

    示波器两种衰减方式的区别是什么

    两种:内部衰减和外部衰减。 内部衰减 内部衰减是指示波器内部对输入信号进行衰减的方式。内部衰减器通常由电阻和电容组成,通过改变电阻和电容的参数,实现对输入信号的衰减。内部衰减器的优点如下: 1.1 精度高:内部衰减
    的头像 发表于 08-09 14:41 500次阅读

    接地保护分为两种方式

    接地保护是电气工程中非常重要的一安全措施,其目的是确保电气设备和系统在发生故障时能够安全地将电流导向地面,从而保护人身安全和设备安全。接地保护主要分为两种方式:工作接地和保护接地。以
    的头像 发表于 08-05 10:24 1160次阅读

    plc与传感器的两种连接方式

    在工业自动化领域,PLC(可编程逻辑控制器)与传感器的连接是实现自动化控制的关键环节。本文将详细介绍PLC与传感器的两种主要连接方式:模拟量连接和数字量连接。这两种连接
    的头像 发表于 07-25 09:36 1470次阅读

    wdm设备的两种传输方式

    系统中,有多种传输方式,其中最常见的两种是密集波分复用(DWDM)和粗波分复用(CWDM)。 1. 密集波分复用(DWDM) 1.1 DWDM技术原理 密集波分复用(Dense Wavelength Division Multiplexing,简称DWDM)是一
    的头像 发表于 07-18 09:45 501次阅读

    三相负载的连接方式两种

    三相负载的连接方式主要有星形连接(Y连接)和三角形连接(Δ连接)两种。这两种连接方式在电气工程中非常常见,它们各自具有不同的特性和应用场景。
    的头像 发表于 07-17 10:33 4820次阅读

    控制器有两种实现方式?各有何优缺点?

    控制器是计算机系统中的一个关键组件,负责协调和管理计算机硬件和软件资源。在不同的应用场景和系统中,控制器的实现方式可能会有所不同。以下是两种常见的控制器实现方式:硬件控制器和软件控制器。本文将详细
    的头像 发表于 06-30 10:33 1362次阅读

    PCBA加工中常见的两种焊接方式详解

    ,在PCBA行业中经常被使用。接下来深圳PCBA加工厂家为大家详细介绍PCBA加工手工焊接的两种方式,为您揭秘行业内的技术细节。 PCBA加工过程中常用焊接方式 第一
    的头像 发表于 06-14 09:18 567次阅读

    交流电机分为两种

    交流电机是工业和日常生活中最常见的电机类交流电机分为两种型之一,它们将交流电能转换为机械能。根据其运行原理和结构特点,交流电机一般分为同步电机和异步电机大类。 交流同步电机 交流同步电机其转子由
    的头像 发表于 06-09 15:17 690次阅读

    电动汽车的充电方式两种

    随着电动汽车(EVs)的普及,充电站的建设也在全球范围内迅速扩展。电动汽车充电站主要分为大类:交流充电站和直流充电站。这两种充电站各有特点,为不同类型的电动车辆提供充电服务。 交流充
    的头像 发表于 05-16 17:19 803次阅读

    异或门两种常见的实现方式

    两种实现方式都能够实现异或门的功能,具体的选择取决于设计需求和逻辑门的可用性。实际构建异或门时,可以使用离散电子元件(如晶体管、二极管等)或整合电路芯片(如 TTL、CMOS 等)来实现。
    的头像 发表于 02-04 17:30 1.3w次阅读
    异或门<b class='flag-5'>两种</b>常见的实现<b class='flag-5'>方式</b>

    外部中断有两种触发方式?如何选择和设定?

    外部中断有两种触发方式:电平触发和边沿触发** 。
    的头像 发表于 01-28 17:31 6432次阅读
    外部中断有<b class='flag-5'>哪</b><b class='flag-5'>两种</b>触发<b class='flag-5'>方式</b>?如何选择和设定?

    晶振中的抖动有两种主要类型?

    晶振中的抖动有两种主要类型? 晶振中的抖动主要分为相位抖动和频率抖动。 相位抖动是指晶振输出信号相位的随机波动。这种波动可能是由于晶体本身的不完美造成的,也可能是由于外部环境的干扰引
    的头像 发表于 01-25 13:51 934次阅读