色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

雅特力AT32F402/F405安全庫

雅特力 AT32 MCU ? 2025-01-20 18:37 ? 次閱讀

目前越來越多的微控器(MCU)應用需要使用到復雜的算法及中間件解決方案(middleware solution),因此,如何保護軟件方案商開發出來的核心算法等知識產權代碼(IP-Code),便成為微控制器應用中一項很重要的課題。因為這一重要的需求,AT32F402/405系列提供了安全庫區(SLIB)的功能,以防止重要的IP-Code被終端用戶的程序做修改或讀取,進而達到保護的目的。本文檔將詳細闡述AT32F402/405系列安全庫區的應用原理和軟件使用方法。

應用原理

安全庫區的應用原理

  • 設定以密碼保護主閃存中指定范圍的程序區(即安全庫區),軟件方案商可將核心算法存放到此區域,以達到保護的功能,其余空白程序區可以提供給終端商客戶進行二次開發。
  • 安全庫區劃分為唯讀區(SLIB_READ_ONLY)及指令區(SLIB_INSTRUCTION),并可選擇部分或是整個安全庫區存放唯讀區或者指令區。
  • 唯讀安全庫區(SLIB_READ_ONLY)的數據能透過I-Code和D-Code總線讀取,不能寫入。
  • 指令安全庫區(SLIB_INSTRUCTION)內的程序代碼僅能被MCU透過I-Code總線抓取指令(僅能被執行),不能透過D-Code總線以讀取數據的方式讀取(包含ISP/ICP/調試模式以及從內部RAM啟動的程序),以讀取數據的方式去訪問SLIB_INSTRUCTION時,讀到的數值全都是0xFF。
  • 安全庫區的程序代碼及數據,除非輸入正確的密碼,否則無法被擦除。在密碼不正確時,對安全庫區執行寫入或擦除,將會在FLASH_STS寄存器的EPPERR位置"1"提出警告。
  • 終端用戶執行主閃存的整片擦除時,安全庫區的程序代碼及數據不會被擦除。
  • 當安全庫區的保護功能被啟動后,可以透過在SLIB_PWD_CLR寄存器寫入先前設置的密碼來解除保護功能。解除安全庫區的保護時,芯片將會執行主閃存的整片擦除(包含安全庫區的內容)。因此即使軟件方案商設置的密碼被泄漏,也不會有程序代碼外泄的疑慮。

下圖是包含安全庫區的主閃存區映射示意圖,安全庫區的程序代碼可以很容易地被終端用戶調用并執行, 但不能直接被讀取,因而達到保護的功能。

圖1. 帶有安全庫區的主閃存區映射

7fb480d6-d71a-11ef-9434-92fbcf53809c.png

安全庫區的范圍大小是以扇區(sector)為單位做設定,每一扇區的大小以實際MCU型號為準。表1是AT32F402/405系列各型號的主閃存大小、每扇區大小及可設置范圍。另外啟動程序代碼區在開啟了主存擴展功能后,整個20KB區域也是可以作為安全庫區。

表1. AT32F402/405各型號閃存大小總表

7fbfd1a2-d71a-11ef-9434-92fbcf53809c.png

如何啟動安全庫區保護

默認狀態下,安全庫區設定寄存器始終是不可讀且被寫保護。要想對安全庫區設定寄存器進行寫操作,首先要對安全庫區設定寄存器解鎖,對SLIB_UNLOCK寄存器寫入解鎖0xA35F6D24值,通過查看SLIB_MISC_STS寄存器的SLIB_ULKF位確認解鎖成功,隨后便允許對安全庫區設定寄存器寫入設定值。

啟動主閃存安全庫區的步驟如下:

  • 檢查FLASH_STS寄存器的OBF位,以確認沒有其他正在進行的閃存操作;
  • 對SLIB_UNLOCK寄存器寫入0xA35F6D24,以進行安全庫區解鎖;
  • 檢查SLIB_MISC_STS寄存器的SLIB_ULKF位,以確認解鎖成功;
  • 在SLIB_SET_RANGE寄存器設定要保護的區域,包含SLIB的起始和結束地址以及SLIB指令區的起始地址;
  • 等待OBF位變為‘0’;
  • 在SLIB_SET_PWD寄存器設定安全區域密碼;
  • 等待OBF位變為‘0’;
  • 燒錄將存入安全庫區的代碼;
  • 進行系統復位,重裝載安全庫區設定字;
  • 讀出SLIB_STS0/STS1寄存器用于判斷安全庫區設定結果。

注意事項:

  • 可在主閃存和主閃存擴展區中設置安全庫區,實際可設置范圍參見表1;
  • 安全庫區代碼必須以扇區為單位進行燒錄,且起始地址必須與主閃存地址或者擴展區地址對齊;
  • 中斷向量表是數據型態且通常會被放置在閃存的第一扇區(扇區0)內,請勿將閃存的第一扇區設定為安全庫區的指令區;

關于安全庫區設定寄存器的詳細說明,請參閱AT32F402/405系列技術手冊。

啟動安全庫區的程序可參考安全庫區應用范例project_l0中位于main.c中的slib_enable()函數。亦可使用雅特力的ICP或ISP刻錄工具做設定,后面章節將會有詳細的說明。


如何解除安全庫區保護

