全部学习汇总: GitHub - GreyZhang/g_FUSA: some learning notes about function safety. Inlcude both ISO26262 and IEC61508
开始我的这个repo主要是面向ISO26262以及IEC 61508,但是随着看资料,感觉还是有必要再扩充一下。因此,增加了一个面向加点的IEC 60730。之所以增加这个,是因为恰好手头找到了相关的资料而且有一些比较通用的设计在里面。
这一次,就借着手头的这一份来自Microchip的资料看一下单片机 MCU有哪些比较常见的安全测试条目以及他们都是如何测试的。
当看到这一页的时候,我发现我接触到了一个新的安全标准。原本是计划针对性学习一下这个标准,至少了解一下这个标准的大概要求。不过非常好的是这个文档后面接着就给出来了解释。
单片机的测试,比较常规的测试条目:CPU寄存器测试、PC计数器测试、非易失性存储、RAM、时钟以及中断的测试。这些在常规的单片机中都是存在的,因此纵然设计的软件不是百分百通用,但是检查的理念应该是通用的。
IEC 60730的标准是面向家用电器的一个安全开发标准,主要是分为A、B、C三类。其中B是实施了重要的测试以及诊断方法。而B类的功能一般来说有三种:1,固件运行前检查; 2,周期性检查; 3. 算是冗余设计,相同的功能有两个独立的执行操作方式,这种方式不做检查。我手里没有IEC 60730的全部标准原稿,因此不知道具体的描述。但是感觉上会比ISO 26262以及IEC 61508的要求宽松一些。
我这一份文档是一份检查代码库的相关的文档说明,这里面给出了一个系统需求,也就是这个库能够正常工作所需要的要求。主要是对有时隙要求的检查,可能需要有2个时钟,这个需要在硬件设计的时候考虑。针对每一种检查,在文档中也有对应的实施细节描述。
这里顺便看2个比较简单的测试,一个是CPU的寄存器测试,一个是CPU的PC计数器测试。
CPU的寄存器测试主要是测试CPU寄存器的数值是否出现卡死,主要的检查方法就是向寄存器写入数据然后读一下是否与有预期的回读结果。
PC计数器的测试其实是比较容易实现的一个测试,因为这个从描述看几乎可以是纯C实现,只需要增加一点链接脚本的修改即可。测试的方式也简单,调用一个固定地址的函数,而相应的函数会返回一个固定的数值,这个数值是函数开始的地址。而这个地址,是在链接文件中指定的,也是一个已知的数值。由此,可以判断函数的跳转功能是否正常,间接得出PC计数器的工作是否正常。
关于CPU寄存器以及PC寄存器的测试,我后面还会结合代码做一个更深一些的分析学习,也会结合一些我手头的MCU做一个简单的实现。但是,这部分实施尤其是CPU寄存器测试可能会涉及到一些汇编代码,这个后面我还得再研究一下。
|