找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3449|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

MC68HC908JL8 MCU的一種Flash失效現(xiàn)象分析

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:109770 發(fā)表于 2016-3-24 16:13 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
摘要: 以Freescale公司的MC68HC908JL8 MCU為例,介紹了使用芯片自帶監(jiān)控ROM程序?qū)ζ螰lash進(jìn)行擦/寫(xiě)等操作的方法和特點(diǎn)。通過(guò)對(duì)一個(gè)因Flash程序被改寫(xiě)從而引起設(shè)備故障的案例進(jìn)行了分析,為因軟件引起的單片機(jī)Flash失效分析提供了參考。

引言


在目前種類(lèi)繁多的Flash MCU中,有很多可以自編程,即可以在單片機(jī)(MCU)運(yùn)行過(guò)程中,實(shí)時(shí)存儲(chǔ)程序運(yùn)行中產(chǎn)生的數(shù)據(jù),甚至是改變程序本身。具有這種功能的Flash MCU 可以靈活地使用Flash來(lái)存儲(chǔ)數(shù)據(jù),實(shí)現(xiàn)遠(yuǎn)程在線自動(dòng)升級(jí)自己的用戶(hù)代碼(Firmware)。MC68HC908JL8(以下簡(jiǎn)稱(chēng)JL8)是Freescale公司推出的一款08系列8位MCU,以成熟的Flash存儲(chǔ)技術(shù)取代了05系列的EEPROM,繼承了EEPROM的可再編程特性。JL8內(nèi)部有8 KB的Flash存儲(chǔ)區(qū),可用作程序存儲(chǔ)區(qū)和數(shù)據(jù)存儲(chǔ)區(qū)。該Flash為NOR Flash,程序可直接在Flash上運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中,用戶(hù)可以在這個(gè)非易失的存儲(chǔ)區(qū)內(nèi)反復(fù)存儲(chǔ)和讀取一個(gè)數(shù)據(jù)集。


由于Flash存儲(chǔ)區(qū)的最小擦除單位是頁(yè)(JL8一頁(yè)有64個(gè)字節(jié)),若數(shù)據(jù)的長(zhǎng)度小于一頁(yè),那么每次寫(xiě)和擦除都不能完全使用該頁(yè),沒(méi)有用到的地方就浪費(fèi)了。但如果是EEPROM就不存在這個(gè)問(wèn)題,因?yàn)镋EPROM可以基于字節(jié)進(jìn)行寫(xiě)和擦除。JL8為了解決這個(gè)問(wèn)題,在其監(jiān)控ROM區(qū)內(nèi)提供了EE_WRITE、EE_READ子例程給用戶(hù)使用,從而更充分地使用Flash頁(yè)進(jìn)行數(shù)據(jù)存儲(chǔ)。


1、Flash擦寫(xiě)機(jī)制和特性


Freescale公司JL8 MCU采用Flash存儲(chǔ)代碼和數(shù)據(jù),通過(guò)片上內(nèi)置電壓泵,支持在線編程[34]。在不需要外接高壓的情況下,通過(guò)指令可實(shí)現(xiàn)Flash空間的擦/寫(xiě)操作。Flash擦/寫(xiě)操作的實(shí)現(xiàn)主要有兩種方式:一是用戶(hù)自行編寫(xiě)程序,二是調(diào)用監(jiān)控ROM中自帶子程序。為防止意外操作,單片機(jī)在硬件設(shè)計(jì)上加以改進(jìn),增加了FLCR(Flash控制寄存器)和FLBPR(Flash塊保護(hù)寄存器)兩個(gè)寄存器,如果要擦/寫(xiě)Flash,須先打開(kāi)FLCR和FLBPR相應(yīng)位。用戶(hù)編程時(shí)需要控制兩個(gè)寄存器,而使用監(jiān)控ROM程序,只需設(shè)置FLBPR相應(yīng)位。


JL8 MCU Flash以頁(yè)為單位進(jìn)行擦除,可將“0”全部置為“1”。Flash寫(xiě)操作與擦除相反,可將“1”置為“0”,但原來(lái)為“0”處不能寫(xiě)為“1”。所以如果需要用Flash存儲(chǔ)數(shù)據(jù)時(shí),正常操作流程是先擦除再寫(xiě)。需要注意的是,擦除操作是按頁(yè)進(jìn)行,寫(xiě)操作沒(méi)有限制,可按照字節(jié)進(jìn)行。


JL8 MCU片內(nèi)Flash可在監(jiān)控模式(Monitor Mode)和用戶(hù)模式(User Mode)這兩種模式下在線編程。其中監(jiān)控模式主要用于主機(jī)向單片機(jī)進(jìn)行程序?qū)懭,一般用于?duì)出廠的空白芯片進(jìn)行編程。JL8 MCU監(jiān)控ROM所提供的所有子程序的入口地址和基本功能如表1所列。具體使用方法可參考技術(shù)文檔。


2、失效現(xiàn)象分析


Flash MCU出現(xiàn)程序改寫(xiě),原因可從硬件和軟件兩方面進(jìn)行分析[5]。硬件方面引起程序改寫(xiě)的機(jī)理主要有:①電源失效;②時(shí)鐘毛刺;③VDD爬升時(shí)間過(guò)長(zhǎng)。軟件上引起程序改寫(xiě)機(jī)理主要有:①VDD監(jiān)視沒(méi)有使能,或者VDD監(jiān)視雖然已經(jīng)使能,但沒(méi)有被設(shè)置成復(fù)位源,使得當(dāng)供電不正常時(shí)仍然進(jìn)行Flash操作,導(dǎo)致存儲(chǔ)數(shù)據(jù)產(chǎn)生異常操作;②用戶(hù)代碼(Firmware)對(duì)Flash的寫(xiě)操作不當(dāng);③PC指針跑飛。硬件引起的Flash MCU程序改寫(xiě)出現(xiàn)時(shí)具有隨機(jī)的特征, 即出現(xiàn)程序改寫(xiě)的位置不固定。


