复旦微MCU之IEC60730 Class B软件库

cathy的头像
cathy 发布于:周一, 04/11/2022 - 09:28 ,关键词:

IEC 60730安全标准定义了多种测试和诊断方法,确保面向家用电器的嵌入式控制硬件和软件的安全运行,为了实现功能安全,必须消除系统出现故障时产生危害的风险。

适用设备分类

IEC 60730标准涵盖了交流电器的机械、电气、电子、EMC和交流电器的异常操作,其中为电子控制器软件定义了三种类别:

Class A: Not intended to be relied upon for the safety of the equipment. (如房间恒温器、湿度控制、照明控制、计时器、开关等)

Class B: To prevent unsafe operation of the controlled equipment. (如洗衣机Keil uVision 5工程移植方法、洗碗机、烘干机、冰箱、智能炊具等)

Class C: To prevent special hazards. (如自动燃烧器控制、封闭的热水器的热切断等)

“复旦微MCU之IEC60730

IEC60730 Class B

复旦微MCU提供的IEC60730 Class B软件库包括一系列测试用例,为用户提供了快速集成IEC 60730测试的途径,可以显著减少开发工作、时间和成本,帮助大型电器市场的自动化控制制造商满足IEC60730 Class B规范。目前,该软件库支持的芯片系列有:FM33LC0系列,FM33LG0系列。

IEC60730 Class B软件库包含:启动时测试,运行时测试。

启动时测试内容:CPU寄存器自检,程序计数器PC自检,Flash内容完整性校验,RAM功能自检,系统时钟和中断自检;

运行时测试内容:CPU部分寄存器自检,Flash内容完整性校验,RAM功能分块自检,栈上溢下溢检测,系统时钟和中断自检。

部分检测功能可通过修改宏定义值进行开关和配置。

变量存储方式:源码+反码校验,存储在一对相邻的独立区域内。测试运行出现异常时,软件库提供统一的错误处理函数,便于用户对错误进行处理。

下图为IEC60730 Class B软件库的文件结构:

“复旦微MCU之IEC60730

该软件库需占用一些外设和Flash、RAM空间,用户可能会在集成软件库过程中遇到问题时使用串口或IO口来指示当前测试状态和调试,因此用户在MCU选型时需要考虑自身产品使用的资源和保证软件库用以完成任务的资源。

软件库的设计理念:底层实现和应用分离。所有底层操作相关代码均被放置在platform文件夹下的([芯片系列]_impl.c/.h)中,用户可修改各函数实现来调整软件库使用的资源。

上面介绍的复旦微MCU IEC60730 Class B软件库包括一系列测试用例,为用户提供了快速集成IEC 60730测试的途径,可以显著减少开发工作、时间和成本,帮助大型电器市场的自动化控制制造商满足IEC60730 Class B规范。接下来主要讲解启动和运行时的测试内容。

IEC60730 Class B软件库包含:启动时测试,运行时测试。

“复旦微MCU之IEC60730

“复旦微MCU之IEC60730

CPU寄存器自检

覆盖了除“程序计数器PC”以外的所有寄存器(R0~R12、PSP/MSP、LR、APSR、PRIMASK、CONTROL寄存器)。

自检方法:使用“静态存储器测试(Static memory test)”,向寄存器写入特定测试特征,检测寄存器是否具有该错误。先使用较为复杂的测试流程对R0寄存器完整性进行验证,然后使用R0寄存器作为辅助寄存器来测试其他寄存器。

自检差异:不同的ARM Cortex-M内核支持的指令集不同,则自检实现方式存在一定差异。

覆盖范围:启动时:R0~R12、PSP/MSP、LR、APSR、PRIMASK、CONTROL;运行时:R0~R12。

“复旦微MCU之IEC60730

程序计数器自检

自检方法:①使用启动时功能测试(Functional test)进行检测,软件库在两个特殊地址(可覆盖测试特征)放置了特别的检测函数,可比较返回值和预先定义值来验证程序计数器;②使用独立的时间片监测(Independent time-slot monitoring of the program sequence)方法,通过看门狗定时器进行程序计数器检测(看门狗定时器保证了程序执行流程的正确)。

执行阶段:仅在启动时执行。

“复旦微MCU之IEC60730

FLASH内容完整性校验

自检方法:周期性修改检查,先在FLASH映像文件后附件一个CRC32校验值(对代码空间进行计算得到的),通过CRC算法对相同空间计算CRC32校验值,并对二者进行比对验证完整性。

覆盖范围:启动时:一次性对全程序空间进行计算并比对;运行时:分时-固定的块大小-全程序空间分块计算-比对(分块原因:全代码空间校验耗时较长,严重影响主程序的实时性)。

“复旦微MCU之IEC60730

RAM自检

自检方法:周期性静态存储器测试(Periodic static memory test),通过执行March C/March X测试来覆盖RAM存储器的该项故障。RAM自检期间Class B软件库将暂时屏蔽中断(关键寄存器内容在开始前全部保存至备份寄存器中)。

覆盖范围:启动时:全RAM空间-March C测试;运行时:覆盖Class B软件库的安全变量存储区域和用户指定的空间范围。

“复旦微MCU之IEC60730

系统时钟自检

自检方法:使用频率监测(Frequency monitoring)的方法。启动时,自检将尽量利用芯片的特定外设功能;若没有可利用的外设,软件库会使用和运行时测试相同的软件方法。运行时,自检将采用一个独立时钟源(低速时钟、RCLP或RCLF)驱动的定时器,在其一个完整的计数周期内,记录另一个使用系统时钟驱动的定时器的溢出次数,然后将溢出次数和理论值进行比较,判断是否在能够容忍的范围内;芯片拥有时钟校准模块(CCL)的情况下,软件库将直接使用该模块进行时钟频率捕获。

自检差异:启动时:测试程序启动定时器并延时等待测试结果,并进行比较/或者使用特定外设;运行时:测试程序维护一个测试运行标志位,依据标志位情况,控制定时器启动、等待和进行比较/或者使用CCL进行测试。

“复旦微MCU之IEC60730

中断频率自检

自检方法:使用时间片监测(Time-slot monitoring)的方法,运行时,采用一个独立时钟源(低速时钟、RCLP或RCLF)驱动的定时器,在一个完整的计数周期内记录中断次数,并将该次数和理论值进行比较,判断其是否在用户配置的容差范围内。中断频率自检(仅在运行时执行)和系统时钟自检采用同一套软件测试方法,所需的独立频率定时器也可以直接复用。

“复旦微MCU之IEC60730

栈溢出检测

该测试为额外可选的检测内容,非IEC 60730标准强制要求,旨在对程序的栈溢出错误进行覆盖。

自检方法:软件库修改链接器配置文件,将栈放置在特定位置(RAM区域末尾),在其首尾加入4个字的保护特征。运行时测试中,如果检测到该特征被改写,则发生了上溢/下溢。

执行阶段:仅在启动时执行。

来源:复微MCU爱好者天地
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 893