一种简化的MCU程序保护设计

发布者:DreamySunset最新更新时间:2014-01-24 来源: 21ic关键字:单片机  程序纠错编码  并行CRC 手机看文章 扫描二维码
随时随地手机看文章
 

 引言

笔者2008年在本刊发表过一篇文章《MCU需要改进》,本文就为什么要改,如何改作进一步的讨论。总的来说,因为对功能安全要求的认识深化,改进的必要则突现;而且国际上已经有了满足改进的产品,改进事实上已开始,不做的人失去的是竞争力,改进其实也不复杂。

1 发生错的原因与现有对策

MCU在工作时会受到干扰,在一些空间场合,可能遇到粒子轰击而产生稳态的翻转,即所谓single event upset。而一般工业场合是电源传导干扰,受干扰时,电源电压会瞬间超出或者略微超出MCU的名义工作电压,线路的稳定性就无法保证。由于各单个逻辑电路工艺过程中总会有微小差异,电源电压的略微超出会在最弱的逻辑电路中造成指令读错误和数据读写错误。这种错误最终表现为数据的错误。

国外对DRAM出错的研究已做得很多,在参考文献中转述了出错的概率:“谷歌(Google)使用了大量服务器,2009年的大规模统计。出错的概率是2.5~7×10-11error/bit/h。”即8G RAM每小时会有5个错。

现在对于有功能安全要求的系统,安全等级为SIL2时,出错的概率应小于10-7”/h。现在控制器所用的MCU的Flash与RAM的大小已达128 K~1 Mb,参考上述概率,如果缺少程序的保护,将会有1M×7×10-11 error/h=7×10-5 error/h,这远大于功能安全要求的出错概率。

从功能安全的角度,系统中任何影响功能的错误都是应该被检测出来的,如果这个错误危及人类生命或造成设备的重大损失,那么就必须有防范的措施,必要时就必须纠正错误。然而要达到这种要求是很难的,需要付出很大的代价。以数据错误为例,人们常常重复计算多次,然后把占多数的结果代表正确的结果。这样,数据分享前的结果都要经表决,否则发现错会太晚,影响一致性。这就需要更多的硬件资源与开发成本。即便如此,如果作为表决器的环节仍是MCU的一个程序,它仍然可能会受错误指令的干扰,未能完全拦住错误。

为了节省成本,更多的应用并没有采用这种冗余与表决的方法。它们往往以不死机作为目标,只要不死机,由控制对象来的新信息就可以重算出新的正确结果。即使上一次算出的错了,其后果也只延续了一个采样周期。这种策略对有累积效应的应用是无效的,就像参考文献中讨论的积分功能会失败。又如运行结果与过程密切相关的应用,例如可编程控制器(PLC),数据的错误会导致控制逻辑的混乱。

保证不死机的主要措施是采用看门狗技术,如果程序走飞,在一定时间内没有复位计时器,计时器就会溢出,产生MCU的重新启动,重新初始化可以纠正损坏了的数据。看门狗技术是不管数据正确性的,因为指令错了程序未必走飞,而指令错了数据错的可能性极大。

2 错误现象与错误校正方案

MCU的指令在读取时发生错误就会产生不同的执行结果,在参考文献中以8051的MOV指令为例,当有一位读错时就变成跳转、除法、减法、交换、增1等等指令。实际上大部分MCU都会有指令错而执行结果错的问题,因为这些指令内没有检验错的机制。MC68HC11的LDA指令有1位错时可能转为加法、减法、送立即数到累加器B、送状态存器、送堆栈指针等指令,如表1所列。

a.JPG

虽然笔者注意到这种出错的可能性比较早(1990年),但是在写参考文献时(2008年)并不知道Freescale公司(2005年)的16位单片机中已经有了对指令添加检错与纠错的措施。参考文献中提到:“当系统遇到强干扰时,CPU在读取指令或数据时可能出现错误,如果指令或数据仅仅是某一位出现错误,ECC模块会自动纠正这一位的错误,使系统照常运行,如果出现二位或二位以上的错误,则ECC会以中断方式通知CPU,出现了读程序错或读数据错。”

