MC68HC908GP32 MCU的Flash存儲器在線編程技術
MC68HC908GP32 MCU的Flash存儲器在線編程技術
存儲器技術的發展對計算機技術的發展起到了極大的推動作用。理想的存儲器應該具備存取速度快、不易失、存儲密度高、價格低等特點。一般的存儲器具有這些特點中的一個或幾個。
近幾年Flash存儲器(閃速存儲器)技術趨于成熟,是目前比較理想的存儲器。閃速存儲器具有電可擦除、無需后備電源來保護數據、可在線編程、存儲密度高、低功耗、成本較低等特點。而這些特點,正式單片機所期望的,但早期引入片內Flash技術的單片機,在可靠性和穩定性方面仍有一些不足。隨著Flash技術的成熟,目前,許多單片機內部集成了Flash存儲器。Motorola公司在Flash技術相當成熟的時候推出了片內集成Flash存儲器的8位單片機,該單片機的Flash存儲器具有以下特點:
1、編程速度快及可靠性高
Motorola M68HC08系列單片機的片內Flash的整體擦除時間可以控制在5ms以內,對單字節的編程時間在40ns以內。片內Flash的存儲數據可以保持10年以上,可擦寫次數在1萬次以上。
2、單一電源電壓供電
一般的Flash存儲器,在正常的只讀情況下,只需要用戶為其提供普通的工作電壓即可,而要對其寫入(編程),則需要同時提供高于正常工作電壓的編程電壓。但是,Motorola M68HC08系列單片機通過在片內集成電荷泵,可由單一工作電壓在片內產生出編程電壓。這樣,可實現單一電源供電的在線編程,而不需要為Flash的編程在目標板上增加多余的硬件模塊。正因為Flash的讀寫電壓要求不同,一些公司的內置Flash存儲器便放棄了在線擦除寫入功能,而僅有通過編程器的寫入功能。
3、支持在線編程
Motorola M68HC08系列單片機的片內Flash支持在線編程(In-Circuit Program),允許單片機內部運行的程序去改寫Flash存儲器內容,這樣可以代替外部電可擦除存儲芯片,減少外圍部件,增加了嵌入式系統開發的方便性。
基于這些特點,掌握Motorola M68HC08系列單片機的Flash存儲器的編程技術,充分利用Motorola M68HC08系列單片機Flash存儲器的功能,對基于Motorola M68HC08系列單片機的嵌入式系統的開發是十分必要的。但是,與一般程序相比,Flash存儲器的編程技術相對比較復雜,有一些特殊之處,本文在實際應用基礎上,總結Motorola的 MC68HC908GP32單片機的Flash在線編程方法,給出編程實例,分析其中的技術難點。
二、MC68HC908GP32閃速存儲器在線編程要點
1、閃速存儲器的編程寄存器與編程步驟概述
在MC68HC908GP32單片機中,與Flash編程有關的寄存器有2個,它們是Flash控制寄存器(FLCR)和Flash塊保護寄存器(FLBPR)。FLCR 高4位未定義,低4位分別為HVEN位-高壓允許位(High-Voltage Enable Bit)、MASS位-整體擦除控制位(Mass -Erase Control Bit)、ERASE位-擦除控制位(Erase Control Bit)、PGM位-編程(寫入)控制位(Program Control Bit)。FLBPR的內容為Flash保護區域的起始地址的14~7位,保護區域的起始地址的最高位始終為1,而保護區域的起始地址的低7位(位6~0)始終為0。這兩個寄存器的具體含義與用法,在參考文獻[1]~[3]均可查到。
在M68HC08系列單片機中,對Flash進行擦除或寫入操作需要遵循一定的時序和步驟。對于整個M68HC908系列的各個型號,這些步驟是一樣的,但時序要求可能略有不同,針對具體型號的Flash進行編程時應參考相應的芯片手冊。同時需要注意的是,一些型號的監控ROM內含有Flash編程子程序,用戶可直接調用,例如MC68HC908JL3,有的型號則沒有,例如MC68HC908GP32,這種情況需自行編制子程序。這里以MC68HC908GP32的擦除一頁(128B)Flash為例說明基本操作過程。步驟如下:
⑴ $2→FLCR(1→ERASE位,0→MASS位):進行頁面擦除;
⑵ 讀Flash塊保護寄存器FLBPR;
⑶ 向被擦除的Flash頁內任意一個地址寫入任意值,為方便起見,一般向待擦除頁首地址寫入0;
⑷ 延時tnvs(>10μs),;
⑸ $A→FLCR(1→HVEN位);
⑹ 延時terase(>1ms);
⑺ $8→FLCR(0→ERASE位);
⑻ 延時tnvh(>5μs);
⑼ $0→FLCR(0→HVEN位);
⑽ 延時trcv(>1μs),完成一頁的擦除操作。
另外,Flash編程的基本操作還有“整體擦除操作"、“寫入(編程)操作"。整體擦除操作用于擦除GP32的整個Flash區域, 寫入(編程)操作用于以行(64字節)為單位對擦除過的Flash區域進行寫入。鑒于Flash編程的兩個寄存器的具體含義與用法及基本編程步驟在參考文獻[1]~[3]均可查到,限于篇幅,本文略。下面給出可供讀者直接使用的MC68HC908GP32的Flash存儲器編程子程序。