由于工作的原因,笔者经常接到工程师询问MCU内部的RAM上电之后的初始值到底是什么,有什么特性和规律。今天笔者就以设计过程中遇到的几个问题与大家做一个交流。 首先明确一个问题,我们都知道,根据RAM的特性,MCU每次上电之后RAM里面的值是随机的。也就是说RAM上电后的初始值可以是0xAA,也可以是0x55,也可以是其它任何的值,这个都是正常的。明确了这个基本原理之后,我们来看一下下面这个跟RAM的初始值的使用相关的一个问题。 设计出状况 *近有工程师在开发的汽车娱乐系统中遇到了一种情况,就是他在使用RH850F1K的过程中,发现每次上电后RAM的值好像都是固定的。按照软件设计的初衷,他想通过判断RAM的值从而知道这次复位是掉电复位还是MCU内部复位——比如“看门狗”复位。如果是掉电复位,则对RAM进行初始化;如果是MCU内部复位,则不对RAM进行初始化,从而可以保持用户之前的一些设置,比如频道、界面信息等。 大致的设计思路和流程如下: MCU复位后,软件会判断某个变量的值。如果不是0x55,就认为这是上电复位,所有的RAM需要初始化,并把该变量的值写为0x55;如果是0x55,就认为这是“看门狗”复位,这时候则不改变一些变量的值,比如记录里程相关的数据。 相关的C语言代码如下: if (variable != 0x55){初始化所有变量;variable = 0x55;}else{只改变部分变量的值;} 在测试的过程中,测试工程师发现了一个问题:对于99%的MCU来讲,上述的逻辑都是没有问题的,但是对于个别MCU却存在固定性的问题。 按照设计的初衷,本来我们认为上电后RAM的值是随机的,但是对于某些个别MCU来讲,测试工程师发现上电后RAM的值会固定的是0x55,或者出现0x55的几率非常高。 解决方法 针对这个现象,笔者也从单个MCU的特性方面做了解释:首先还是回到文章*初提到的问题,根据RAM的特性,上电后RAM是任何值都是正常的,基于这个前提,我们可以说测试工程师遇到的现象是正常的。 那么,为什么个别MCU的RAM上电后会偏向于某个特定值呢? 半导体器件的设计是非常复杂的,外观很小的一个芯片都是芯片内部数百万计的各种极其小的元器件搭建而成的,而这些的原材料基本都是硅。对于每个特定的芯片而言,其特性数据都是有一些偏好的,也包括上电后RAM的初始值,所以当我们看每个MCU的电气特性数据的时候,这些数据基本都是一个范围值,而不是确定的值。 另外,上面软件本身的设计也是有缺陷的,或者说鲁棒性不好。假定上电后RAM的初始值是完全随机的,那么这样总会碰到随机值恰好是0x55的情况。基于这种考虑,我建议软件工程师重新设计了判断的条件。比如判断RAM若干不连续地址的值,并且使用校验的算法,比如比较简单的校验和,这样可靠性就大大提高了。 结语 笔者在工作过程中,遇到过多个类似的问题,这个问题也具有一定的普遍性,除了前面提到的汽车娱乐系统,在车身、仪表,甚至工业应用中的电表等都会涉及到,希望这篇文章能够帮助设计工程师少走一些弯路。上一篇:八位MCU还有未来吗?下一篇:国产MCU挑战与机遇
江苏中霍传感科技有限公司一家专业从事电流/电压传感器,工业采集模块的研发、制造、销售及服务的技术型公司。公司主营:电流/电压传感器、接近开关、齿轮传感器,隔离放大器,特种互感器,工业采集单元,模拟电路应用技术服务,伺服系统的部分集成等。广泛应用于伺服系统,变频控制,电力及微网建设、工业物联网、高低频电源、UPS电源,焊接设备,航空航天,EV&HEV电机驱动控制、医疗设备,家用电器等领域。
我们不是终端,每一位客户都是利益共同体,更是我们的上帝。延伸服务,努力学习,为客户提供系统的解决方案,是我们不断追求。
请接受来自供应商的*真*诚挚的祝福,让我们亲密合作,携手共进。
China-Hall Sensor 霍尔电流电压传感器
联系方式:
姚工 15195898212
段工 15251851604
座机:025-85550202
传真:025-85550303
公司地址:南京市江宁区兴发路99号 Email :master@csch.com.cn
邮 编:210007 公司网址:http://www.njsensor.cn/