找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3443|回复: 0
打印 上一主题 下一主题
收起左侧

MC68HC908JL8 MCU的一种Flash失效现象分析

[复制链接]
跳转到指定楼层
楼主
ID:109770 发表于 2016-3-24 16:13 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
摘要: 以Freescale公司的MC68HC908JL8 MCU为例,介绍了使用芯片自带监控ROM程序对片上Flash进行擦/写等操作的方法和特点。通过对一个因Flash程序被改写从而引起设备故障的案例进行了分析,为因软件引起的单片机Flash失效分析提供了参考。

引言


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


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


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所列。具体使用方法可参考技术文档。


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实现,具体如下:


//调用擦除子程序,起始地址是DE00,整体擦除1页(即DE00~DE3F)

asm{//时钟频率为5 MHz

LDA #20

STA $120//在地址0x120处写入20,总线频率//BUS_SPEED,该值为4倍时钟频率

LDA #$DE
STA $122
LDA #$00
STA $123 //在地址0x122~123处写入0x DE00,若不为//64的整数倍,将自动截取
LDA #$FF
STA $FFCF //使能FLBPR,允许擦写操作
LDHX #$120 //使当前累加寄存器A中数据为地址0x120
JSR $FCBE
}


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


结语


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


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表