文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.182990
中文引用格式: 徐立國,,李德建,,于寶東,等. 一種支持在線升級的NOR Flash控制器設(shè)計(jì)[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)用編程”,,即在程序運(yùn)行時(shí),,程序存儲器可由程序自身進(jìn)行擦寫。具體來說,,就是將片上Flash存儲器分為bootloader(IAP)程序和USER APP程序兩部分,,當(dāng)需要在線升級時(shí),bootloader中的IAP程序通過外部通信接口接收數(shù)據(jù),,然后擦除和寫入U(xiǎn)SER APP部分,,同時(shí)寫入更新標(biāo)志,然后系統(tǒng)重新啟動(dò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個(gè)扇區(qū),;NVR區(qū)總?cè)萘?6 Kb(4×128×32 bit),4個(gè)扇區(qū),。每個(gè)扇區(qū)容量為128×32 bit=4 Kb,每個(gè)扇區(qū)包含2個(gè)頁,,每個(gè)頁包含64個(gè)word(1個(gè)word為32 bit),。結(jié)構(gòu)框圖如圖1所示。
Flash接口信號如表1所示,。
NOR Flash器件的操作分為讀,、寫、扇區(qū)擦除,、片擦除操作,。時(shí)序圖如圖2~圖5所示。
Flash讀時(shí)序,,發(fā)起AE脈沖鎖定地址,,tAA時(shí)間之后讀出數(shù)據(jù)有效。
Flash寫時(shí)序,,先拉高PROG信號,,然后AE脈沖鎖定地址,產(chǎn)生PROG2脈沖寫入對應(yīng)數(shù)據(jù),。PROG拉高持續(xù)時(shí)間是tHV,,也就是說寫入時(shí)間是用戶自己控制的。根據(jù)tHV的時(shí)間不同,,可寫入的word個(gè)數(shù)也不同,。本文只討論單個(gè)word的寫入。
Flash扇區(qū)擦除時(shí)序,,扇區(qū)擦除起始要用AE鎖定扇區(qū)地址,,拉起ERASE信號,執(zhí)行擦除時(shí)序,。ERASE時(shí)間由tERASE時(shí)間參數(shù)控制,。
Flash片擦除時(shí)序,擦除起始要用AE鎖定任意地址,,片擦除除了拉高ERASE信號,,還要拉起CHIP信號。ERASE時(shí)間由tSCE時(shí)間參數(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控制器實(shí)現(xiàn)了CPU對Flash器件的讀、寫和擦除,。支持CPU在Flash中執(zhí)行程序的同時(shí)可以對Flash其他區(qū)域進(jìn)行擦寫,。Flash支持在大于1 MHz的多種頻率下能對Flash器件進(jìn)行擦寫。
Flash控制器包含地址映射控制模塊,、SFR模塊,、狀態(tài)機(jī)控制模塊、時(shí)序轉(zhuǎn)化模塊,。地址映射控制模塊用于在線升級時(shí)對AHB訪問地址進(jìn)行映射,;SFR模塊用于Flash控制器的模式控制選擇,配置和狀態(tài)寄存器寄存等,;狀態(tài)機(jī)控制模塊用于Flash控制器對各種模式的工作狀態(tài)控制,;時(shí)序轉(zhuǎn)換模塊用于根據(jù)狀態(tài)機(jī)的當(dāng)前狀態(tài)來產(chǎn)生對應(yīng)的Flash器件的時(shí)序。
2.2 狀態(tài)機(jī)設(shè)計(jì)
Flash控制器的狀態(tài)機(jī)如圖7所示,,包含9個(gè)狀態(tài),,INIT狀態(tài)完成Flash上電啟動(dòng),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)的擦寫時(shí)序轉(zhuǎn)化,。時(shí)序轉(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 控制器實(shí)現(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總線基本傳輸包含兩個(gè)截然不同的部分:地址相位,,只持續(xù)單個(gè)周期,;數(shù)據(jù)相位,可能需要多個(gè)周期,,這通過使用hready信號實(shí)現(xiàn),。
地址不長期有效,所以所有從機(jī)必須在這個(gè)時(shí)段(傳輸?shù)刂窌r(shí))采樣地址。然而,,通過hready信號可以延長數(shù)據(jù),。當(dāng)該信號為低時(shí)導(dǎo)致在傳輸中插入等待狀態(tài)同時(shí)允許從機(jī)有額外的時(shí)間提供或者采樣數(shù)據(jù)。
圖8表示最簡單的傳輸,,沒有等待狀態(tài),。在這個(gè)沒有等待狀態(tài)的簡單傳輸中,主機(jī)在HCLK的上升沿之后將地址和控制信號驅(qū)動(dòng)到總線上,;然后在時(shí)鐘的下一個(gè)上升沿從機(jī)采樣地址和控制信息,;在從機(jī)采樣了地址和控制信號后能夠開始驅(qū)動(dòng)適當(dāng)?shù)捻憫?yīng)并且該響應(yīng)被總線主機(jī)在第三個(gè)時(shí)鐘的上升沿采樣。
圖9為具有等待狀態(tài)的傳輸,。從機(jī)插入等待周期(HREADY拉低)到任意傳輸中,這樣擴(kuò)展了傳輸完成允許的附加時(shí)間,。對寫操作而言,,總線主機(jī)必須保持?jǐn)?shù)據(jù)在整個(gè)擴(kuò)展周期中穩(wěn)定。
Flash控制器設(shè)計(jì)的擦寫模式狀態(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時(shí)序轉(zhuǎn)換時(shí),CPU IBus/DBus可能還在讀取Flash操作中(訪問Code區(qū)),,這樣控制器狀態(tài)機(jī)需要等待判斷讀結(jié)束才能跳轉(zhuǎn),,控制不好可能Flash的PROG寫操作和讀操作會沖突。
如果模式寄存器放在Code區(qū),,則會避免這種情況,。配置寫模式寄存器的總線是CPU DBus(訪問Code區(qū)),配置同時(shí)必然不會有讀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時(shí)序轉(zhuǎn)化。
3.3 Flash讀操作
Flash讀操作,,控制器可以直接將AHB總線讀操作進(jìn)行Flash讀時(shí)序轉(zhuǎn)換,。Flash控制器的READ狀態(tài)和WAIT_WR狀態(tài)都支持AHB總線讀操作。
READ狀態(tài)的讀操作時(shí)序圖如圖11所示。
WAIT_WR狀態(tài)的讀操作時(shí)序圖如圖12所示,。
3.4 Flash寫操作
控制器在PROG狀態(tài)可以完成Flash寫操作的時(shí)序轉(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),,同時(shí)鎖定總線的寫地址,然后利用hready拉低時(shí)數(shù)據(jù)保持的原理,,鎖定總線的寫數(shù)據(jù),,然后進(jìn)行PROG時(shí)序轉(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ù)到編程時(shí)間結(jié)束,直到返回READ態(tài),,正確返回讀結(jié)果,。
舉例:以圖13、圖14為例說明Flash寫操作時(shí)序,。比如向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,,開始時(shí)序轉(zhuǎn)化,。
READ->WAIT_WR->PROG寫操作時(shí)序圖如圖13所示。
完整的寫操作PROG時(shí)序示意圖如圖14所示,。
3.5 Flash擦除操作
Flash在SEC_ERASE和CHIP_ERASE狀態(tài)可以完成擦除操作的時(shí)序轉(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),,同時(shí)鎖定總線的寫地址,提取待擦除的扇區(qū)地址,,然后hready信號拉低,,進(jìn)行扇區(qū)擦除時(shí)序轉(zhuǎn)化;
(3)在SEC_ERASE狀態(tài),,ERASE信號拉高,,WEB信號拉低,ERASE信號持續(xù)時(shí)間達(dá)到配置Thv的值時(shí),,狀態(tài)機(jī)跳到TRCV_E,,之后TRW,返回READ態(tài),。
舉例:以圖15為例說明Flash扇區(qū)擦除時(shí)序,。比如擦除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,,開始時(shí)序轉(zhuǎn)化。
3.6 Flash自編程操作
Flash自編程操作即是Flash寫程序在Flash內(nèi)部執(zhí)行,,同時(shí)對Flash其他區(qū)域進(jìn)行扇區(qū)擦除和寫操作的過程,。
CPU每執(zhí)行一條指令的操作一般分為取指令、分析指令,、執(zhí)行指令,。轉(zhuǎn)化為對Flash的操作就是讀或?qū)?。利用寫Flash操作之后hready拉低,鎖定總線,,進(jìn)行Flash讀寫時(shí)序轉(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拉低,,鎖定總線,同時(shí)從總線寫地址高bit提取Flash扇區(qū)地址(當(dāng)前總線寫數(shù)據(jù)不必關(guān)心),,然后發(fā)起扇區(qū)擦除時(shí)序轉(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拉低,,鎖定總線,,同時(shí)鎖定總線當(dāng)前地址作為寫地址,利用hready拉低AHB總線數(shù)據(jù)擴(kuò)展周期期間寫數(shù)據(jù)不變原理鎖定當(dāng)前寫數(shù)據(jù),,發(fā)起word寫時(shí)序轉(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ū)域,。正常啟動(dòng)時(shí)CPU從Bank0低地址區(qū)域開始執(zhí)行程序,如圖16所示,。
在IAP流程中,,如果判斷待升級程序容量小于一個(gè)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è)計(jì)不需要做中斷向量重映射,減少了軟件的復(fù)雜度,,方便用戶使用,。
3.8 時(shí)序參數(shù)隨頻率變化
Flash器件要在系統(tǒng)中正常工作,讀寫擦除的時(shí)序參數(shù)要滿足器件要求,。而Flash控制器根據(jù)系統(tǒng)的要求,,必須能在多種頻率下進(jìn)行正常讀寫和擦除,這些時(shí)序參數(shù)值是內(nèi)部若干個(gè)counter計(jì)數(shù)器根據(jù)頻率產(chǎn)生的,。如果在每個(gè)特定頻率下,,用軟件進(jìn)行一一重新配置所有的時(shí)序參數(shù)是比較繁瑣的。
本控制器將時(shí)序參數(shù)分為了兩類考慮,,做了如下設(shè)計(jì):
(1)讀時(shí)序參數(shù)
Flash讀操作的各時(shí)序參數(shù)設(shè)計(jì)上已經(jīng)給出默認(rèn)值,能保證系統(tǒng)啟動(dòng)正常工作,。需要考慮的主要參數(shù)是tAA,,表示AE有效到dout數(shù)據(jù)有效的選通時(shí)間,F(xiàn)lash器件要求必須大于35 ns,。本控制器設(shè)計(jì)了讀延遲參數(shù)值read_latency_cnt,,根據(jù)不同頻率可以配置不同值以滿足要求并得到最快訪問速度。比如在Flash控制器工作時(shí)鐘為100 MHz時(shí),,周期為10 ns,,為滿足大于35 ns的時(shí)間,read_latency_cnt最小值需要配置為4,。讀時(shí)序參數(shù)如表2所示,。
(2)擦寫時(shí)序參數(shù)
擦寫時(shí)序各時(shí)序參數(shù)值設(shè)計(jì)上已經(jīng)給出默認(rèn)值,能保證系統(tǒng)啟動(dòng)正常工作,。當(dāng)系統(tǒng)工作頻率變化時(shí),,擦寫的各時(shí)序參數(shù)值也要滿足器件要求,。
本控制器設(shè)計(jì)了工作頻率寄存器T1US_REF,含義是1 μs需要多少個(gè)時(shí)鐘周期,,如果為60 MHz,,則配置該寄存器為60,如果為100 MHz,,則配置該寄存器為100,。內(nèi)部的微秒級的各時(shí)序參數(shù)會自動(dòng)以該寄存器為基準(zhǔn)同步變化,這樣就減少了軟件根據(jù)不同頻率頻繁修改多個(gè)時(shí)序參數(shù)寄存器的復(fù)雜度,。擦寫時(shí)序參數(shù)如表3所示,。
4 結(jié)論
本文給出了基于ARM cortex m4 SoC架構(gòu)下兩片UMC55 nm Flash macro IP拼接工作的NOR Flash控制器的設(shè)計(jì),介紹了NOR Flash的讀,、寫,、擦各種時(shí)序的設(shè)計(jì)流程。
本控制器的特點(diǎn)如下:
(1)利用AMBA AHB hready信號為低時(shí)數(shù)據(jù)相位擴(kuò)展的原理,,支持Flash在線編程,,執(zhí)行過程中支持Flash讀操作。
(2)在IAP程序跳轉(zhuǎn)USER APP程序時(shí)不需要中斷向量表重定向,,直接硬件地址映射實(shí)現(xiàn),。
(3)通過設(shè)定1 μs工作頻率配置寄存器,硬件自動(dòng)計(jì)算滿足不同頻率下的正常擦寫時(shí)序參數(shù),,減少了軟件逐個(gè)配置多個(gè)時(shí)序參數(shù)的復(fù)雜度,。
含有該Flash控制器的MCU主控芯片已經(jīng)通過仿真和FPGA驗(yàn)證,且在UMC55 nm工藝上流片成功,,芯片樣品經(jīng)過測試,,F(xiàn)lash控制器功能良好,方便使用,。
參考文獻(xiàn)
[1] 謝同同,,李天陽.一種嵌入式NOR Flash 控制器IP的設(shè)計(jì)[J].電子與封裝,2016(7):18-21,,43.
[2] 田鵬,,聶澤東,張正平,,等.一種兼容AHB總線的Nor Flash控制器IP設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(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].計(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)公司重點(diǎn)實(shí)驗(yàn)室 電力芯片設(shè)計(jì)分析實(shí)驗(yàn)室,,北京100192,;
2.北京智芯微電子科技有限公司 北京市電力高可靠性集成電路設(shè)計(jì)工程技術(shù)研究中心,北京100192)