文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.182990
中文引用格式: 徐立國,李德建,于寶東,等. 一種支持在線升級的NOR Flash控制器設(shè)計[J].電子技術(shù)應(yīng)用,2019,45(10):50-57.
英文引用格式: Xu Liguo,Li Dejian,Yu Baodong,et al. Design of an embedded NOR Flash controller IP for IAP[J]. Application of Electronic Technique,2019,45(10):50-57.
0 引言
隨著智能化的發(fā)展以及物聯(lián)網(wǎng)的興起,微控制器(Micro Control Unit,MCU)主控芯片得到了越來越多的應(yīng)用。當(dāng)前MCU主控芯片一般都用NOR Flash作為片上系統(tǒng)存儲器,進(jìn)行指令和數(shù)據(jù)存取,根據(jù)應(yīng)用,用戶可以對片上Flash的指定區(qū)域進(jìn)行擦寫。在工業(yè)電力控制的應(yīng)用中,在線升級(In Application Programming,IAP)是一種常用的操作,意思是“在應(yīng)用編程”,即在程序運行時,程序存儲器可由程序自身進(jìn)行擦寫。具體來說,就是將片上Flash存儲器分為bootloader(IAP)程序和USER APP程序兩部分,當(dāng)需要在線升級時,bootloader中的IAP程序通過外部通信接口接收數(shù)據(jù),然后擦除和寫入USER APP部分,同時寫入更新標(biāo)志,然后系統(tǒng)重新啟動執(zhí)行USER APP程序,達(dá)到在線升級的目的。
通常有些主控芯片會要求IAP程序調(diào)用的Flash擦寫程序要在SRAM中執(zhí)行,IAP程序到USER APP程序跳轉(zhuǎn)需要進(jìn)行中斷向量表重映射。擦寫Flash USER APP程序區(qū)域過程中,要求CPU不能對Flash發(fā)起讀操作,如果發(fā)生,則不能正確返回讀取結(jié)果。
本文給出了一種支持IAP流程的兩片F(xiàn)lash拼接的Flash控制器方案,IAP程序直接在Flash執(zhí)行,IAP程序到USER APP程序跳轉(zhuǎn)提供一種快速方法,通過硬件直接完成地址映射。IAP程序執(zhí)行過程中,CPU可以對Flash發(fā)起讀指令操作,擦寫結(jié)束能正確返回讀結(jié)果。
1 NOR Flash器件
本文采用的NOR Flash IP基于UMC55 nm工藝,型號是UM055EFLLP128KX032CBA,讀寫位寬32 bit,地址線17 bit。main區(qū)總?cè)萘? Mb(1 K×128×32 bit),1 K個扇區(qū);NVR區(qū)總?cè)萘?6 Kb(4×128×32 bit),4個扇區(qū)。每個扇區(qū)容量為128×32 bit=4 Kb,每個扇區(qū)包含2個頁,每個頁包含64個word(1個word為32 bit)。結(jié)構(gòu)框圖如圖1所示。
Flash接口信號如表1所示。
NOR Flash器件的操作分為讀、寫、扇區(qū)擦除、片擦除操作。時序圖如圖2~圖5所示。
Flash讀時序,發(fā)起AE脈沖鎖定地址,tAA時間之后讀出數(shù)據(jù)有效。
Flash寫時序,先拉高PROG信號,然后AE脈沖鎖定地址,產(chǎn)生PROG2脈沖寫入對應(yīng)數(shù)據(jù)。PROG拉高持續(xù)時間是tHV,也就是說寫入時間是用戶自己控制的。根據(jù)tHV的時間不同,可寫入的word個數(shù)也不同。本文只討論單個word的寫入。
Flash扇區(qū)擦除時序,扇區(qū)擦除起始要用AE鎖定扇區(qū)地址,拉起ERASE信號,執(zhí)行擦除時序。ERASE時間由tERASE時間參數(shù)控制。
Flash片擦除時序,擦除起始要用AE鎖定任意地址,片擦除除了拉高ERASE信號,還要拉起CHIP信號。ERASE時間由tSCE時間參數(shù)控制。
2 控制器方案
2.1 結(jié)構(gòu)框圖
Flash控制器模塊在SoC系統(tǒng)中位于AHB matrix總線矩陣和Flash器件之間,CPU為ARM Cortex M4,總線為哈佛結(jié)構(gòu)。CPU可以通過IBUS和DBUS對Flash器件進(jìn)行訪問。Flash控制器結(jié)構(gòu)框圖如圖6所示。
Flash控制器實現(xiàn)了CPU對Flash器件的讀、寫和擦除。支持CPU在Flash中執(zhí)行程序的同時可以對Flash其他區(qū)域進(jìn)行擦寫。Flash支持在大于1 MHz的多種頻率下能對Flash器件進(jìn)行擦寫。
Flash控制器包含地址映射控制模塊、SFR模塊、狀態(tài)機(jī)控制模塊、時序轉(zhuǎn)化模塊。地址映射控制模塊用于在線升級時對AHB訪問地址進(jìn)行映射;SFR模塊用于Flash控制器的模式控制選擇,配置和狀態(tài)寄存器寄存等;狀態(tài)機(jī)控制模塊用于Flash控制器對各種模式的工作狀態(tài)控制;時序轉(zhuǎn)換模塊用于根據(jù)狀態(tài)機(jī)的當(dāng)前狀態(tài)來產(chǎn)生對應(yīng)的Flash器件的時序。
2.2 狀態(tài)機(jī)設(shè)計
Flash控制器的狀態(tài)機(jī)如圖7所示,包含9個狀態(tài),INIT狀態(tài)完成Flash上電啟動,init_done之后進(jìn)入READ狀態(tài)。READ狀態(tài)下支持AHB總線讀操作。
如果要執(zhí)行擦寫,第一步則在READ狀態(tài)下配置SFR模塊的模式寄存器(PROG或者SEC_ERASE或者CHIP_ERASE),然后狀態(tài)機(jī)跳轉(zhuǎn)至WAIT_WR狀態(tài)(注:在WAIT_WR狀態(tài)也支持AHB總線讀操作)。
第二步當(dāng)AHB總線有寫操作,則狀態(tài)機(jī)跳轉(zhuǎn)至對應(yīng)的PROG或SEC_ERASE或CHIP_ERASE狀態(tài),開始對應(yīng)的擦寫時序轉(zhuǎn)化。時序轉(zhuǎn)化結(jié)束后,PROG跳轉(zhuǎn)到TRCV_P,SEC_ERASE和CHIP_ERASE跳轉(zhuǎn)到TRCV_E。之后跳轉(zhuǎn)到TRW狀態(tài),結(jié)束后返回READ狀態(tài)。
3 控制器實現(xiàn)分析
3.1 AHB總線數(shù)據(jù)相位擴(kuò)展原理
AMBA AHB總線的寫數(shù)據(jù)總線用來將數(shù)據(jù)從主機(jī)傳輸?shù)綇臋C(jī)上,而讀數(shù)據(jù)總線用來將數(shù)據(jù)從從機(jī)傳輸?shù)街鳈C(jī)上。
AHB總線基本傳輸包含兩個截然不同的部分:地址相位,只持續(xù)單個周期;數(shù)據(jù)相位,可能需要多個周期,這通過使用hready信號實現(xiàn)。
地址不長期有效,所以所有從機(jī)必須在這個時段(傳輸?shù)刂窌r)采樣地址。然而,通過hready信號可以延長數(shù)據(jù)。當(dāng)該信號為低時導(dǎo)致在傳輸中插入等待狀態(tài)同時允許從機(jī)有額外的時間提供或者采樣數(shù)據(jù)。
圖8表示最簡單的傳輸,沒有等待狀態(tài)。在這個沒有等待狀態(tài)的簡單傳輸中,主機(jī)在HCLK的上升沿之后將地址和控制信號驅(qū)動到總線上;然后在時鐘的下一個上升沿從機(jī)采樣地址和控制信息;在從機(jī)采樣了地址和控制信號后能夠開始驅(qū)動適當(dāng)?shù)捻憫?yīng)并且該響應(yīng)被總線主機(jī)在第三個時鐘的上升沿采樣。
圖9為具有等待狀態(tài)的傳輸。從機(jī)插入等待周期(HREADY拉低)到任意傳輸中,這樣擴(kuò)展了傳輸完成允許的附加時間。對寫操作而言,總線主機(jī)必須保持?jǐn)?shù)據(jù)在整個擴(kuò)展周期中穩(wěn)定。
Flash控制器設(shè)計的擦寫模式狀態(tài)跳轉(zhuǎn)利用了數(shù)據(jù)相位擴(kuò)展階段數(shù)據(jù)保持的原理。
3.2 SFR區(qū)的位置
如圖10所示,F(xiàn)lash擦寫模式寄存器SFR區(qū)放在ARM cortex M4的Code區(qū),Code區(qū)指0.5 GB以下,即小于0x2000_0000地址的空間,Code區(qū)只能IBus/DBus總線通過AHB接口進(jìn)行訪問。不放在Peripheral區(qū)APB總線訪問,是為了避免IBus/DBus和SBus操作Flash的沖突。
以Flash寫操作為例,如果模式寄存器放在Peripheral區(qū)APB總線訪問,則CPU SBus配置完P(guān)ROG模式寄存器(訪問Peripheral區(qū)),準(zhǔn)備開始PROG時序轉(zhuǎn)換時,CPU IBus/DBus可能還在讀取Flash操作中(訪問Code區(qū)),這樣控制器狀態(tài)機(jī)需要等待判斷讀結(jié)束才能跳轉(zhuǎn),控制不好可能Flash的PROG寫操作和讀操作會沖突。
如果模式寄存器放在Code區(qū),則會避免這種情況。配置寫模式寄存器的總線是CPU DBus(訪問Code區(qū)),配置同時必然不會有讀Flash(IBus/DBus訪問Code區(qū))的操作,因此下一刻即可以開始進(jìn)行狀態(tài)機(jī)從READ到WAIT_WR或WAIT_WR到PROG的跳轉(zhuǎn),WAIT_WR跳轉(zhuǎn)到PROG后會開始Flash PROG時序轉(zhuǎn)化。
3.3 Flash讀操作
Flash讀操作,控制器可以直接將AHB總線讀操作進(jìn)行Flash讀時序轉(zhuǎn)換。Flash控制器的READ狀態(tài)和WAIT_WR狀態(tài)都支持AHB總線讀操作。
READ狀態(tài)的讀操作時序圖如圖11所示。
WAIT_WR狀態(tài)的讀操作時序圖如圖12所示。
3.4 Flash寫操作
控制器在PROG狀態(tài)可以完成Flash寫操作的時序轉(zhuǎn)化,采用hready拉總線方式。
進(jìn)入PROG狀態(tài)需要CPU執(zhí)行兩步總線寫操作,第一步,總線配置寫模式,第二步,總線寫操作給出寫地址,寫數(shù)據(jù)的采樣利用的就是AHB總線寫操作的數(shù)據(jù)在擴(kuò)展周期穩(wěn)定的原理。
詳細(xì)的Flash寫操作的步驟是:
(1)配置寫模式,READ狀態(tài)跳轉(zhuǎn)到WAIT_WR狀態(tài);
(2)在WAIT_WR狀態(tài),向目的地址發(fā)起AHB總線寫,狀態(tài)機(jī)跳轉(zhuǎn)到PROG狀態(tài),同時鎖定總線的寫地址,然后利用hready拉低時數(shù)據(jù)保持的原理,鎖定總線的寫數(shù)據(jù),然后進(jìn)行PROG時序轉(zhuǎn)化;
(3)在PROG狀態(tài),PROG信號拉高,PROG2產(chǎn)生寫脈沖,完成word的寫入。之后hready信號被釋放拉高,狀態(tài)機(jī)跳到TRCV_P,之后TRW,返回READ態(tài)。
注:如果在PROG狀態(tài)有AHB總線讀操作,hready會被拉低,讀控制信號和讀地址被鎖存,持續(xù)到編程時間結(jié)束,直到返回READ態(tài),正確返回讀結(jié)果。
舉例:以圖13、圖14為例說明Flash寫操作時序。比如向0x00_8004地址(CPU地址0x0002_0010)寫入0x1234_5678數(shù)據(jù)。write_sfr_valid信號(配置PROG模式脈沖)觸發(fā)READ狀態(tài)跳到WAIT_WR狀態(tài),然后write_valid信號(AHB總線寫0x0002_0010地址,數(shù)據(jù)為0x1234_5678)觸發(fā)WAIT_WR狀態(tài)跳到PROG,開始時序轉(zhuǎn)化。
READ->WAIT_WR->PROG寫操作時序圖如圖13所示。
完整的寫操作PROG時序示意圖如圖14所示。
3.5 Flash擦除操作
Flash在SEC_ERASE和CHIP_ERASE狀態(tài)可以完成擦除操作的時序轉(zhuǎn)化。
進(jìn)入擦除操作需要CPU執(zhí)行兩步總線寫操作,第一步,配置擦除模式,第二步,總線寫操作給出擦除地址,對于扇區(qū)擦除,總線寫操作地址即是擦除地址,片擦除可以是任意地址。
以扇區(qū)擦除為例,詳細(xì)的步驟是:
(1)配置扇區(qū)擦除模式,READ狀態(tài)跳轉(zhuǎn)到WAIT_WR狀態(tài);
(2)在WAIT_WR狀態(tài),向目的扇區(qū)地址發(fā)起AHB總線寫,狀態(tài)機(jī)跳轉(zhuǎn)到SEC_ERASE狀態(tài),同時鎖定總線的寫地址,提取待擦除的扇區(qū)地址,然后hready信號拉低,進(jìn)行扇區(qū)擦除時序轉(zhuǎn)化;
(3)在SEC_ERASE狀態(tài),ERASE信號拉高,WEB信號拉低,ERASE信號持續(xù)時間達(dá)到配置Thv的值時,狀態(tài)機(jī)跳到TRCV_E,之后TRW,返回READ態(tài)。
舉例:以圖15為例說明Flash扇區(qū)擦除時序。比如擦除0x00_8004扇區(qū)(CPU地址為0x0002_0010)。write_sfr_valid信號(配置SEC_ERASE模式脈沖)觸發(fā)READ狀態(tài)跳到WAIT_WR狀態(tài),然后write_valid 信號(AHB總線寫0x0002_0010地址)觸發(fā)WAIT_WR狀態(tài)跳到SEC_ERASE,開始時序轉(zhuǎn)化。
3.6 Flash自編程操作
Flash自編程操作即是Flash寫程序在Flash內(nèi)部執(zhí)行,同時對Flash其他區(qū)域進(jìn)行扇區(qū)擦除和寫操作的過程。
CPU每執(zhí)行一條指令的操作一般分為取指令、分析指令、執(zhí)行指令。轉(zhuǎn)化為對Flash的操作就是讀或?qū)?。利用寫Flash操作之后hready拉低,鎖定總線,進(jìn)行Flash讀寫時序轉(zhuǎn)化。
扇區(qū)擦除操作的分解步驟如下:
(1)(READ狀態(tài))讀Flash操作取指令;
(2)發(fā)起總線寫操作,配置扇區(qū)擦除模式寄存器(從READ跳轉(zhuǎn)到WAIT_WR);
(3)(WAIT_WR狀態(tài))讀Flash操作取指令;
(4)發(fā)起總線寫操作(從WAIT_WR跳轉(zhuǎn)到PROG);
(5)hready拉低,鎖定總線,同時從總線寫地址高bit提取Flash扇區(qū)地址(當(dāng)前總線寫數(shù)據(jù)不必關(guān)心),然后發(fā)起扇區(qū)擦除時序轉(zhuǎn)化;
(6)(從PROG跳轉(zhuǎn)到TRCV_E,然后TRW,返回READ)hready拉高,釋放總線,返回步驟(1)。
寫操作的分解步驟如下:
(1)(READ狀態(tài))讀Flash操作取指令;
(2)發(fā)起總線寫操作,配置寫模式寄存器(從READ跳轉(zhuǎn)到WAIT_WR);
(3)(WAIT_WR狀態(tài))讀Flash操作取指令;
(4)發(fā)起總線寫操作(從WAIT_WR跳轉(zhuǎn)到PROG);
(5)hready拉低,鎖定總線,同時鎖定總線當(dāng)前地址作為寫地址,利用hready拉低AHB總線數(shù)據(jù)擴(kuò)展周期期間寫數(shù)據(jù)不變原理鎖定當(dāng)前寫數(shù)據(jù),發(fā)起word寫時序轉(zhuǎn)化;
(6)(從PROG跳轉(zhuǎn)到TRCV_P,然后TRW,返回READ)hready拉高,釋放總線,返回步驟(1)。
3.7 IAP硬件地址映射
Flash控制器支持兩片F(xiàn)lash器件工作,F(xiàn)lash器件為UM055EFLLP128KX032CBA型號,深度方向拼接,統(tǒng)一編址,main區(qū)(CPU地址)范圍從0x00_0000H~0x0F_FFFFH,NVR區(qū)(CPU地址)從0x10_0000~0x10_0FFFH。
正常情況下Flash Bank0位于低地址區(qū)域,F(xiàn)lashBank1位于高地址區(qū)域。正常啟動時CPU從Bank0低地址區(qū)域開始執(zhí)行程序,如圖16所示。
在IAP流程中,如果判斷待升級程序容量小于一個Bank容量,則可以使用這種快速在線升級方法,Boot-loader IAP程序放在Flash Bank0,將用戶程序USER APP程序?qū)懭隖lash Bank1中,然后寫入更新標(biāo)志位(標(biāo)志位放在Flash NVR區(qū))。發(fā)起系統(tǒng)軟復(fù)位,硬件將地址重映射,系統(tǒng)從Bank1高地址區(qū)域開始執(zhí)行程序,如圖17所示。
該設(shè)計不需要做中斷向量重映射,減少了軟件的復(fù)雜度,方便用戶使用。
3.8 時序參數(shù)隨頻率變化
Flash器件要在系統(tǒng)中正常工作,讀寫擦除的時序參數(shù)要滿足器件要求。而Flash控制器根據(jù)系統(tǒng)的要求,必須能在多種頻率下進(jìn)行正常讀寫和擦除,這些時序參數(shù)值是內(nèi)部若干個counter計數(shù)器根據(jù)頻率產(chǎn)生的。如果在每個特定頻率下,用軟件進(jìn)行一一重新配置所有的時序參數(shù)是比較繁瑣的。
本控制器將時序參數(shù)分為了兩類考慮,做了如下設(shè)計:
(1)讀時序參數(shù)
Flash讀操作的各時序參數(shù)設(shè)計上已經(jīng)給出默認(rèn)值,能保證系統(tǒng)啟動正常工作。需要考慮的主要參數(shù)是tAA,表示AE有效到dout數(shù)據(jù)有效的選通時間,F(xiàn)lash器件要求必須大于35 ns。本控制器設(shè)計了讀延遲參數(shù)值read_latency_cnt,根據(jù)不同頻率可以配置不同值以滿足要求并得到最快訪問速度。比如在Flash控制器工作時鐘為100 MHz時,周期為10 ns,為滿足大于35 ns的時間,read_latency_cnt最小值需要配置為4。讀時序參數(shù)如表2所示。
(2)擦寫時序參數(shù)
擦寫時序各時序參數(shù)值設(shè)計上已經(jīng)給出默認(rèn)值,能保證系統(tǒng)啟動正常工作。當(dāng)系統(tǒng)工作頻率變化時,擦寫的各時序參數(shù)值也要滿足器件要求。
本控制器設(shè)計了工作頻率寄存器T1US_REF,含義是1 μs需要多少個時鐘周期,如果為60 MHz,則配置該寄存器為60,如果為100 MHz,則配置該寄存器為100。內(nèi)部的微秒級的各時序參數(shù)會自動以該寄存器為基準(zhǔn)同步變化,這樣就減少了軟件根據(jù)不同頻率頻繁修改多個時序參數(shù)寄存器的復(fù)雜度。擦寫時序參數(shù)如表3所示。
4 結(jié)論
本文給出了基于ARM cortex m4 SoC架構(gòu)下兩片UMC55 nm Flash macro IP拼接工作的NOR Flash控制器的設(shè)計,介紹了NOR Flash的讀、寫、擦各種時序的設(shè)計流程。
本控制器的特點如下:
(1)利用AMBA AHB hready信號為低時數(shù)據(jù)相位擴(kuò)展的原理,支持Flash在線編程,執(zhí)行過程中支持Flash讀操作。
(2)在IAP程序跳轉(zhuǎn)USER APP程序時不需要中斷向量表重定向,直接硬件地址映射實現(xiàn)。
(3)通過設(shè)定1 μs工作頻率配置寄存器,硬件自動計算滿足不同頻率下的正常擦寫時序參數(shù),減少了軟件逐個配置多個時序參數(shù)的復(fù)雜度。
含有該Flash控制器的MCU主控芯片已經(jīng)通過仿真和FPGA驗證,且在UMC55 nm工藝上流片成功,芯片樣品經(jīng)過測試,F(xiàn)lash控制器功能良好,方便使用。
參考文獻(xiàn)
[1] 謝同同,李天陽.一種嵌入式NOR Flash 控制器IP的設(shè)計[J].電子與封裝,2016(7):18-21,43.
[2] 田鵬,聶澤東,張正平,等.一種兼容AHB總線的Nor Flash控制器IP設(shè)計[J].微電子學(xué)與計算機(jī),2013(6):88-91,96.
[3] 周芝梅,趙東艷,張海峰,等.基于IR46標(biāo)準(zhǔn)的雙芯電能表主控關(guān)鍵技術(shù)研究[J].電子技術(shù)應(yīng)用,2017,43(10):7-11,19.
[4] 蔣勁松,黃凱,陳辰,等.基于預(yù)取和緩存原理的片上Flash加速控制器設(shè)計[J].計算機(jī)工程與科學(xué),2016(12):2381-2391.
[5] ARM.AMBA Specification(Rev 2.0)[Z].1999.
作者信息:
徐立國1,2,李德建1,2,于寶東1,2,楊立新1,2,王小曼1,2
(1.北京智芯微電子科技有限公司 國家電網(wǎng)公司重點實驗室 電力芯片設(shè)計分析實驗室,北京100192;
2.北京智芯微電子科技有限公司 北京市電力高可靠性集成電路設(shè)計工程技術(shù)研究中心,北京100192)