Flash存儲器技術趨于成熟,應用廣泛,它結合了OTP存儲器的成本優(yōu)勢和EEPROM的可再編程性能,是目前比較理想的存儲器。Flash存儲器具有電可擦除、無需后備電源來保護數(shù)據、可在線編程、存儲密度高、低功耗、成本較低等特點。一般我們都認為Flash儲存器具備固有不揮發(fā)性、易更新性,可靠性好的基本特性。
從 Flash儲存器的基本特點可以看出,在單片機中,可以利用F1ash存儲器固化程序,一般情況下通過編程器來究成F1ash存儲器工作于這種情況,叫監(jiān)控模式( Monitor mode)或寫入器棋式,這與一般的 EPROM、0TP、 EEPROM裝入程序的含義相似。另一方面,由于 Flash存儲器具有電可擦除功能,因此,在程序運行過程中,有可能對F1ash存儲區(qū)的教據或程序進行更新, Flash存儲器工作于這種情況,叫用戶模式式( User mode)或在線編程模式。
Flash儲存器的兩種編程模式:1、監(jiān)控模式或寫入器模式 2、用戶模式或在線編程模式,兩種模式各有優(yōu)缺點:監(jiān)控模式需要外部硬件支持,但不需要單片機內部程序的存在,所以適合對新出廠芯片進行編程寫入,或是對芯片進行整體擦除與寫入;用戶模式可以在單片機正常工作時進入,所以常用在程序運行過程中對部分Flash存儲器的一些單元內容進行修改,特別適合于目標系統(tǒng)的動態(tài)程序更新和運行數(shù)據的存儲。一般來說,兩種模式對Flash存儲器的編程操作的程序是一致的,差別在于調用這些程序的方式和環(huán)境。
下面我們來詳細講解下Flash儲存器在線編程模式
對Flash編程的基本操作有兩種:擦除(Erase)和寫入(Program)。擦除操作的含義是將存儲單元的內容由二進制的0變成1,而寫入操作的含義,是將存儲單元的內容由二進制的1變成0。擦除及寫入操作都是通過設置或清除Flash存儲器的控制寄存器(FLCR)中的某個或某些位來完成的。
Flash命令的執(zhí)行流程
GP32單片機Flash存儲器在線編程匯編語言實例
首先給出GP32單片機的Flash編程子程序,隨后給出在用戶模式下進行Flash在線編程的實例,并通過與PC機串行通信方式進行驗證,PC方采用VB語言編程。
1 Flash存儲器的擦除及寫入匯編子程序
由于GP32單片機內部的監(jiān)控ROM中沒有固化Flash編程子程序,要在運行中能對Flash進行在線編程,初始裝入的用戶程序,必須包含對Flash的擦除及寫入子程序。由于程序駐留Flash區(qū),在運行擦除及寫入子程序時,整個Flash區(qū)會被加上高于普通工作電壓的編程電壓,致使對Flash區(qū)讀取不穩(wěn)定,可能導致程序不能正常執(zhí)行。為了使擦除、寫入程序正常執(zhí)行,需將擦除、寫入子程序移入RAM中并轉入RAM區(qū)執(zhí)行。為此,需在RAM區(qū)開辟一個緩沖區(qū),供程序移入使用。下圖給出了Flash在線編程的匯編工程的文件組織情況。
2 擦除與寫入子程序編程要點說明
使用Flash在線編程技術可以省去外接EEPROM,不僅簡化了電路設計,也提高了系統(tǒng)穩(wěn)定性。但是Flash在線編程的技術文獻資料比較少,特別是實用程序目前還較少見到,涉及Flash在線編程的技術細節(jié)應仔細斟酌。由于擦除與寫入子程序是復制到RAM中執(zhí)行,我們給出的兩個子程序已經包含了復制并轉入RAM執(zhí)行的程序過程,正是由于這個特殊的過程,根據實際編程調試與項目開發(fā)過程中積累的經驗,提出以下注意點,供讀者參考:
①RAM中要留有足夠的緩沖區(qū),以便存放復制到RAM中的子程序,具體值是取擦除與寫入子程序中的大者即可。它們的大小可在編譯后的.LST文件中查得。
②擦除及寫入子程序中要調用的延時子程序均隨其后,以便同時復制到RAM中,最后一個標號是為復制方便而加入,否則復制時要用其它方法得到結束地址,編程變得不規(guī)范。
③擦除及寫入子程序中對延時子程序的調用必須使用“BSR 子程序名”,而不能使用 “JSR 子程序名”,因為這里的子程序是復制到RAM中執(zhí)行的,程序地址已經發(fā)生了變化,所以只能用相對調用。
④擦除子程序與寫入子程序及其中的延時子程序,若含有跳轉語句,不能使用“JMP 地址”,只能使用“BRA 地址”。原因同上。[!--empirenews.page--]
⑤使用不同型號芯片時,上述子程序中延時時間應根據芯片手冊予以變動。延時子程序也應根據不同的總線頻率加以變化,確保時間滿足時序要求。
⑥一次擦除后未被寫入過的區(qū)域可以再次調用寫入子程序寫入,但寫入過的區(qū)域,未經擦除不能重寫。
⑦由于擦除是每次擦除一頁(128字節(jié)),所以數(shù)據應合理安排,避免誤擦。
⑧頁首地址的定義須遵照保護寄存器FLBPR定義的規(guī)則,即對GP32來說,頁地址的低7位為0。
⑨在線編程時使用的Flash存儲區(qū)域應在程序Flash存儲區(qū)域之前,因為Flash保護區(qū)為FLBPR決定的地址至末尾。