當安全庫區的保護功能被啟動后,可以透過在SLIB_PWD_CLR寄存器寫入先前設置的密碼來解除保護功能。解除安全庫區的保護時,芯片將會執行主閃存的整片擦除(包含安全庫區的內容)。解除主閃存安全庫區的步驟如下:

  • 檢查FLASH_STS寄存器的OBF位,以確認沒有其他正在進行的編程操作;
  • 在SLIB_PWD_CLR寄存器寫入先前設置的安全區域密碼;
  • 進行系統復位,重裝載安全庫區設定字;
  • 讀出SLIB_STS0寄存器用于判斷安全庫區設定結果。

編排及執行安全庫區的程序

如前面章節所提到,在指令安全庫區(SLIB_INSTRUCTION)內的的程序代碼可以被MCU經由I-Code總線抓取,但不能經由D-Code總線以讀取數據的方式去讀出,這樣的保護是全面性的,也就是說在指令安全庫區之內的程序代碼,也不能讀取同樣被放置在指令安全庫區之內的數據,例如C程序代碼常被編譯成的文字池(literal pool)、分支表(branch table)或常數(constant)等之類當指令被執行時會經由D-Code總線去讀取的數據。這代表指令安全庫區之內只能放置指令,不能放置任何數據。因此用戶在編排要放置在指令安全庫區之內的程序代碼時,必須配置編譯程序(compiler)的設定去產生只執行(execute-only)的代碼以避免上述那些型態的數據產生。圖2及圖3是一般常見的文字池跟分支表的例子:switch()是C程序中常用的跳轉指令,此例子中的sclk_source變量是去讀取CRM_CFG寄存器,圖2可看到編譯出來的匯編代碼(assembly code)“LDR R7, [PC, #288]”,會用程序計數器(program counter, PC)間接尋址的方式去取得CRM_CFG寄存器的地址,而CRM_CFG的地址會被以常數的方式存放在鄰近的指令區(也在指令安全庫區之內),因此執行switch()指令時就會發生數據的讀取。如果指令安全庫區內有這類的程序代碼,在執行的時候就會產生錯誤。第三章的范例程序將會說明如何設定編譯程序的配置來避免這樣的問題。

圖2. 文字池例子(1)

7fd15b16-d71a-11ef-9434-92fbcf53809c.png

圖3. 文字池例子(2)

7ff5c7c6-d71a-11ef-9434-92fbcf53809c.png

一、不可將中斷向量表設置為安全庫區的指令區

中斷向量表包含每個中斷處理程序的入口點地址,由MCU通過D-Code總線讀取。通常,中斷向量表位于主閃存第一扇區(sector 0)的起始地址0x08000000,因此在設置指令安全庫區時,必須遵守以下的規則:

  • 不可將主閃存的第一扇區設置為安全庫區的指令區。

二、安全庫區代碼與用戶區代碼的關聯性

受安全庫區保護的程序代碼(IP-Code)可以從位于用戶代碼區(安全庫區之外的區域)的函數庫中調用函數。在這種情形下,IP-Code將會包含這些函數的地址,允許PC(程序計數器)在執行IP-Code時跳轉到這些函數。一旦安全庫區被啟動,這些函數的地址就不能被改變,此時,這些位于用戶代碼區的函數的地址就必須固定下來,否則PC將跳轉到錯誤的地址而無法正常工作。因此在設置安全庫區的時候,應該將所有與IP-Code相關聯的函數都一起編排到安全庫區之內以避免此情況發生。下圖顯示出一個被保護的函數Function_A()調用到用戶區內的函數Function_B()的例子。圖4. 安全庫區的函數調用用戶區函數的例子

800c4082-d71a-11ef-9434-92fbcf53809c.png

此外,另一個最常見的情形就是使用到C語言的標準函式庫,例如memset()及memcpy()這類函數。如果IP-Code跟用戶區代碼都有調用到這類函數,就會有上述問題的困擾。列舉兩種常用的解決方法:1) 將其編譯到安全庫區范圍內,具體如何實現可以查看keil或IAR的相關文檔。2) 避免在IP-Code內使用C的標準函式庫,若非要使用,就必須將用到的函數改寫為其他名稱,以下是一個范例,在IP-Code 中寫一個my_memset()函數取代原先的memset()。圖5. 自定義函數范例

801bc93a-d71a-11ef-9434-92fbcf53809c.png

安全庫區范例程序

本章節將以為例介紹安全庫區的使用范例,并詳述完成此范例程序所需的每一個步驟。

范例需求

一、硬件需求

  • 帶有AT32F402RCT7芯片的AT-START-F402實驗板

二、軟件需求

  • Keil μvision IDE(本范例使用μvision V5.36.0.0)或IAREmbedded workbench IDE(本范例使用IAR V8.22.2)
  • 雅特力ICP或ISP刻錄工具,主要是用來啟動或解除安全庫區的設置

范例概述

本應用指南提供了兩個范例項目,展示了軟件開發商開發智權代碼(IP-Code)給終端用戶應用的場景。其中

  • Project_L0為方案商開發算法并編排到安全庫區的示例
  • Project_L1為終端用戶應用此算法的示例

Project_L0完成的算法將預先下載刻錄到AT32F402芯片并設置安全庫區保護,同時提供下列各項設定訊息給終端客戶應用程序使用:

  • 主閃存區塊的映像,說明安全庫區所占用的區域以及用戶可開發程序的區域
  • 包含算法函數定義的頭文件,讓終端用戶可以用來調用相關的函數
  • 符號定義文件(symbol definition file),此符號文件內含IP-Code的各個函數的實際地址,讓終端用戶程序可以正確的調用,下圖為此范例的示意圖。

