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