APP下载

MC68HC908JL8MCU 的一种Flash失效现象分析

2015-09-12宋文强刘昕昀

单片机与嵌入式系统应用 2015年11期
关键词:寄存器字节压缩机

宋文强,刘昕昀

(工业和信息化部 电子第五研究所,广州510610)

宋文强(硕士研究生),主要从事嵌入式软件可靠性技术和FPGA 测试技术研究。

引 言

在目前种类繁多的Flash MCU 中,有很多可以自编程,即可以在单片机(MCU)运行过程中,实时存储程序运行中产生的数据,甚至是改变程序本身。具有这种功能的Flash MCU 可以灵活地使用Flash来存储数据,实现远程在线自动升级自己的用户代码 (Firmware)。MC68HC908JL8[1](以下简称JL8)是Freescale公司推出的一款08系列8位MCU,以成熟的Flash存储技术取代了05系列的EEPROM,继承了EEPROM 的可再编程特性。JL8内部有8KB的Flash存储区,可用作程序存储区和数据存储区。该Flash 为NOR Flash,程序可直接在Flash上运行,不必再把代码读到系统RAM 中,用户可以在这个非易失的存储区内反复存储和读取一个数据集。

由于Flash存储区的最小擦除单位是页(JL8一页有64个字节),若数据的长度小于一页,那么每次写和擦除都不能完全使用该页,没有用到的地方就浪费了。但如果是EEPROM 就不存在这个问题,因为EEPROM 可以基于字节进行写和擦除。JL8为了解决这个问题,在其监控ROM 区内提供了EE_WRITE、EE_READ 子例程给用户使用,从而更充分地使用Flash页进行数据存储[2]。

1 Flash擦写机制和特性

Freescale公司JL8 MCU 采用Flash 存储代码和数据,通过片上内置电压泵,支持在线编程[3-4]。在不需要外接高压的情况下,通过指令可实现Flash空间的擦/写操作。Flash擦/写操作的实现主要有两种方式:一是用户自行编写程序,二是调用监控ROM 中自带子程序。为防止意外操作,单片机在硬件设计上加以改进,增加了FLCR(Flash控制寄存器)和FLBPR(Flash块保护寄存器)两个寄存器,如果要擦/写Flash,须先打开FLCR和FLBPR相应位。用户编程时需要控制两个寄存器,而使用监控ROM 程序,只需设置FLBPR相应位。

JL8 MCU Flash以页为单位进行擦除,可将“0”全部置为“1”。Flash写操作与擦除相反,可将“1”置为“0”,但原来为“0”处不能写为“1”。所以如果需要用Flash存储数据时,正常操作流程是先擦除再写。需要注意的是,擦除操作是按页进行,写操作没有限制,可按照字节进行。

JL8 MCU 片内Flash可在监控模式(Monitor Mode)和用户模式(User Mode)这两种模式下在线编程。其中监控模式主要用于主机向单片机进行程序写入,一般用于对出厂的空白芯片进行编程。JL8 MCU 监控ROM 所提供的所有子程序的入口地址和基本功能如表1所列。具体使用方法可参考技术文档。

表1 子程序列表

2 失效现象分析

Flash MCU 出现程序改写,原因可从硬件和软件两方面进行分析[5]。硬件方面引起程序改写的机理主要有:①电源失效;②时钟毛刺;③VDD 爬升时间过长。软件上引起程序改写机理主要有:①VDD 监视没有使能,或者VDD监视虽然已经使能,但没有被设置成复位源,使得当供电不正常时仍然进行Flash操作,导致存储数据产生异常操作;②用户代码(Firmware)对Flash的写操作不当;③PC指针跑飞。硬件引起的Flash MCU 程序改写出现时具有随机的特征,即出现程序改写的位置不固定。

在一款家用电器通用压缩机控制设备中,其核心控制单元采用Freescale公司MC68HC908JL8单片机,用于控制和优化压缩机,可实现压缩机的开关控制、压缩机性能的提升以及保护功能。该控制单元程序只对Flash进行读操作,并无擦除/写需求和设计。在部分产品出现压缩机控制设备停机故障后,通过回读故障设备的单片机存储Flash后,发现部分代码已被改写。按照改写Flash分布情况,将失效现象分成两类:一是复位中断向量($FFFE~$FFFF)低字节($FFFF)处部分位被改写,失效产品数量较多,达80%,具体现象是将部分位从“1”改为“0”(有3种情况,分别为FF>AF,EF>AF,9F>8F);二是用户Flash空间部分字节被改写,这类较少,占20%,具体现象是将连续64字节改为0xFF。根据现象分析,第一类类似于字节写操作,由于未进行擦除操作,所以只能将“1”改为“0”,且均是试图将高4位改为“A”;第二类类似于片擦除操作。经过故障整理和分析,由于具有较强意义上的非随机特征,可基本排除硬件故障引起的程序改写。

通过分析源程序注意到,可能引起Flash程序改写的软件原因如下:对于①,程序已经将VDD 监视使能,且设置成复位源;对于②,用户代码设计时不对程序Flash进行擦除/写操作,即使异常出现第一类现象,也不会出现第二类现象,而程序跑飞异常调用到监控ROM 程序可产生上述现象。在下节中对第二类失效现象进行复现。

3 现象复现

本节在不修改源代码的基础上,在源程序插入少量测试代码以复现上述失效现象,证明在满足测试代码要求的条件下,可实现同样的程序失效结果,仅对页擦除操作进行举例。页擦除操作可调用EraRnge实现,具体如下:

在软件运行时,由于外部原因使PC 指针跑飞,跳转到$FCBE,如果此时寄存器A 中存储数据(表示地址)指向的地址空间数据为20,则将对Flash进行页擦除操作。

结 语

本文对使用JL8 MCU 自带监控ROM 程序对片上Flash进行擦/写等操作的方法和特点进行了详细的介绍。MCU 的Flash失效现象和原因很多,这里仅对软件引起的Flash程序改写的案例进行了分析。根据具体现象判定程序改写是由于程序跑飞或者异常跳转使得程序意外调用监控ROM 程序,为对Flash进行失效分析的广大研发和测试工程师提供一个失效分析案例和分析思路。

[1]李泽英,肖海桥,余文龙.MCS96 MC68 单片机原理与应用[M].北京:清华大学出版社,1995.

[2]Motorola.MC68HC908JL8 HCMOS Microcontrollers Unit Technical Data,2002.

[3]徐丽华,王宜怀.MC68HC908JL8MCU 中虚拟 19 16 EEPROM 特性的应用及剖析[J].计算机工程与应用,2004(28):106-108.

[4]王宜怀,王林.MC68HC908GP32 MCU 的Flash存储器在线编程技术[J].微电子学与计算机,2002(7):15-19.

[5]邱亮.基于飞思卡尔8位MCU 的集成电路功能失效分析技术[D].天津:天津大学,2007.

猜你喜欢

寄存器字节压缩机
STM32和51单片机寄存器映射原理异同分析
No.8 字节跳动将推出独立出口电商APP
Lite寄存器模型的设计与实现
BOG压缩机在小型LNG船舶上的应用
No.10 “字节跳动手机”要来了?
浅析特大型往复压缩机组的安装
压缩机组智能控制与节能增效
简谈MC7字节码
4M20型压缩机活塞改造
高速数模转换器AD9779/AD9788的应用