圖6. 范例流程示意圖

803d40c4-d71a-11ef-9434-92fbcf53809c.png

軟件方案商可以參考Project_L0范例開發算法代碼,并參考Project_L1提供終端用戶使用,下圖為應用示意圖。圖7. 應用示意圖

804bc5ae-d71a-11ef-9434-92fbcf53809c.png

安全庫區保護的代碼:FIR低通濾波器

本范例使用CMSIS-DSP庫提供的FIR低通濾波器(FIR lowpass filter)算法作為被安全庫保護的IPCode,關于FIR低通濾波器算法可詳閱CMSIS-DSP的相關文件,這里僅著重在說明如何設置安全庫以保護此算法及如何被終端用戶的程序代碼調用。范例中的低通濾波器的輸入信號是一個混和了頻率各為1KHz及15KHz的兩個正弦波的訊號,而低通濾波器的截止頻率約為6KHz。經過低通濾波后,將15KHz的訊號濾除而僅剩下1KHz的正弦波輸出。下圖為FIR低通濾波功能的示意圖。圖8. FIR低通濾波器

805912cc-d71a-11ef-9434-92fbcf53809c.png

使用到的CMSIS DSP庫的函數及文件包括:

  • arm_fir_init_f32()

此函數的功能是做濾波器函數的初始化設定,包含在arm_fir_init_f32.c文件里

  • arm_fir_f32()

此函數為濾波器算法的主要部分,包含在arm_fir_f32.c文件里

  • FIR_lowpass_filter()

此函數為使用上述兩個基本函數寫成的FIR低通濾波器全局函數,供終端用戶調用,包含在fir_filter.c文件里

  • fir_coefficient.c

此C文件內含FIR濾波器函數所使用的系數(只讀的常數),在范例中會將這些系數放置到唯讀安全庫區

在此范例中,MCU內嵌的FPU及DSP指令會被用來做信號處理以及浮點運算,以達到準確的運算及正確的輸出信號。

Project_L0: 方案商范例

在此階段的范例程序,將完成下列幾個項目:

  • 將算法的相關函數編譯成只可執行(execute-only)的代碼
  • 將算法的程序代碼編排放置到主閃存區的指定扇區,以下用扇區A指示
  • 將濾波器函數的系數編排放置到主閃存區的指定扇區,以下用扇區B指示
  • 在主程序中執行FIR_lowpass_filter()以驗證其正確性
  • 驗證成功后,將扇區A設置為指令安全庫區,并將扇區B設置為唯讀安全庫區,此部分可在范例的主程序中以調用slib_enable()函數來完成,或使用Artery ICP Programmer來完成(建議使用ICP工具完成設置)
  • 產出終端用戶程序調用低通濾波函數時需用到的頭文件及符號定義文件

一、產生只執行(Execute-only)代碼

每一種工具鏈(toolchain)都有自己的設定選項,可以防止編譯程序生成文字池(literal pools)和分支表(branch table)這些在指令執行時會發生讀取數據的指令格式,例如”LDR Rn, [PC, #offset]”這類指令。關于文字池及分支表的例子可參照章節2.4的說明。以Keil μvision為例,Keil μvision有Execute-only Code的選項來做設定,設定的方式如下:Keil μvision:使用Execute-only Code選項設置的方式是:

  • 選擇C文件群組或個別的C文件,范例中是把要保護的相關C文件都放在fir_filter群組
  • 按鼠標右鍵然后選擇對應文件,例如本例程的Option for File ‘arm_fir_f32.c’,如下圖

圖9. Keil進入Option界面

8066d88a-d71a-11ef-9434-92fbcf53809c.png
  • 勾選C/C++窗口里的Execute-only Code選項,然后--execute_only命令就會被加到編譯過程控制字符串里,如下圖

圖10. Keil選擇Execute-only Code

807c0d36-d71a-11ef-9434-92fbcf53809c.png
  • 本例程中有三個文件位于SLIB_INSTRUCTION區,分別是arm_fir_f32.c、arm_fir_init_f32.c和fir_filter.c,這三個文件都需要配置產生為只執行代碼。

IAR:使用No data read in code memory選項設置的方式是:

  • 選擇fir_filter群組里對應的文件,按鼠標右鍵選擇Option

圖11. IAR進入Option界面

808d646e-d71a-11ef-9434-92fbcf53809c.png
  • 如下圖,在"C/C++"窗口內勾選Override inherited settings以及No data read in code memory

圖12. IAR設置C/C++窗口選項

809ad9dc-d71a-11ef-9434-92fbcf53809c.png
  • 本例程中有三個文件位于SLIB_INSTRUCTION區,分別是arm_fir_f32.c、arm_fir_init_f32.c和fir_filter.c,這三個文件都需要配置產生為只執行代碼。

AT32 IDE:添加Other compiler flags關鍵字設置的方式是:

  • 選擇工程中fir_filter群組里對應的文件,按鼠標右鍵選擇Properties

圖13. AT32 IDE進入Properties界面

80afe214-d71a-11ef-9434-92fbcf53809c.png
  • 點選C/C++Build->Settings->GNU ARM Cross C Complier->Miscellaneous,在”Other compiler flags”填入-mpure-code以及-mslow-flash-data這兩個關鍵字,然后按Apply設定生效

圖14. AT32 IDE設置Miscellaneous

80c71ef2-d71a-11ef-9434-92fbcf53809c.png

二、編排安全庫區的地址

前面章節提到的,主閃存的第一扇區(sector 0)會被用來存放中斷向量表。下圖為主閃存的映射及RAM的使用分區。RAM的分區主要是為了避免SLIB保護區的代碼與終端用戶的代碼用到相同的RAM而產生的沖突問題。圖15. 范例程序的主閃存映像及RAM分區

80d5c4fc-d71a-11ef-9434-92fbcf53809c.png

Keil μvision的scatter file步驟如下:

  • 到Project→Optios for Target→Linker窗口,取消Use memory layout from Target Dialog選項,然后按Edit按鍵來開啟slib-w-xo.sct文件做修改,如下圖

圖16. Keil設置Linker窗口選項

80e55782-d71a-11ef-9434-92fbcf53809c.png
  • 打開scatter file之后,將需要放到指令安全庫區(SLIB_INSTRUCTION)的代碼的目標文件(object file)放到名為LR_SLIB_INSTRUCTION的專用加載區,并將標示修改為execute-only(+XO),同時也要將SLIB_READ_ONLY占用的區域保留起來放到名為LR_SLIB_READ_ONLY的專用加載區,避免編譯程序將其他非IP-Code的函數編排到SLIB區內,RW_IRAM1是指定給安全庫區算法的函數使用,目的是為了避免終端用戶的項目也用到同樣的RAM區塊,而造成程序執行時發生錯誤,如下所示

圖17. Keil scatter修改

80feeb98-d71a-11ef-9434-92fbcf53809c.png
  • IP-Code用到的RAM以及數據安全庫區FIR低通濾波器函數使用到的常數編排地址,除了上述的修改scatter file方式之外,也可以代碼中使用Keil的__attribute__((at(address)))描述元將變量或常數放置到固定的地址

IAR的ICF file步驟如下:

  • 開啟\project_l0\IAR_V8.2\目錄下的icf文件,添加三個新的加載區,如下所示,其中SLIB_RAM區塊的RAM保留給算法的函數使用

圖18. icf文件中SLIB地址定義

810fee70-d71a-11ef-9434-92fbcf53809c.png
  • 在ICF文件中,也要將SLIB占用的區域保留起來,避免編譯程序將其他非IP-Code的函數編排到SLIB區內,同時將IP-Code使用的RAM區域保留起來

圖19. icf文件中地址分配

812a8dc0-d71a-11ef-9434-92fbcf53809c.png
  • IP-Code用到的RAM和ROM,修改icf文件,如下圖

圖20. icf文件中SLIB使用的RAM修改

813ce0b0-d71a-11ef-9434-92fbcf53809c.png
  • IP-Code用到的RAM以及數據安全庫區FIR低通濾波器函數使用到的常數編排地址,除了上述的修改ICF文件方式之外,也可以代碼中使用IAR的@描述元將變量或常數放置到固定的地址

AT32 IDE的ld file步驟如下:

  • 修改ld文件,劃出安全庫區所需的區域,如下圖

圖21. ld文件中使用的RAM和ROM范圍修改

81619fa4-d71a-11ef-9434-92fbcf53809c.png
  • 將算法代碼放到.slib_inst section,低通濾波器的系數放到.slib_read_only section,并將算法使用到的全局變量指定到.slib_ram section,如下圖

圖22. ld文件中編排放置位置

81726a5a-d71a-11ef-9434-92fbcf53809c.png
  • 在Project->Properties->C/C++Build->Setting->GNU ARM Cross C Linker->General設定中的Script files,加入改好后的ld文件。

圖23. 添加修改后的ld文件

8181f9ac-d71a-11ef-9434-92fbcf53809c.png
  • 本范例會使用到gcc的數學運算函數庫libm.a,在Properties->GNU ARM Cross C Linker->Miscellaneous設定中的Other linker flags填入--specs=rdimon.specs,linker才不會出現錯誤訊息,如下圖

圖24. 添加額外關鍵字避免編譯報錯

818cd49e-d71a-11ef-9434-92fbcf53809c.png

三、啟用安全庫區保護

要啟用安全庫區的保護功能,有以下兩種方式:(1) 使用ICP刻錄工具Artery ICP Programmer(建議用此方式)要使用ICP Programmer,請參照以下步驟:

  • 連接AT-Link到AT-START-F402板子上并上電
  • 開啟ICP Programmer,選擇用AT-Link連接,然后添加Project_L0范例編譯后產出的HEX或BIN文件,如下圖

圖25. 配置ICP Programmer

81aa28fa-d71a-11ef-9434-92fbcf53809c.png
  • 按下載按鍵,會出現下載選項的頁面,此頁面會顯示SLIB的狀態及相關的參數,設定啟用密碼0x55665566(可自定義)并勾選啟用SLIB,然后按開始下載,即可完成程序的燒錄并啟用SLIB,如下圖

圖26. 設置下載選項參數

81bb880c-d71a-11ef-9434-92fbcf53809c.png

關于ICP Programmer的詳細說明,請參閱ICP Programmer用戶手冊。(2) 使用范例程序main.c之中的slib_enable()函數在低通濾波函數測試正確后執行過一次此函數,就可以啟用安全庫區的保護功能。要執行此函數,只要在main.c中使能#define USE_SLIB_FUNCTION即可。

四、Project_L0執行流程

在此范例中,FIR低通濾波器會針對混和1KHz及15KHz正弦波的輸入信號testInput_f32_1kHz_15kHz 做計算,計算后輸出的1KHz正弦波數據存放到testOutput,然后會跟預先用MATLAB軟件計算好且存放在refOutput中的數據做比對,如果誤差值小于預期值(訊噪比SNR大于預設的門坎),板子上綠色的LED燈會一值閃爍,反之則是紅色的LED燈一值閃爍,下圖是Project_L0的整個流程圖27. Project_L0執行流程

81cb9238-d71a-11ef-9434-92fbcf53809c.png

要執行此范例程序,請按照下列步驟:(1) 使用Keil μvision開啟\utilities\AT32F402_405_slib_demo\project_l0\mdk_v5\目錄下的Project_L0項目,并重新編譯。(2) 在下載代碼之前,先檢查AT-START-F402板子上的芯片是否已經有SLIB或讀寫保護(FAP/EPP),如果有,就請先用ICP刻錄工具將這些保護都解除,然后再下載代碼。(3) 下載成功后并開始值執行后,會看到板子上的LED3燈持續快速閃爍。(4) 按下板子上的USER按鍵,就會執行低通濾波器的運算。(5) 比對運算結果,若結果正確,綠色LED4燈會持續閃爍。反之,則是紅色LED2燈持續閃爍。(6) 在比對結果正確的條件下,如果main.c中的USE_SLIB_FUNCTION有被定義且芯片未啟用過SLIB的話,就會執行slib_enable()函數去設置SLIB,若設置失敗,紅色LED2燈會一直亮著。若設置成功,綠色LED4燈會點亮約3秒鐘然后執行系統重置(system reset)來啟動SLIB。然后程序又回到步驟(3)。

五、產生頭文件及符號定義文件

頭文件(header file)跟符號定義文件(symbol definition file)是終端客戶應用范例Project_L1在調用FIR低通濾波函數時需要用到。在范例中,就是main.c中包含的fir_filter.h文件。符號定義文件的產出方法跟使用的工具鏈(toolchain)相關。使用Keil μvision產生符號定義文件方法如下:

  • 進入Ottions forTarget→Linker設定畫面
  • 在Misc controls這一欄,添加--symdefs=fir_filter_symbol.txt命令,如下圖

圖28. 設置Keil Misc controls選項

81daebd4-d71a-11ef-9434-92fbcf53809c.png
  • 重新編譯整個項目后,在project_l0\mdk_v5\Objects 目錄下就會產生一個名為fir_filter_symbol.txt的符號定義文件
  • 這個符號定義文件包含了整個項目全部的符號定義,所以需要修改,只保留終端用戶會調用的低通濾波函數的定義,刪減后的fir_filter_symbol.txt顯示如下

圖29. 修改后的fir_filter_symbol.txt內容

81f1802e-d71a-11ef-9434-92fbcf53809c.png

使用IAR產生符號定義文件方法如下:

  • 選擇Project→Option→Build Actions

圖30. 設置IAR Build Actions選項

81fba3ec-d71a-11ef-9434-92fbcf53809c.png
  • 然后在Post-build命令行中輸入以下命令

$TOOLKIT_DIR$\bin\isymexport.exe--edit "$PROJ_DIR$\steering_file.txt"

"$TARGET_PATH$" "$PROJ_DIR$\fir_filter_symbol.o"

  • 此處fir_filter_symbol.o是要產出的符號定義文件,steering_file.txt放在project_l0\iar_v8.2目錄下,是用來選擇要產生哪些函數的符號,需根據安全庫區調用的內容進行手動編輯,內容如下,其中"show"是用來選擇函數的命令

圖31. 編輯的steering_file.txt內容

820dea48-d71a-11ef-9434-92fbcf53809c.png

使用AT32 IDE產生符號定義文件方法如下:

  • 創建一個keep_sym.txt文件,用來選擇要產生哪些函數的符號,需根據安全庫區調用的內容進行手動編輯
  • 創建一個postbuild.sh文件,文件內容見工程,主要是用于生成包含函數名稱和地址的.ld文件
  • 選中project_l0工程,按鼠標右鍵選擇Properties
  • 點選C/C++Build->Settings->Build Steps->Post-build steps->Command中,填入"../postbuild.sh" "${BuildArtifactFileName}",點擊Apply生效
  • 編譯后,DEBUG文件夾中會生成一個keep_sym_app.ld文件

圖32. AT32 IDE添加post-build命令

821ffb34-d71a-11ef-9434-92fbcf53809c.png

Project_L1: 終端用戶范例

Project_L1范例會使用到在Project_L0中調試好,并已經被刻錄到AT32F402芯片的主閃存中且被SLIB保護的FIR低通濾波器函數。根據Project_L0提供的頭文件、符號定義文件以及主閃存區塊映像,終端用戶就可以參照Project_L1做到

  • 建立一個應用項目
  • 引用Project_L0提供的頭文件及符號定義文件到項目里
  • 調用FIR低通濾波器函數
  • 開發并調試用戶自己的應用程序

注意事項:Project_L1必須使用跟Project_L0開發時一樣的工具鏈及相同版本的編譯程序,不然有可能會因為版本差異的兼容性問題,而無法使用Project_L0提供的代碼。例如本范例中Project_L0使用的是Keil μvision V5.36.0.0,那Project_L1也要使用同樣的這個版本。

一、建立用戶的應用項目

因為Project_L0啟用的安全庫區已經占用了一些特定的主閃存扇區,Project_L1的代碼必須參照Project_L0提供的主閃存區塊映像來編排放置的地址。圖15為此范例的主閃存區塊映射,其中sector2至sector 5為安全庫區所占用,終端用戶需使用linker control file將這個區域隔離起來,避免代碼在編譯時被編排到這個區域內,方式如下:Keil μvision的scatter file可參照project_l1\mdk_v5\目錄的end_user_code.sct文件,將主閃存空間切成兩個區塊,中間空出來的區域就是SLIB保護區。此外,RAM的區域也要保留0x20017000之后的區域。如下圖圖33. 修改后的scatter文件

82360816-d71a-11ef-9434-92fbcf53809c.png

IAR的ICF file可參照project_l1\iar_V8.2\目錄下enduser.icf文件中如下圖的部分圖34. 修改后的icf文件824e0dbc-d71a-11ef-9434-92fbcf53809c.pngAT32 IDE的ld file可參照project_l1\at32_ide\目錄下FLASH_enduser.ld文件修改,添加如下圖的行圖35. ld文件添加project_l0生成的文件8265f2b0-d71a-11ef-9434-92fbcf53809c.png

二、在項目中加入符號定義文件

Project_L0所產生的符號定義文件fir_filter_symbol.txt必須被添加到Project_L1項目中,才能被正確的編譯并鏈結到SLIB保護區的代碼。在Keil μvision中加入符號定義文件工程中添加fir_filter_symbol.txt這個符號定義文件,如下圖:圖36. 在Keil加入symbol definition file

8281f69a-d71a-11ef-9434-92fbcf53809c.png

將文件加入fir_filter群組后,必須將它的文件類型更改為Object文件,而不是原來的文本(text)文件,修改方式如下圖37. 修改符號定義文件的類型為Object file

8295493e-d71a-11ef-9434-92fbcf53809c.png

在IAR中加入符號定義文件將fir_filter_symbol.o這個Object文件加到加到fir_filter群組即可,如下圖圖38. 在IAR中加入符號定義文件

82a60be8-d71a-11ef-9434-92fbcf53809c.png

在AT32 IDE中加入符號定義文件例程中將keep_sym_app.ld放在了fir_filter文件夾內添加進工程,在Project->Properties->C/C++Build->Setting->GNU ARM Cross C Linker->Library中添加keep_sym_app.ld所在路徑圖39. 在AT32 IDE中添加ld路徑

82ad85ee-d71a-11ef-9434-92fbcf53809c.png

三、調用SLIB保護區的函數

當filter.h頭文件被main.c引用且符號定義文件也正確地加入項目之后,保護區的低通波器函數就可以被調用。方式如下:FIR_lowpass_filter(inputF32, outputF32, TEST_LENGTH_SAMPLES);其中:inputF32 :指向包含輸入信號數據表的指針outputF32 :指向存放輸出信號數據表的指針TEST_LENGTH_SAMPLES :要被處理的信號樣本數

四、Project_L1執行流程

Project_L1的執行流程如下圖,說明如下:

  • 開始執行后LED3燈會持續閃爍
  • 按下AT-START板子上的USER按鍵,FIR_lowpass_filter()開始做運算
  • 如運算結果正確,綠色LED4燈持續閃爍,如運算結果錯誤則紅色LED2燈持續閃爍

圖40. Project_L1流程圖

82c4a9cc-d71a-11ef-9434-92fbcf53809c.png

五、調試模式下的SLIB保護

當終端用戶在開發應用程序時,會用到開發工具調試代碼,以下將以Keil μvision為例,說明在調試模式下,SLIB如何防止保護區內的代碼被以數據的方式讀取

  • 開啟Project_L1項目并重新編譯
  • 點擊”Start/Stop Debug Session”進入調試模式
  • 在”Disassembly”窗口點擊數標右鍵,然后選擇”Show Disassembly at Address”,如下圖

圖41. 進入Show Disassembly at Address

82d59f20-d71a-11ef-9434-92fbcf53809c.png
  • 輸入SLIB_INSTRUCTION扇區地址

圖42. 設置Show Code at Address82eeb78a-d71a-11ef-9434-92fbcf53809c.png可以看到代碼都是0x00圖43. 代碼查看82fd3b66-d71a-11ef-9434-92fbcf53809c.png

  • 同樣地在Memory窗口輸入地址,也會看到全部是0x00

圖44. Memory窗口查看代碼83113210-d71a-11ef-9434-92fbcf53809c.png

  • 在Memory窗口,輸入SLIB_READ_ONLY地址,因為這個區塊允許被D-Code數據總線讀取,所以可以看到原來的數值

圖45. Memory窗口查看SLIB_READ_ONLY起始頁面8320158c-d71a-11ef-9434-92fbcf53809c.png對安全庫區的數據嘗試做修改,FLASH_STS寄存器的EPPERR位置”1”提出警告,顯示寫保護發生作用圖46. SLIB寫測試8334db5c-d71a-11ef-9434-92fbcf53809c.png如果有使能寫保護錯誤中斷,繼續執行程序就會進入中斷程序里面圖47. 寫保護錯誤中斷834c7960-d71a-11ef-9434-92fbcf53809c.png

方案商和終端用戶代碼整合及下載操作流程

方案商和終端用戶的代碼設計完成后,需要下載到同一個MCU中,這就涉及到各自代碼的安全性問題。以下列舉兩種常用下載操作流程供用戶參考,仍然是以上面Project_L0和Project_L1為例。操作中涉及到AT-Link的離線下載模式,詳細描述可以參考ICP使用文檔及AT-Link使用文檔。

方案商和終端用戶代碼分別燒錄

方案商先燒錄SLIB代碼到MCU,然后終端用戶再燒錄應用代碼到MCU,步驟如下:(1)方案商將編譯完成的工程中SLIB部分的代碼提取并保存成BIN或者HEX檔,這步可以通過各個IDE軟件或者ICP工具實現,例如在KEIL工程中,user選項中添加fromelf.exe--bin--output.\Listings\@L.bin !L,編譯生成對應固件的bin檔,將對應的SLIB段文件添加后綴名.bin格式,本例中修改為ER_SLIB_INSTRUCTION.bin和ER_SLIB_READ_ONLY.bin,對應的就是SLIB-INSTRUCTION文件和SLIB-DATA文件,也可以新版ICP直接打開工程完整HEX檔然后點擊文件->文件另存為bin格式,分段的bin名對應地址,如下圖。圖48. 生成SLIB代碼部分bin文件8387cf88-d71a-11ef-9434-92fbcf53809c.png(2) 將bin通過ICP工具,在線燒錄到MCU,如下圖圖49. ICP在線燒錄MCU839ba22e-d71a-11ef-9434-92fbcf53809c.png(3) 或者通過ICP工具配置成離線項目工程保存到AT-Link,然后經過AT-Link離線燒錄到MCU,保存離線項目工程如下圖。圖50. AT-Link離線燒錄到????MCU83b6af38-d71a-11ef-9434-92fbcf53809c.png(4) 經過步驟2或者步驟3,終端用戶拿到燒錄好SLIB部分的MCU,此時SLIB狀態會顯示為已啟用,終端用戶通過在線燒錄或者離線燒錄應用代碼到MCU完成整個過程,在線燒錄如下圖。圖51. 終端用戶燒錄代碼到MCU83dcb80e-d71a-11ef-9434-92fbcf53809c.png

方案商和終端用戶代碼合并燒錄

方案商的SLIB代碼和終端用戶的應用代碼整合到一個離線項目工程中,通過AT-Link離線燒錄一次下載到MCU,步驟如下:(1) 方案商將編譯完成的工程按照上一章節所述方法處理,得到SLIB部分的BIN檔。(2) 方案商通過ICP制作離線項目工程并保存到PC,可以根據最終需求配置各種參數,比如限制下載次數、項目文件綁定AT-Link、下載完成后開啟FAP等,保存離線項目工程如下圖注意:離線項目工程本身已經經過加密,為進一步提升安全性,方案商還可以將slib.bin制作成加密的slib.benc文件再添加到離線項目工程中,但此時的離線項目工程只能在對應匹配加密秘鑰的AT-Link上才能使用圖52. 制作離線項目工程83f1471a-d71a-11ef-9434-92fbcf53809c.png(3) 終端用戶拿到該離線項目工程,用ICP打開項目文件,通過添加文件功能,可以添加應用代碼部分到該離線項目工程,然后再保存到PC或者直接存儲到AT-Link,通過執行離線下載完成操作,項目文件添加方法如下圖。注意:為防止代碼泄露被破解等風險,離線項目工程添加代碼文件時其余配置都不可更改,所以需要方案商預先將最終配置設置好圖53. 添加項目文件

8407ce4a-d71a-11ef-9434-92fbcf53809c.png
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17316

    瀏覽量

    352497
  • 雅特力
    +關注

    關注

    0

    文章

    168

    瀏覽量

    8135
  • AT32
    +關注

    關注

    1

    文章

    118

    瀏覽量

    2157
收藏 人收藏

    評論

    相關推薦

    AT32F402/405時鐘配置入門指南

    AT32F402/405時鐘配置本應用入門指南主要介紹兩部分內容:1、基于提供的V2.x.x 的板級支持包來進行時鐘源碼的配置及修改2
    發表于 10-26 06:37

    AT32F402/405 I 2C使用指南

    AT32F402/405 I2C使用指南本文主要就I2C 總線接口的基本功能進行講解和案列解析。
    發表于 10-26 08:17

    AT32F402/405 DMA使用指南

    AT32F402/405 DMA使用指南主要就DMA 的基本功能進行講解和案列解析。
    發表于 10-26 07:29

    AT32F402/405的GPIO功能及固件驅動程序API的配置和使用

    AT32F402/405 GPIO Application Note介紹AT32F402/405的GPIO功能及固件驅動程序API的配置和使用,并對BSP例程的軟件設計加以說明,同時演
    發表于 10-26 07:03

    AT32F402/405 PWC應用筆記

    AT32F402/405 PWC應用筆記主要以低功耗為基礎進行講解和案例解析。
    發表于 10-26 06:33

    AT32F402/405安全應用說明

    AT32F402/405 Security Library Application Note主要在闡述AT32F402/405系列安全庫區的
    發表于 10-26 08:30

    AT32F421

    AT32F421 AT32
    發表于 03-30 10:39 ?2119次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32<b class='flag-5'>F</b>421

    展臺首日速遞,AT32 MCU精彩亮相

    熱門領域產品齊聚,一展科技創新風采。新品登場,AT32F402/F405拓展高速USB應用新紀元A
    的頭像 發表于 08-24 08:17 ?673次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>展臺首日速遞,AT32 MCU精彩亮相

    AT32F402和AT32F405系列MCU 9月正式投入量產

    力作為32位MCU創新領導者,領先業界研發USB OTG產品拓展其功能性,于近日正式推出主流型AT32F402和AT32F405系列新品,集成獨立的HS USB OTG(內建PHY
    發表于 09-06 14:55 ?1473次閱讀

    AT32講堂088 | AT32F402/F405時鐘配置

    介紹如何結合提供的V2.x.x的板級支持包(BSP)來配置時鐘。以下介紹時鐘配置的方法主要分兩種:1、以手動編寫代碼調用BSP中提供的驅動函數接口來進行時鐘配
    的頭像 發表于 09-15 08:08 ?593次閱讀
    AT32講堂088 | <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32F402</b>/<b class='flag-5'>F405</b>時鐘配置

    AT32F402/F405 DMA使用指南

    DMA簡介DMA控制器的作用不僅在增強系統性能并減少處理器的中斷生成,而且還針對32位MCU應用程序專門優化設計。DMA控制器為存儲器到存儲器,存儲器到外設和外設到存儲器的傳輸提供了7個通道。每個通道都支持外設的DMA請求映射到任意通道上。圖1.DMA控制器架構DMAMUX簡介對于如何將外設的DMA請求映射到任意的數據流通道上,就需要使用到DMAMUX。DM
    的頭像 發表于 11-20 01:03 ?365次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32F402</b>/<b class='flag-5'>F405</b> DMA使用指南

    AT32F402/F405 ADC使用指南

    ADC簡介ADC控制器的功能極其強大。其包含但不限于以下內容時鐘及狀態,由數字和模擬時鐘兩個部分組成支持分辨率為12位的轉換,采樣周期支持廣范圍的配置自校準,自帶校準功能以糾正數據偏移基本模式,支持多種模式,不同模式可組合使用滿足多種應用不同優先權的通道,普通通道與搶占通道具備不同的優先權多種獨立的觸發源,包括TMR、EXINT、軟觸發等多種觸發選擇數據后級
    的頭像 發表于 01-10 17:27 ?284次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32F402</b>/<b class='flag-5'>F405</b> ADC使用指南

    AT32F402/F405 GPIO應用筆記

    GPIO特性AT32F402/405支持多達56個雙向I/O引腳,這些引腳分為5組,分別為PA0-PA15、PB0-PB15、PC0-PC15、PD2、PF0-PF1、PF4-PF7、PF11、每個
    的頭像 發表于 01-10 17:28 ?273次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32F402</b>/<b class='flag-5'>F405</b> GPIO應用筆記

    AT32F402/F405時鐘配置

    電子發燒友網站提供《AT32F402/F405時鐘配置.pdf》資料免費下載
    發表于 01-15 15:24 ?0次下載
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32F402</b>/<b class='flag-5'>F405</b>時鐘配置

    AT32F402/F405 PWC 應用筆記

    關系電壓調節器,電壓調節器的幾個工作狀態省電模式,包括睡眠模式、深度睡眠模式、待機模式圖1.電源域框圖PWC基本功能解析供電方案一、功能介紹AT32F402/40
    的頭像 發表于 01-20 18:37 ?72次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32F402</b>/<b class='flag-5'>F405</b> PWC 應用筆記
    主站蜘蛛池模板: 最近日本字幕免费高清 | 国产福利视频第一导航 | 亚洲精品一区三区三区在线观看 | 99精品免费久久久久久久久日本 | 东北老妇xxxxhd | 亚洲an天堂an在线观看 | 亲女乱h文小兰第一次 | 不卡一区二区高清观看视频 | 草莓视频免费看 | 国产在线精品亚洲观看不卡欧美 | 学生妹被爆插到高潮无遮挡 | 免费亚洲视频在线观看 | 风车动漫(p)_在线观看官网 | 国产成人a在一区线观看高清 | 国产嫩草影院精品免费网址 | 日日啪无需播放器 | 刺激性视频黄页 | 亚洲国产高清福利视频 | WW.国产人妻人伦精品 | 妹妹成人网 | 九色PORNY蝌蚪视频首页 | 日韩 亚洲 欧美 中文 高清 | yellow日本动漫观看免费 | 国产亚洲精品欧洲在线视频 | 亚洲 欧美无码原创区 | 一本色道久久综合亚洲精品蜜桃冫 | 玖玖爱这里只有精品视频 | 人人超碰97caoporen国产 | 免费观看成人毛片 | 九九热精品免费观看 | 超碰超碰视频在线观看 | 广东95后小情侣酒店自拍流出 | 久久久久久免费观看 | 全彩acg无翼乌火影忍者 | 中文国产成人精品久久免费 | PORN白嫩内射合集 | 成人高清网站 | 免费视频国产在线观看网站 | 24小时日本在线电影 | 亚洲无码小格式 | 免费女人光着全身网站 |