关于功能安全编程的软件实现方法
Author: Zha nzr21 @ 21ic BBS
功能安全与信息安全其实是两个概念,两者都很重要但相互独立?在汽车电子设计中,两个
安全都很重要,但是功能安全往往涉及到很严重的事故,所以显得更为重要.
功能安全-一般使用Safety这个词
信息安全-使用这个词:SeCUrity
但是到了中文两者都是安全,本文只涉及到功能安全,也就是前者Safety.
关于功能安全,业界一直在积极研究与推行相关标准?比如IEC,VDE.应该说功能安全的研究
与发展永远不会停止,因为没有任何一种设计能够达到百分百的绝对安全标准
功能安全与EMC测试联系较为紧密,因为电磁辐射会影响其他部件或者使用者的健康,而如何防范EMC噪音也是评价功能安全的一项指标.
兼容IEC,VDE的标准
IEC(I nternational EIeCtrOteChnical COmmiSSiOn) 是一个非营利,非政府的标准制定组
织.IEC制定的标准主要关注安全,性能,环保,电气能效与再生能力.IEC与ISO和ITU有着紧密联系?这些制定的标准不仅包括对硬件的规定也有软件方面的?另外这些标准一般会根
据应用场景细化为若干子标准?
除了老资格,国际化的IEC之外,这个领域中比较知名的,认可度较高还有德国的VDE英国的IET,美国的IEEE.其中VDE还包括一个测试与认证机构专注于软件功能安全方面的前沿性研究.该机构属于德国的国家注册的认证机构.其主要目的在于给各家电子制品厂商提供
标准符合与质量检验服务?
IEC的标准中最为人熟知的是IEC 60335-1.这个标准主要覆盖家用或类似场合的电子制品的功能安全与信息安全规范.其原则:被测品应该在各种元器件失效的情况下保持安全.从
此标准的角度观察,微控制器(MCU)也属于众多器件之一.如果电子器件影响到最终产品的安全性,那么在连续的两次失效后该制品依然能够保持安全.这意味着该制品必须在微控制
器不工作(正在复位或者运行异常)且硬件发生失效的情况下依然能保持安全.
如果安全取决于软件,那么软件被当做第二次失效来考虑.该标准规定了三种软件的安全类型:Class A:安全根本不取决于软件
Class B: 软件能够防范不安全的操作
Class C:软件主动防范特殊危险
一般而言, 软件设计中谈到的功能安全都是指的Class B, 对于Class C, 则需要额外的措施比如双控制器冗余设计, 本文暂不涉及.
是否符合Class B 的认定与硬件软件都相关.与微控制器相关的因素被分为两组来考虑: 微控制器相关与应用相关.
应用相关的部分依赖于用户的应用结构,必须由用户负责(通信,10控制,中断,模拟输入与
输出), 微控制器相关的部分则纯粹与微控制器的结构相关,能够以一般的方法来进行(内核自诊断, 挥发性与非挥发性存储器完整性检查, 时钟系统测试等等).
对于英飞凌的微控制器产品来讲, 微控制器部分的测试有着强大的硬件功能支持. 比如Lock-Step 内核的设计能够防范极为难以追钟的主控制器失效,Aurix 系列的处理器都有丰富的存储器ECC校验功能,还有看门狗,SMU等等.
需要注意的是, 除了IEC 之外, 还有数家其他机构在此领域的标准也是业内较为认可的: 比如刚刚提到的德国VDE英国IET,美国IEEE.本文为了篇幅原因,主要描述IEC的标准.其他组织的相关标准的方法与原理与之类似, 但是细节可能有所差异. 英飞凌的软硬件产品设计过程与此几家机构都有紧密的合作与联系.
与此同时, 一些国家自己制定的标准也向国际标准借鉴. 比如UL 60335-1, CSA 60335-1 与EN-60335-1 都是基于IEC 60335-1 制定的.
[ 为甚么一些国家不直接使用国际标准而进行自定标准? 一般而言是为了设定贸易壁垒, 保护本国的厂家.这些标准总体来讲跟国际标准非常类似,差别可以说几乎没有. 但是认证方法, 途径等等有一些本国化的特点. 如果要进行本地标准的认证, 最好找一些当地的专门从事该业务的机构进行合作. 如果产品设计是根据国际标准来的, 通过本地化的标准基本是没有问题的, 只是要走个流程而已]
图MCU中被Class B规范考虑的因素
为符合Class B的规范,软件上一般要考虑如下因素:
* CPU寄存器测试
*时钟监视
?RAM功能检测
* Flash校验和完整性检测
*看门狗自测
?栈溢出监视
其中最后两条并非标准明文规定的,但是拥有这两条功能会提高软件的整体健壮性
为了提升用户通过Class B认证的速度,英飞凌为其微控制器提供了已经通过认证的Class
B软件库供用户集成.(Aurix/TriCOre 与特定型号的相关库要通过厂商认证才能获取).当
然需要提醒的一点是,用户即使使用已经认证的厂家软件库,整体应用是否符合认证要求依
旧需要通过相应的机构进行认证?
至于以下内容属于应用相关的因素:
?模拟:ADC/DAC
? GPIo
*中断与外部通信
?定时器
?外部存储器寻址
模拟器件(ADC/DAC与用户应用场景,特定的型号的外设能力相关度较大?一般而言应该定期检查相应的管脚? 一些多余的模拟引脚可用于检测额外设定的检测点?如果使用了内部参
考源,则该参考源也应当定期检测?
对于GPIO,Class B规定必须侦测到任何数据IO的失效?这一点可以配合其他应用部分进行检测,比如关掉一个制冷/加热开关,用模拟采样值来回来验证该开关是否失效?如果数字
部分与模拟部分是相互独立供电,则此点需要额外小心两者电压上的差异?
对于中断与外部通信接口,可也通过设定一个软件计数器来检验中断与通信发生的次数,在
通过经验检验过的时钟源来通过该计数器的结果来判定被测试的中断与通信接口是否正常工作.
对于定时器,可以通过某函数在指定的时间范围内运行的次数来验证?也可以通过不同的时
钟源来交叉验证定时器?定时器与应用的耦合度属于较高的部分
对于外部存储器寻址,大多数英飞凌的微控器型号不涉及到这点?涉及到的型号请参考
RAM/Flash检测的方法?
以下是一种内存分配方法举例,关键变量以互补的形式在不同的RAM区间被保留了两份以
互相校验?另外堆栈也做了特殊处理已检测StaCk OVerfIOW 与Under Flow 的情况?
C ∣3CT A V□rie ∣fcJe?
LrnLIEedf?AM
SgPOCrIiC PaItBm IDdβiκ∣ StKk OTeritoW
Soach
SPeC≡f?c PaISfenn IQ dclnl ιtsc? UndCTIσw'
一种检测程序执行流程的方法
对于程序执行的各个阶段都分配一个不同的数字进行编码
?这些变量以双互补形式进行冗
余存储?当一个程序的阶段被执行,进行一种四步对称检测?前两步检测该程序阶段被正确 调用(在调用该程序段与返回的地方执行 ).后两步检测该程序是否被正确执行 (该程序段
的
入口与出口 ).
ArgQ l?n?Qd AIrina
ItW fiιπtl step ArCai 1e?ted CMing
?hβ l?1 就4p
IRAM backup buffer P?τt?f ID CIa^β a?a
Clai?9 B H?r ∣血砒
I redundant CQO?3∣erπentary
?slue?)
Clas? B VariSb1^6
(πoππal values)
AfM?JAMF ITJn Dmfi πteci
GaP (OVH'?p) .1 l? bngpmnQ gf Oa? B HΓBB
Area I??l0d dwι∏g W Meond l ?1βp
GaP {□v?riap} art M? end Otf ClaSS B area