根据参考文献,Freescale公司的16位单片机MC9S12P128的Flash部分32位的程序有7位特征,构成纠错编码(error correction code),可以纠正1位错和发现2位错。Flash部分16位的数据有6位特征,构成纠错编码ECC,可以纠正1位错和发现2位错。因此对指令的检错纠错已经是批量使用了。最近AMD也推出了G系列嵌入式SoC平台,它也采用了ECC技术。

ECC技术在企业级服务器中使用比较早,它考虑了DRAM的特点,例如内存插条中由多个芯片构成,就从每个芯片的对应位集合起来,再加校验位。然后又有对应的诊断设计,可以找出出错多的内存条,以便更换。所以它与单片机上的使用情况还是有区别的(更换是不可能的),直接照抄是不必要的。

从Freescale公司的ECC可知,它的海明距离HD=3,而且采用了纠错措施。如果仅仅检错,那么实现起来更简单一点。检测出错后的处理措施就比较容易设计,例如产生中断,把该指令重取,由于是硬件中的措施,不必考虑添加入栈/出栈保护现场的动作,开销很少。如果必要,还可以在另外的地方保存出错统计信息,以及触发更复杂的保护措施。

3 简化报错与纠错方案

从现在单片机的发展趋势来看,因为32位单片机价格的下降,市场将分化为8位与32位两极。在中国8位机主要是8051体系,已经培育了较大的市场和大量熟悉的人才,而且也有自制8051的能力,所以在8051上添加检验码是合理的选择。如果增加了这一功能,无疑会提高使用8051系统的可信赖性,提升产品档次,延长产品的寿命周期。另一方面,其实现也比较简单,相信基于ARM的32位机也会添加这种指令检验机制,成本也要上升。[page]

对MCU程序加保护的厂家还不多见,即使是Freescale公司也还没有对所有的MCU添加保护,因为添加保护是要增加成本的,所以添加保护的方法是值得研究的课题。

对于8位指令代码检错,可以选择低阶次的CRC。由参考文献可知可以选4位CRC,其生成多项式是G=X4+X+1。它可以保证HD=3的数据字长为11位,已超过所需的8位。这里因为数据字8位是一次取出,所以CRC是并行计算的,由数据字到CRC的求取的方法推导如图1所示。

b.JPG

假定数据字用D表示,生成多项式用G表示,Gm为最高阶的系数,等于1。那么习惯的做法在除到Dn位时,判断Dn值。若Dn=1,则将G和D的对应位对齐,用模2加法求取余数,Mn-i=Dn-i+Gm-i,用余数Mn-i代替原来的Dn-i移位。如果Dn=0,则不做加法,Mn-i=Dn-i,然后移位,也可以说用余数Mn-i代替原来的Dn-i移位。我们的目的是直接由D来产生余数,所以做了修改。修改方法是,当对齐后的Gm- i=1时,取Mn-i=Dn-i+Dn。当Gm-i=0时,对应项不做模2加。现在证明这两种方法是等效的:

Dn=0,Gm-i=0时,习惯方法Mn-i=Dn-i;修改方法Mn-i=Dn-i。

Dn=0,Gm-i=1时,习惯方法Mn-i=Dn-i;修改方法Mn-i=Dn-i+Dn=Dn-i。

Dn=1,Gm-i=0时,习惯方法Mn-i=Dn-i+Gm-i=Dn-i;修改方法Mn-i=Dn-i。

Dn=1,Gm-i=1时,习惯方法Mn-i=Dn-i+Gm-i=Dn-i+1;修改方法Mn-i=Dn-i+Dn=Dn-i+1。

现在对G=X4+X+1时8位指令的数据字用修改方法求取CRC各位的值,为了阅读方便,将数据字的各位用数字代表,例如7代表D7。参与模2加的各位就以各数字连写在一起。例如CRC的最高一位是7 532,它代表D7、D5、D3、D2的模2加法结果。通过建立真值表,它们最后都可以用组合逻辑来实现,所以在取指完成后就立即可以判出是否有错。求取并行解CRC逻辑的过程如图2所示。

d.JPG

这种推导并行CRC值的方法也可以用于较长的指令,当然,为了避免手算的错误,应该以程序来求,这不是难事。

