概述
本文檔僅介紹如何通過使用Eclipse、ARM-GCC編譯工具、GNU-ARM插件、J-Link或AT-Link等資源來配置及調(diào)試AT32F403A的sLib,并提供sLib方案商開發(fā)算法范例及終端用戶應(yīng)用范例。關(guān)于AT32F403A的sLib詳細介紹及說明,請詳閱:《AN0040_AT32F403A_407_Security_Library_Application_Note》。環(huán)境說明:本文檔安裝說明基于WINDOWS 7 x64系統(tǒng)下實現(xiàn),開發(fā)板使用AT-START-F403A。關(guān)于Eclips調(diào)試環(huán)境的安裝及Eclipse工程的建立,請參閱《AN0033_Eclipse_with_GCC》。本文檔所使用的軟件都打包到Setup_SLIB_with_Eclipse_and_GCC_V2.0.0.zip,直接解壓重新編譯后即可運行。解壓后Eclipse的workspace位于目錄:Setup_SLIB_with_Eclipse_and_GCC_V2.0.0\utilities\slib_with_eclipse_and_gcc_demo。其中包含文件:圖1. Eclipse工作目錄.metadata:此workspace的環(huán)境設(shè)定project_l0:方案商開發(fā)算法范例project_l1:終端用戶應(yīng)用范例
Project_L0方案商范例
_在此階段的范例程序,將完成下列幾個項目:
將低通濾波器函數(shù)編譯成可執(zhí)行(executr-only)的代碼;
將低通濾波器函數(shù)的代碼編排放置到主閃存區(qū)地址0x08004000~0x08004FFF(sector8~9);
將低通濾波器函數(shù)的系數(shù)編排放置到主閃存區(qū)地址0x08005000~0x08005FFF(sector10~11);
驗證成功后,將sector8~9設(shè)置為指令安全庫區(qū),將sector10~11設(shè)置為數(shù)據(jù)安全庫區(qū),此部分可在范例的主程序中以調(diào)用slib_enable()函數(shù)來完成,或使用Artery ICP Programmer來完成(建議使用ICP工具完成設(shè)置);
產(chǎn)出終端用戶程序調(diào)用低通濾波函數(shù)時,需用到的頭文件及符號定義文件。
產(chǎn)生只執(zhí)行(Exacute-only)代碼
設(shè)置方式如下:
1) 選擇C文件群組或個別的C文件,范例中是把要保護的相關(guān)C文件都放在FIR_Filter群組,點擊FIR_Filter群組內(nèi)需要設(shè)置只執(zhí)行的文件,按鼠標(biāo)右鍵選擇“Properties”
圖2. 設(shè)置要保護的C文件
2) 點選C/C++Build->Settings->GNU ARM Cross C Complier->Miscellaneous,在”O(jiān)ther compiler flags”填入-mpure-code以及-mslow-flash-data這兩個關(guān)鍵字,然后按Apply使設(shè)定生效
圖3. 設(shè)置Miscellaneous
編排安全庫區(qū)的地址
Project_L0范例的主閃存映像及RAM的使用分區(qū)如下圖,RAM的分區(qū)主要是為了避免sLib保護區(qū)的代碼與終端用戶的代碼用到相同的RAM而產(chǎn)生的沖突問題。圖4. 主閃存映像及RAM的使用分區(qū)
其中濾波器函數(shù)的代碼編排放置到主閃存區(qū)的地址0x08004000~0x08004FFF(sector8~9),并將濾波器函數(shù)的系數(shù)編排放置到主閃存區(qū)的地址0x08005000~0x08005FFF(sector10~11)。RAM的部分則是將0x20000000到0x200000FF共256個字節(jié)保留給sLib保護區(qū)的代碼使用。
步驟如下:
1) 依據(jù)”AT32F403AxC_FLASH.ld”linker descriptor文件做修改,編寫一個ld文件,如project_l0\eclipse_gcc\ld目錄下的slib.ld。2) 在slib.ld當(dāng)中,將主閃存及RAM分區(qū)劃分如下:3)?將算法代碼放到.slib_inst section,低通濾波器的系數(shù)放到.slib_data section,并將算法使用到的全局變量指定到.slib_ram section,如下圖:圖5. 配置code、data、ram section4)?在Project->Properties->C/C++Build->Setting->GNU ARM Cross C Linker->General設(shè)定中的Script files,加入slib.ld。圖6. 設(shè)置Script files5)?本范例會使用到gcc的數(shù)學(xué)運算函數(shù)庫libm.a,在Properties->GNU ARM Cross C Linker->Miscellaneous設(shè)定中的Other linker flags填入--specs=rdimon.specs,linker才不會出現(xiàn)錯誤訊息。圖7. 設(shè)置Other linker flags關(guān)于ld文件的語法,可參考GNU linker的相關(guān)名文件。
產(chǎn)生頭文件及符號定義文件
頭文件(header file)跟符號定義文件(symbol definition file)是終端客戶應(yīng)用范例Project_L1在調(diào)用FIR低通濾波函數(shù)時需要用到。在范例中,就是main.c中包含的fir_filter.h文件。符號定義文件則是定義低通濾波函數(shù)的實際地址。
產(chǎn)生符號定義文件的方法:
1)進入Project->Properties->C/C++Build->Setting的Build Steps設(shè)定畫面。圖8. 設(shè)置Build Steps
在Post-build steps的命令行中輸入以下命令:
arm-none-eabi-objcopy.exe--keep-symbols="..\keep_sym.txt"-S--remove-section=.ARM.attributes--extract-symbol"${BuildArtifactFileBaseName}.elf""..\fir_filter_symbol.sym"2) 此處fir_filter_symbol.sym是要產(chǎn)出的符號定義文件,keep_sym.txt放在project_l0\eclipse_gcc目錄下,是用來選擇要產(chǎn)生哪些函數(shù)的符號,內(nèi)容如下:3)?重新編譯整個項目后,在project_l0\eclipse_gcc目錄下,就會產(chǎn)生一個名為fir_filter_symbol.sym的符號定義文件。
啟用安全庫區(qū)保護
要啟用安全庫區(qū)的保護功能,有以下兩種方式:1) 使用ICP刻錄工具Artery ICP Programmer(建議用此方式)。使用ICP Programmer啟用sLib的方法,請參閱《AT32F403A Security Library Application Note》。2) 使用范例程序main.c之中的slib_enable()函數(shù)。在低通濾波函數(shù)測試正確后執(zhí)行過一次此函數(shù),就可以啟用安全庫區(qū)的保護功能。要執(zhí)行此函數(shù),只要在main.c中使能#define USE_SLIB_FUNCTION即可。
Project_L1終端用戶范例
_
Project_L1范例會使用到在Project_L0中調(diào)試好,并已經(jīng)被刻錄到AT32F403A芯片的主閃存中且被sLib保護的FIR低通濾波器函數(shù)。根據(jù)Project_L0提供的頭文件、符號定義文件以及主閃存區(qū)塊映像,終端用戶就可以參照Project_L1做到
建立一個應(yīng)用項目;
引用Project_L0提供的頭文件及符號定義文件到項目里;
調(diào)用FIR低通濾波器函數(shù);
開發(fā)并調(diào)試用戶自己的應(yīng)用程序。
注:Project_L1必須使用跟Project_L0開發(fā)時一樣的工具鏈及相同版本的編譯程序,不然有可能會因為版本差異的兼容性問題,而無法使用Project_L0提供的代碼。
建立用戶的應(yīng)用項目
因為Project_L0啟用的安全庫區(qū)已經(jīng)占用了一些特定的主閃存頁面,Project_L1的代碼必須參照Project_L0提供的主閃存區(qū)塊映像來編排放置的地址。其中sector8~11為安全庫區(qū)所占用,終端用戶需使用ld文件將這個區(qū)域隔離起來,避免代碼在編譯時被編排到這個區(qū)域內(nèi),方式如下:
參照project_l1\eclipse_gcc\ld目錄下的end_user_code.ld文件,將主閃存空間切成兩個區(qū)塊FLASH_1及FLASH_2,中間空出來的區(qū)域就是sLib保護區(qū)。此外,RAM的區(qū)域也要保留0x20000000到0x200000FF的區(qū)域。如下圖:
圖9. end-user-code.ld配置
其中SLIB_CODE及SLIB_DATA兩個區(qū)域,方案商已事先刻錄代碼,所以設(shè)定為NOLOAD,在下載Project_L1代碼到主閃存時,就不會再次被下載。
在項目中加入符號定義文件
Project_L0所產(chǎn)生的符號定義文件fir_filter_symbol.sym必須被添加到Project_L1項目中,才能被正確的編譯并鏈結(jié)到sLib保護區(qū)的代碼。方法如下:
1) 將fir_filter_symbol.sym這個文件加到FIR_Filter群組;
2) 打開Project->Properties->C/C++Build->Settings->Tool Setting->GNU ARM Cross C Linker->Miscellaneous設(shè)定畫面,在Other objects選單中加入此文件,在編譯項目時就會可以被引用到。圖10. 設(shè)置Other objects
關(guān)于雅特力雅特力科技于2016年成立,是一家致力于推動全球市場32位微控制器(MCU)創(chuàng)新趨勢的芯片設(shè)計公司,專注于ARM Cortex-M4/M0+的32位微控制器研發(fā)與創(chuàng)新,全系列采用55nm先進工藝及ARM Cortex-M4高效能或M0+低功耗內(nèi)核,締造M4業(yè)界最高主頻288MHz運算效能,并支持工業(yè)級別芯片工作溫度范圍(-40°~105°)。雅特力目前已累積相當(dāng)多元的終端產(chǎn)品成功案例:如微型打印機、掃地機、光流無人機、熱成像儀、激光雷達、工業(yè)縫紉機、伺服驅(qū)控、電競周邊市場、斷路器、ADAS、T-BOX、數(shù)字電源、電動工具等終端設(shè)備應(yīng)用,廣泛地覆蓋5G、物聯(lián)網(wǎng)、消費、商務(wù)及工控等領(lǐng)域。
-
mcu
+關(guān)注
關(guān)注
146文章
17229瀏覽量
351967
發(fā)布評論請先 登錄
相關(guān)推薦
評論