張侃侃
(中國電建集團中南勘測設(shè)計研究院有限公司,湖南長沙,410014)
基于IAR EW430開發(fā)環(huán)境的FRAM應(yīng)用研究
張侃侃
(中國電建集團中南勘測設(shè)計研究院有限公司,湖南長沙,410014)
本文基于TI的MSP-EXP430FR5739 LaunchPad 硬件評估套件和 IAR EW430 IDE開發(fā)環(huán)境,研究了MSP430FR5739型MCU的FRAM分區(qū)配置方法,分別采用程序代碼關(guān)鍵字聲明法及面對復(fù)雜應(yīng)用滿足更高定制要求時修改XLINK配置文件法共兩種方法實現(xiàn)了分區(qū)調(diào)配,編寫了相應(yīng)測試程序進行實驗,驗證結(jié)果達到了預(yù)期。同時對實際應(yīng)用中FRAM分區(qū)后應(yīng)進行MPU保護做出闡述,本文提出的方法可用于MSP430FR系列其他型號MCU器件的FRAM調(diào)配。
FRAM MCU;地址空間;內(nèi)存調(diào)配
MSP430是TI(美國德州儀器)推出的超低功耗MCU(微控制器:Microcontroller Unit),其中MSP430FR系列是TI把最新的半導體FRAM技術(shù)應(yīng)用在MCU上。其中,鐵電隨機存儲器FRAM(Ferroelectric Random Access Memory)是最新的非易失性存儲器技術(shù),它具有寫入次數(shù)幾乎無限(高達100萬億次),掉電不易失、存取時間對稱、讀寫速度快,耐受度高,功耗低等一系列優(yōu)勢[1],特別是在MCU應(yīng)用中允許開發(fā)人員通過軟件動態(tài)調(diào)配數(shù)據(jù)和程序存儲分區(qū)大小,真正實現(xiàn)了二者的統(tǒng)一,具有很強的技術(shù)優(yōu)勢,因而在自動控制、儀器儀表嵌入式設(shè)計領(lǐng)域中受到越來越多的關(guān)注。
本文基于IAR EW430的環(huán)境,對MSP430FR5739型MCU的FRAM分區(qū)配置方法進行研究,提出了兩種不同的方法來實現(xiàn)分區(qū),并通過測試程序驗證了其可行性。對于其他型號MCU器件的FRAM調(diào)配,可參考本文中的方法。
嵌入式微控制器MCU的性價比一直是技術(shù)人員在選型時需要著重考慮的問題,其速度快功耗低與經(jīng)濟性之間的矛盾向來不容易解決。FRAM型一體化MCU的出現(xiàn)很好地解決了這一難題,它解決了傳統(tǒng)SRAM+Flash架構(gòu)的MCU的最主要兩方面的性價比問題。
第一,在進行一些數(shù)學運算的應(yīng)用中,需較大的RAM空間來存放數(shù)據(jù)樣本,未必要用到大容量的用于存儲程序的Flash,如數(shù)據(jù)采集中的標準差運算。但在MCU器件選型手冊中,一般大容量的片內(nèi)RAM都配備了更大容量的片內(nèi)Flash,相對應(yīng)型號器件的價位也較高,因此在此方面的應(yīng)用性價比很低。而一體化FRAM型MCU可以根據(jù)應(yīng)用程序的需要動態(tài)劃分數(shù)據(jù)和代碼存儲區(qū)空間,可做到“按需調(diào)配”,如圖1所示。
圖1 支持“按需使用滑動條分割”數(shù)據(jù)和代碼存儲空間
第二,幾近無限的寫入次數(shù),并且數(shù)據(jù)不易失。在一些成本控制嚴格的應(yīng)用中,可以省去后備電池或者EEPROM。
綜上所述,嵌入式SOC結(jié)合FRAM形成的一體化MCU具有很強的技術(shù)優(yōu)勢。本文主要在IAR EW430 開發(fā)環(huán)境下,基于TI的MSP-EXP430FR5739 LaunchPad 硬件評估套件,對型號為MSP-430FR5739的MCU的FRAM進行分區(qū)配置,同時編寫了測試程序進行實驗驗證,對于其他型號MCU器件的FRAM調(diào)配,可參考本文進行。
根據(jù)MSP430FR5739的器件手冊描述[3],圖2為芯片的內(nèi)存組織結(jié)構(gòu)圖。
從圖2中可以看出,MSP430FR5739器件片上有1K的SRAM(地址為:0x1C00~0x1FFF),15.5K的FRAM(地址為:0xC200~0xFFFF),其中 Main Memory 的地址為 :0xC200~0xFF7F。本文對數(shù)據(jù)和程序存儲空間的調(diào)配劃分,指的就是對Main Memory進行配置。在下面的內(nèi)容中將詳細介紹配置方法。
圖2 MSP430FR5739內(nèi)存組織結(jié)構(gòu)圖
本節(jié)對FRAM進行重新配置是基于IAR EW430開發(fā)環(huán)境進行的,IAR EW430默認的鏈接器配置文件是*.xcl(XLINK Configuration File),即IAR的XLINK配置文件,其后綴名為.xcl。該文件位于軟件安裝目錄下“
在IAR默認的lnk430fr5739.xcl中,可以看到如下的命令行:
// RAM memory
-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,TLS16_I=1C00-1FFF
-Z(DATA)CODE_I
-Z(DATA)DATA20_I,DATA20_Z,DATA20_N
-Z(DATA)CSTACK+_STACK_SIZE#
// FRAM memory
// Read/write data in FRAM
-Z(CONST)DATA16_P,DATA20_P=C200-FF7F
-Z(DATA)DATA16_HEAP+_DATA16_HEAP_SIZE,DATA20_HEAP+_DATA20_HEAP_SIZE
在上面的代碼中,通過對不同字段進行預(yù)配置,可以告知鏈接器對不同類型的變量(字段)按照預(yù)配置地址參數(shù)進行空間分配。對FRAM的劃分從根本上都和XLINK配置文件有關(guān),下文中介紹兩種方法來實現(xiàn)對FRAM的分區(qū)調(diào)配。
第一種方法是在不改變默認配置文件的前提下,在程序代碼中定義前綴為“__persistent”的變量數(shù)組來將其定義在FRAM中。在上述命令行中可以看到,默認配置文件lnk430fr5739.xcl中已經(jīng)指定了“Z(CONST)DATA16_P,DATA20_P”分配在FRAM區(qū)域的0xC200~0xFF7F地址空間,因此,我們只要在程序代碼中定義變量或數(shù)據(jù)塊時,采用關(guān)鍵字“__persistent”進行聲明,編譯鏈接器會自動將其分配到FRAM區(qū)域0xC200~0xFF7F地址空間中。
為了測試該功能,我們在MSP-EXP430FR5739 LaunchPad的測試程序上添加“zkTestFram.c”模塊,使用關(guān)鍵字“__persistent”定義了一個“FRAM_LEN = 2048”長度測試數(shù)組,聲明代碼如下:
__persistent volatile unsigned char testFram[FRAM_LEN];
采用framInit()對數(shù)據(jù)塊進行初始化,代碼如下:
void framInit( void )
{
for(int i = 0; i < sizeof(testFram); ++i)
{ testFram[i] = (unsigned char)i; }
return;
}
程序下載后,進入調(diào)試界面,可以看到testFram [FRAM_LEN]數(shù)組被編譯器分配的首地址為0xC200,尾地址為0xC9FF,共2048個數(shù)據(jù)存儲單元。如圖3所示,圖3(a)是變量監(jiān)視窗口testFram的首地址0xC200,;圖3(b)是MCU相對應(yīng)FRAM區(qū)的內(nèi)存內(nèi)容;圖3(c)和圖3(d) 所示是testFram的尾地址0xC9FF及相對應(yīng)FRAM區(qū)的內(nèi)存內(nèi)容。并且,測試程序中的其他變量或數(shù)據(jù)被編譯器分配在SARM地址“0x1C00~0x1FFF”空間,如圖4所示。
圖3 testFram數(shù)組在FRAM區(qū)的首尾、內(nèi)存地址
圖4 程序中其他變量或數(shù)據(jù)被分配在SRAM地址
第二種方法,根據(jù)用戶應(yīng)用程序大小,自定義XLINK配置文件, 通過直接在lnk430fr5739.xcl配置文件中重新劃分變量和其地址空間來實現(xiàn)。這樣有利于后續(xù)的內(nèi)存分區(qū)保護。在進行重新分配時,一般按照如下原則進行。
(1)臨時變量、堆棧區(qū)定義到SRAM;
(2)快速存取且需掉電保存的變量定義到FRAM。
根據(jù)上述原則,我們修改默認的lnk430fr5739.xcl配置文件,修改后的文件內(nèi)容如圖5(b)所示。圖5(a)為修改前的原始文件內(nèi)容。
圖5 XLINK配置文件修改前后對比圖
通過修改配置文件,我們對不同字段進行了地址空間預(yù)分配,其中堆棧區(qū)位于SRAM地址空間(1C00-1FFF),采用關(guān)鍵字__no_init聲明的變量位于FRAM區(qū)1KB長度的D200-D5FF地址空間,其他的變量及數(shù)據(jù)塊位于FRAM區(qū)4KB長度的C200-D1FF地址空間,程序代碼空間位于FRAM區(qū)約10K長度D600-FF7F的地址空間。測試程序,如下:
#define FRAM_LEN 2048
extern volatile unsigned char testFram[FRAM_LEN];
extern void fRAMInit( void );
extern __no_init volatile unsigned char testFram2[128];
extern void fRAMInit2( void );
程序下載后進入調(diào)試模式,如圖6(a)和圖6(b)可以看出testFram [FRAM_LEN]數(shù)組被編譯器分配的首地址為0xC222,尾地址為0xCA21,共2048個FARM數(shù)據(jù)存儲單元;如圖6(c)和圖6(d)可以看出testFram2 [128]數(shù)組被編譯器分配的首地址為0xD200,尾地址為0xD27F,共128個FARM數(shù)據(jù)存儲單元。
圖6 testFram[2048]及testFram2 [128]數(shù)組在FRAM區(qū)的首尾、內(nèi)存地址
綜上所述,利用IAR EW430的變量查看窗口及MCU的FRAM區(qū)的內(nèi)存,可以直觀呈現(xiàn)我們所定義的數(shù)據(jù)塊地址及內(nèi)容,和我們的預(yù)期相符,驗證了這兩種內(nèi)存調(diào)配方法是切實可行的。
在上面的測試實驗中,由于數(shù)據(jù)和程序代碼都在統(tǒng)一地址空間,并且FRAM易擦寫,為了確保應(yīng)用系統(tǒng)的最大魯棒性和數(shù)據(jù)完整性,應(yīng)為這些分區(qū)啟用MPU功能,有助于在程序故障(軟件崩潰),緩沖區(qū)溢出,指針損壞和其他類型的異常情況下,防止對存放FRAM區(qū)的數(shù)據(jù)和程序代碼意外的訪問修改[4]。
TI提供了MPU保護機制,可以對MCU的FRAM分三段保護。在上文第二種方法中,F(xiàn)RAM區(qū)被分為三段,我們可以在IAR EW430的器件啟動加載過程“__low_level_init.c”文件中添加MPU相關(guān)的代碼進行保護。如圖7所示為FRAM區(qū)的分段地址。
圖7 FRAM區(qū)分段地址
對應(yīng)的MPU保護單元配置代碼如下:
MPUCTL0 = MPUPW;
// Write PWD to access MPU registers
MPUSEG=0x0B09;
// 把Main memory 分成三段B1=0xD200, B2=0xD600
MPUSAM=(MPUSEG1WE | MPUSEG1RE | MPUSEG2WE |MPUSEG-2RE | MPUSEG3RE | MPUSEG3XE | MPUSEG1VS);
MPUCTL0=MPUPW | MPUENA; // Enable MPU protection
基于上述MPU配置代碼,如產(chǎn)生非法訪問,可以在對應(yīng)的中斷程序中進行相應(yīng)的應(yīng)急處理。
除此之外,如果對MPU定制要求不高,也可以通過在IAR工程Project Options—> General Options—> MPU/IPE選項卡中選擇“Enable MPU”啟用MPU保護功能,如圖8所示。
本文以MSP430FR5739器件為例,在IAR EW430 IDE環(huán)境下,通過使用兩種方法對FRAM進行分區(qū)配置,為了滿足實際應(yīng)用的需求,在程序中加入了MPU分段權(quán)限保護單元,以防程序受干擾“跑飛”而導致的誤操作。同時,本文編寫測試程序進行了實驗驗證,證明配置方法可行,可滿足大部分的應(yīng)用情況。
圖8 IAR EW430中啟用MPU內(nèi)存保護
[1]鄧穎.MSP430FRAM鐵電單片機原理及C程序設(shè)計[M].北京:北京航空航天大學出版社,2012.
[2]MSP430 FRAM Technology-How To and Best Practices(SLAA628).
[3]MSP430FR573x Mixed-Signal Microcontrollers Datasheet(Rev. K) (SLAS639K).
[4]MSP430FR57xx Family User’s Guide(SLAU272C).
[5]胡大可.MSP430 系列FLASH型超低功耗[5]16位單片機[M].北京:北京航空航天大學出版社,2001.
Research on Application of FRAM Based on IAR EW430 Development Environment
Zhang Kankan
(Power China ZhongNan Engineering Corporation Limited, ChangSha Hunan, 410014)
Based on TI’s MSP-EXP430FR5739 LaunchPad hardware evaluation kit and IAR EW430 IDE development environment, this paper studies the FRAM partition allocation method of MSP430FR5739 MCU, where two methods are introduced to achieve the partition deployment. This first one is keyword declaration method in program code. Another one is the modification method of XLINK configuration file to meet the higher customized requirements in complex application. Experiments are implemented to verify the two methods. At the same time, it is necessary to make MPU protection after FRAM partitioning in practical application. The proposed method can also be used for FRAM deployment in other types MCU devices of MSP430FR series.
FRAM;MCU; address space;memory provisioning