8位指令用4位CRC保护开销是大了一点,但是它的保护强度也大了,对于16位的指令程序,用二次8位保护,有4个错是肯定可以检测出来的,如果像Freescale技术用掉6位保护,只能保证有2个错可以检测出来。所以这是折中的方法。

对于16位指令,可以用5位CRC保护,参考文献中G=X5+X2+1可以在26位数据字长上获得HD=3。对于32位指令,可以用6位CRC保护,参考文献中G=X6+X+1可以在57位数据字长上获得HD=3。由此可见,如果仅检错而靠重传作纠错,校验项比Freescale都要省一位,用重取指令的方法可以节省开销。

这种方法也可以对数据存取加以保护。在以现有MCU为主的单板嵌入式计算机中,添加程序保护也有很重要的意义,如何实施是值得研究的课题。

关键字:单片机  程序纠错编码  并行CRC 引用地址:一种简化的MCU程序保护设计

上一篇:基于单片机MSP430F147的自动寻边器下位机设计
下一篇:学习单片机的捷径是什么?

推荐阅读最新更新时间:2024-03-16 13:34

基于单片机的“乒乓球”游戏机智能控制系统
0 前言 日常娱乐生活中,智能化的娱乐产品非常流行。单片机具有功能强、可靠性高、使用方便、体积小及重量轻等优点。国外已广泛应用于自动化控制的各个领域。近年来,国内的单片机技术与产品开发应用方面的发展也很快,各种电子产品已越来越多地采用单片机控制系统且性价比高。本文从实用的角度以AT89C2051单片机为核心设计了一种智能“乒乓球”游戏机。实践证明,该游戏机运行状况稳定、可靠,满足了智能化要求。 1 系统的基本工作原理 本设计中,通过5只连续排列的发光二极管的依次点亮代表“乒乓球”的运动。再用两个按键模拟左右两个球拍,键按下代表球拍击球。“左拍”按下可使发光二极管从左向右依次点亮,如同“乒乓球”从左向右飞来;“右拍”按
[单片机]
基于<font color='red'>单片机</font>的“乒乓球”游戏机智能控制系统
TinyPower A/D with LCD型Flash MCU【盛群半导体】
03/09/2011—— HT67Fxx 是盛群半导体新推出8位TinyPowerTM A/D with LCD 型Flash MCU 系列。本系列MCU 具有Enhanced Flash MCU 的各项优点,同时又使用盛群半导体特有的TinyPower TM 技术,具有超低功耗、快速唤醒、多重时钟讯号来源及多种工作模式等特点,可大幅降低整体使用功耗,达到绿色环保的需求。适用于各种小家电、量测仪表、工业控制、医疗健康器材等产品。 HT67Fxx 全系列4个MCU ( HT67F30 、 HT67F40 、 HT67F50 及HT67F60),具有涵盖完整并多样化的功能,包含有2K~12K Word Flash 程序
[单片机]
TinyPower A/D with LCD型Flash <font color='red'>MCU</font>【盛群半导体】
基于事件一目标驱动的人机界面设计
引 言   人机界面(human-computer interface),又称用户界面、人机交互、人机接口等,是人与机器之间传递、交换信息的媒介.是用户使用计算机系统的综合操作环境。在商品竞争中,一个应用系统的成功与否在某种程度上也取决于用户使用界面的感受好坏,因此,人机界面的设计在应用系统的设计中有着重要的作用。嵌入式系统强调人机界面操作的实时性,简单化,强调在特定平台上特定应用的时间空间效率。在传统的小系统设计中。程序设计一般采用前后台工作方式。应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,时间相关性很强的关键操作(crltical operation)是靠中断服务来保证的。因为中断服务提供的信息一直要等到后台
[应用]
兼顾高性能与高安全,瑞萨电子推出RA MCU产品家族
日前,瑞萨电子宣布推出采用32位Arm Cortex-M核的RA MCU产品家族。作为面向未来的嵌入式解决方案,瑞萨电子将RA MCU打造成具备优化性能、安全性、连接性、外设IP和易于使用的灵活配置软件包(FSP)的终极组合。 RA MCU采用了Arm Cortex M23/M33与Cortex-M4系列内核,这也是瑞萨继Synergy系列之后,第二次推出Arm内核架构的MCU产品,补充了瑞萨在高端MCU领域的布局。目前瑞萨MCU产品阵营包括了低功耗RL78产品家族、车载RH850产品家族、工控RX产品家族、高性能嵌入式Synergy产品家族以及专为中国市场开发的R7F0C系列。 采用瑞萨电子RA MCU产品家族进行设计,可使嵌入
[嵌入式]
兼顾高性能与高安全,瑞萨电子推出RA <font color='red'>MCU</font>产品家族
基于PIC18F系列单片机的嵌入式系统设计
引言 嵌入式系统是指以应用为中心,以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、体积、成本、可靠性、功耗严格要求的专用计算机系统。嵌入式系统是面向应用的,系统的硬件选型和软件开发模式都必须根据具体的应用确定。 永磁无刷直流电动机是电机控制研究领域的热点之一,这与其自身固有的技术优势密切相关:以电子换相取代了有刷直流电动机的机械换相。从根本上革除了普通有刷直流电动机由于电刷换相带来的火花、噪音、高故障率等一系列问题,同时又使系统的性能能够与普通有刷直流电动机相媲美,因此得到了广泛的应用。永磁无刷直流电动机的电子换相离不开电机的转子位置信号,传统的方法是采用霍尔器件或其他位置传感器检测位置信号,这使得系统的维护和制
[应用]
基于C51单片机的汽车嵌入式车载防盗系统设计方案
1.引言 目前防盗器市场的主流产品是电子式防盗器,分为单向防盗器和双向防盗器,这两种防盗器都是车主通过遥控器来控制汽车,双向防盗器可以把车辆的真实状况反馈给车主。 GPS汽车防盗器依托全球定位系统,它将报警信息和报警车辆所在位置无声地传送到报警中心。由于车主不能直接控制车辆,价格和使用费用较高,使其推广应用受到很大限制,目前还没有普遍使用。GSM汽车双向防盗器是网络式防盗器的后起之秀,它依托全球GSM网络,车主可直接通过手机接受报警和控制车辆,性能价格比较好,它代表着汽车防盗器的发展趋势,自推出以来收到客户的青睐。 本文提出的汽车嵌入式车载防盗系统属于GSM防盗系统,没有采用昂贵的GPS模块,CPU采用了C51单片机,市场价
[单片机]
基于C51<font color='red'>单片机</font>的汽车嵌入式车载防盗系统设计方案
飞思卡尔16位单片机(三)——GPIO输出功能测试
一、GPIO介绍 GPIO是单片机最常用的功能,XEP100单片机的并行I/O的资源很丰富,XEP100的IO有PORTA、PORTB、PORTH、PORTJ、PORTM、PORTP、PORTS、PORTT、PORTK和PORTE共10组IO。这些I/O口除了具有通用I/O功能外,还分别具有专用I/O的功能。可以根据需要进行设置,专用I/O功能启用后,通用I/O功能自动关闭。 在使用单片机的并行I/O时要进行一些设置,主要的设置如下所示: 1功能设置 每个I/O子系统都有一个功能设置寄存器,其中的几个位用于部分或者全部引脚的功能设定,设定为专用功能后,方向设置功能可能自然禁止,但上拉、下拉及降功率驱动功能一般仍然有效,具体
[单片机]
飞思卡尔16位<font color='red'>单片机</font>(三)——GPIO输出功能测试
如何创建51单片机KEIL工程步骤
1. 什么是Keil软件 Keil软件是一款专为嵌入式系统开发而设计的集成开发环境(IDE),常用于51、STM32单片机软件开发的编程软件。Keil编程软件不仅支持多种工具和扩展程序,还能够处理多种文件格式和数据交换方式;可支持单片机程序的在线仿真,或通过仿真器进行实物仿真,大大方便开发人员的工作。 其中,我们常用的Keil软件有两种,分别为Keil C51以及Keil MDK,前者主要用于51单片机等8051内核单片机的开发工具(不支持32位单片机),Keil MDK主要用于ARM架构单片机的开发工具,主要用于STM32单片机等32单片机。所以在使用Keil软件时需要主要这一点。 2.如何创建51单片机KEIL工程步骤
[单片机]
如何创建51<font color='red'>单片机</font>KEIL工程步骤
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved