一个准B类微控制器平台
扫描二维码
随时随地手机看文章
从2007年10月起,为防止家电在出现故障时对人身造成伤害,所有新上市的家电产品都必须符合IEC60335标准,新标准首次启用了软件检测和软件分类的概念。根据软件类别(A/B/C),新标准要求在上电时检测微控制器组件(如CPU寄存器或存储器),并在运行期间监视这些组件的性能,这类似于工业或医疗设备市场上,按照SIL2/SIL3级标准、IEC61508或UL1998标准对安全至关重要产品件进行的评测。
根据设备在发生故障时的危险程度,新标准把检测软件分为三个类别。如果家电的安全性与软件无关,则属于A类设备。例如,室内温度调节器或照明控制开关就属于A类。相反,如果软件被用于预防特殊的灾害,如电子点火燃气灶的防爆功能,这个软件就被评定为C类软件。本文不讨论第二种情况,因为这一类别的系统可能需要多个微控制器,这超出了本文的范围;其次,因为大多数家电的电子控制开关都必须有不安全操作防护功能,这类产品属于B类。例如,洗衣机的电控门锁或洗碗机的带电机过热检测功能的泵驱动器就属于这种情况。
对于B类待测设备,IEC60335标准让我们参考另一个标准IEC60730,因为该标准涵盖了全部的电子控制开关类产品。该标准的附件H的表H.11.12.7列出了B类和C类软件需要测试的微控制器组件、待测故障和达标数值。
通过微控制器内1部硬件或利用软件方法,可以直接进行这些测试过程。意法半导体的基于Cortex-M3内核的32位微控制器STM32是一款准B类产品,内置硬件能够监视CPU的程序计数器中止、异常时钟频率和闪存内容完整性。
该标准提出一个“独立时隙监视”概念,以防CPU在PC机发生故障时失控。大多数微控制器都内置一个看门狗定时器。然而,承担这个责任的看门狗必须是独立的电路。基于这个原因,STM32有两个看门狗:第一个看门狗定时器是一个普通的窗式看门狗,时钟信号来自主时钟源;第二个看门狗由一个独立的内部振荡器驱动,从闪存内的一个可选字节开始运行。这样设计可确保在晶振发生故障时,不管时钟电路配置如何,至少有一个看门狗能够继续工作。
图1是STM32的时钟电路的简图,描述了各种时钟源及与芯片其它部分的连接方法。
实时时钟的信号源可以是内部低速(LSI)阻容振荡器。通过比较外部预期频率与时钟组件要求的内部频率,这个特性提供了一个监视外部时钟的方法。在系统级,这个方法可以节省一个50Hz/60Hz交流电源零交叉检测电路的成本,应用系统启动双向晶体管需要这个电路的情况除外。
最后,STM32还内置一个32位的硬件CRC计算单元,这个特性可以加快闪存数据完整性检查,并把CPU负荷(CPU在运行期间处理的任务量)降到可以忽略不计的水平。
如果用硬件方式执行测试程序,大多数测试都需要一个相当大的芯片面积。例如,RAM内存的单一位查错需要在所有数据字上增加一个奇偶校验位。STM32微控制器抛弃了这个方案,因为它可能会影响芯片的成本效益,而且,只用软件就能轻松地实现测试功能。因此,意法半导体为用户免费提供一个自诊断固件库,固件库含有以下检测用C模块:CPU寄存器检测;时钟监视;RAM功能检查;ROM校验合完整性检查;看门狗自检和栈区溢出监视(即便标准对此未提出明确要求,这个功能也能提高检错的整体覆盖率)。
现在讨论其中一个检测模块,RAM检测模块有助于了解B类软件的限制性要求。这个标准要求定期检测RAM的DC故障(如停滞或耦合故障)。March C算法能检测出所有这些错误,而且占用通道的数量很有限。不过,为了提高能效,它要求考虑存储器的物理实现方式。STM32有一个逻辑对物理寻址加扰功能。Cortex-M3内核具有强大的寄存器阵列,无需使用RAM存储器单元即可在算法中插入扰码(这项检测具有破坏性,必须验证整个存储器阵列)。作为一项附加要求,这项检测必须定期进行。如果应用设备通过系统加电然后使用较短的一段时间,则系统引导后的检测可视为定期测试。相反,如果应用设备保持上电状态,则必须在运行期间重复检测,这样,情况变得更加复杂:RAM测试必须透明,因为测试与应用软件正在占用的存储单元有关。测试操作原理如图2所示。
固件库为运行时测试提供一套不同的C函数。必须在优先权最高的中断例程中执行C函数,为了避免CPU负载过大,影响实时响应性能,固件库还提供了多个可选特性。用户可以选择March C或March X算法。对于有限的覆盖损耗,这两种算法的速度略微快一些。在一次测试中的待测存储单元的数量可以在报头文件内进行修改,这样,中断例程的时长可以微调到几纳秒的水平。
这个实例证明,像这样一个固件库,在开发时间上能给客户带来巨大好处。同样地,还要在封装过程中做类似的测试(通常是CPU测试,C语言几乎不准许直接处理内核寄存器和标志信号);随固件库一起提供给客户的针对封装优化的例程不需要客户学习Cortex-M3指令集。
除这些单独测试外,当新建一个项目时,自诊断固件还提供一个B类软件参考框架,包括开发工具工作室、修改的矢量表和用于处理A类和B类变量的自定义链接器脚本文件。在复位矢量取用后,引导序列立即开始执行,并在应用启动前完成全部必要的测试(CPU、看门狗、时钟监视、RAM和闪存测试),引导序列可以原样重复再用。测试完成后,这个安全引导序列立即返回到编译器C的启动入口点,这样从开发工具的角度看,所有的初始测试都是完全透明的(在数据自动初始化前验证RAM)。使用一种计数器方法监视程序序列本身,这样可以验证是否所有的测试都被执行过。
固件库不包括H.11.12.7表中的每一个测试项目。有些只与带外部存储器的系统相关(有关数据通道的第五部分)或ASIC/门阵列(有关定制芯片的第9部分)相关。有些检查与应用有关:关于外部通信接口的第6部分、关于中断控制的第2部分和关于输入输出外设的第7部分。下面快速了解一下如何测试中断和输入输出电路。
如果需要监视中断信号传输速率,并检测“无中断信号”或“中断过于频繁”,交叉检查几个独立的时基是一个不错的解决方案。实现这种方法相当地容易和简单,但是每种情况都需要逐一定制,具体设置取决于被服务的ISR的数量及其频率。基于这个原因,固件库中不包含这种方法。
对于输入输出外设,一个B类软件必须检测数字输入输出和模拟通道上的任何故障。这项检测属于假设性检测。以一个加热元器件为例,电源由一个双向晶闸管控制,温度由一个连接模数转换器的负温度系数(NTC)电阻器调节。如果双向晶闸管导通而温度没有上升,这表示数字输出或双向晶闸管已损坏,或者模数转换器工作不正常。无论如何,B类软件必须检测这些错误条件,并采取相应的处理办法。
固件库还配备技术文档和一个很有用的基于RS-232的Verbose模式。这个固件接受了欧洲测试机构VDE在真实条件下的现场测试,并获得了该机构的测试认证。STM32的自诊断例程通过了IEC60335-1认证。如果这些模块在使用前不做任何修改,并按照ST的集成指导原则使用,这些模块不需要再要重新评估,从而可以简化最终应用的认证过程,缩短产品上市时间,降低开发成本。
STM8系列8位微控制器也定位于家电市场,同样集成了双看门狗定时器和失效保护电路,其自诊断例程于2008年2月通过VDE的测试认证。