在一款家用電器通用壓縮機(jī)控制設(shè)備中,其核心控制單元采用Freescale公司MC68HC908JL8單片機(jī),用于控制和優(yōu)化壓縮機(jī),可實(shí)現(xiàn)壓縮機(jī)的開(kāi)關(guān)控制、壓縮機(jī)性能的提升以及保護(hù)功能。該控制單元程序只對(duì)Flash進(jìn)行讀操作,并無(wú)擦除/寫(xiě)需求和設(shè)計(jì)。在部分產(chǎn)品出現(xiàn)壓縮機(jī)控制設(shè)備停機(jī)故障后,通過(guò)回讀故障設(shè)備的單片機(jī)存儲(chǔ)Flash后,發(fā)現(xiàn)部分代碼已被改寫(xiě)。按照改寫(xiě)Flash分布情況,將失效現(xiàn)象分成兩類(lèi):一是復(fù)位中斷向量($FFFE~$FFFF)低字節(jié)($FFFF)處部分位被改寫(xiě),失效產(chǎn)品數(shù)量較多,達(dá)80%,具體現(xiàn)象是將部分位從“1”改為“0”(有3種情況,分別為FF>AF,EF>AF,9F>8F);二是用戶(hù)Flash空間部分字節(jié)被改寫(xiě),這類(lèi)較少,占20%,具體現(xiàn)象是將連續(xù)64字節(jié)改為0xFF。根據(jù)現(xiàn)象分析,第一類(lèi)類(lèi)似于字節(jié)寫(xiě)操作,由于未進(jìn)行擦除操作,所以只能將“1”改為“0”,且均是試圖將高4位改為“A”;第二類(lèi)類(lèi)似于片擦除操作。經(jīng)過(guò)故障整理和分析,由于具有較強(qiáng)意義上的非隨機(jī)特征,可基本排除硬件故障引起的程序改寫(xiě)。


通過(guò)分析源程序注意到,可能引起Flash程序改寫(xiě)的軟件原因如下:對(duì)于①,程序已經(jīng)將VDD監(jiān)視使能,且設(shè)置成復(fù)位源;對(duì)于②,用戶(hù)代碼設(shè)計(jì)時(shí)不對(duì)程序Flash進(jìn)行擦除/寫(xiě)操作,即使異常出現(xiàn)第一類(lèi)現(xiàn)象,也不會(huì)出現(xiàn)第二類(lèi)現(xiàn)象,而程序跑飛異常調(diào)用到監(jiān)控ROM程序可產(chǎn)生上述現(xiàn)象。在下節(jié)中對(duì)第二類(lèi)失效現(xiàn)象進(jìn)行復(fù)現(xiàn)。


3、現(xiàn)象復(fù)現(xiàn)


本節(jié)在不修改源代碼的基礎(chǔ)上,在源程序插入少量測(cè)試代碼以復(fù)現(xiàn)上述失效現(xiàn)象,證明在滿足測(cè)試代碼要求的條件下,可實(shí)現(xiàn)同樣的程序失效結(jié)果,僅對(duì)頁(yè)擦除操作進(jìn)行舉例。頁(yè)擦除操作可調(diào)用EraRnge實(shí)現(xiàn),具體如下:


//調(diào)用擦除子程序,起始地址是DE00,整體擦除1頁(yè)(即DE00~DE3F)

asm{//時(shí)鐘頻率為5 MHz

LDA #20

STA $120//在地址0x120處寫(xiě)入20,總線頻率//BUS_SPEED,該值為4倍時(shí)鐘頻率

LDA #$DE
STA $122
LDA #$00
STA $123 //在地址0x122~123處寫(xiě)入0x DE00,若不為//64的整數(shù)倍,將自動(dòng)截取
LDA #$FF
STA $FFCF //使能FLBPR,允許擦寫(xiě)操作
LDHX #$120 //使當(dāng)前累加寄存器A中數(shù)據(jù)為地址0x120
JSR $FCBE
}


在軟件運(yùn)行時(shí),由于外部原因使PC指針跑飛,跳轉(zhuǎn)到$FCBE,如果此時(shí)寄存器A中存儲(chǔ)數(shù)據(jù)(表示地址)指向的地址空間數(shù)據(jù)為20,則將對(duì)Flash進(jìn)行頁(yè)擦除操作。


結(jié)語(yǔ)


本文對(duì)使用JL8 MCU自帶監(jiān)控ROM程序?qū)ζ螰lash進(jìn)行擦/寫(xiě)等操作的方法和特點(diǎn)進(jìn)行了詳細(xì)的介紹。MCU的Flash失效現(xiàn)象和原因很多,這里僅對(duì)軟件引起的Flash程序改寫(xiě)的案例進(jìn)行了分析。根據(jù)具體現(xiàn)象判定程序改寫(xiě)是由于程序跑飛或者異常跳轉(zhuǎn)使得程序意外調(diào)用監(jiān)控ROM程序,為對(duì)Flash進(jìn)行失效分析的廣大研發(fā)和測(cè)試工程師提供一個(gè)失效分析案例和分析思路。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表