0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

雅特力AT32WB415 Security Library使用指南

雅特力 AT32 MCU ? 2023-10-10 09:50 ? 次閱讀

目前越來越多的微控器(MCU)應(yīng)用需要使用到復(fù)雜的算法及中間件解決方案(middlewaresolution),因此,如何保護(hù)軟件方案商開發(fā)出來的核心算法等知識產(chǎn)權(quán)代碼(IP-Code),便成為微控制器應(yīng)用中一項(xiàng)很重要的課題。因?yàn)檫@一重要的需求,AT32WB415系列提供了安全庫區(qū)(SLIB)的功能,以防止重要的IP-Code被終端用戶的程序做修改或讀取,進(jìn)而達(dá)到保護(hù)的目的。本文檔將詳細(xì)闡述AT32WB415系列安全庫區(qū)的應(yīng)用原理和軟件使用方法。

應(yīng)用原理

安全庫區(qū)的應(yīng)用原理

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

下圖是包含安全庫區(qū)的主閃存區(qū)映射示意圖,安全庫區(qū)的程序代碼可以很容易地被終端用戶調(diào)用并執(zhí)行, 但不能直接被讀取,因而達(dá)到保護(hù)的功能。圖1. 帶有安全庫區(qū)的主閃存區(qū)映射6c2a27f4-670f-11ee-9788-92fbcf53809c.png

安全庫區(qū)的范圍大小是以扇區(qū)(sector)為單位做設(shè)定,每一扇區(qū)的大小以實(shí)際MCU型號為準(zhǔn)。表1是AT32WB415系列各型號的主閃存大小、每扇區(qū)大小及可設(shè)置范圍。另外啟動程序代碼區(qū)開啟了主存擴(kuò)展功能后,整個18KB區(qū)域也是可以作為安全庫區(qū)。表1. AT32WB415各型號閃存大小總表6c35297e-670f-11ee-9788-92fbcf53809c.png

如何啟動安全庫區(qū)保護(hù)

默認(rèn)狀態(tài)下,安全庫區(qū)設(shè)定寄存器始終是不可讀且被寫保護(hù)。要想對安全庫區(qū)設(shè)定寄存器進(jìn)行寫操作,首先要對安全庫區(qū)設(shè)定寄存器解鎖,對SLIB_UNLOCK寄存器寫入解鎖0xA35F6D24值,通過查看SLIB_MISC_STS寄存器的SLIB_ULKF位確認(rèn)解鎖成功,隨后便允許對安全庫區(qū)設(shè)定寄存器寫入設(shè)定值。啟動主閃存安全庫區(qū)的步驟如下:

  • 檢查FLASH_STS寄存器的OBF位,以確認(rèn)沒有其他正在進(jìn)行的閃存操作;
  • 對SLIB_UNLOCK寄存器寫入0xA35F6D24,以進(jìn)行安全庫區(qū)解鎖;
  • 檢查SLIB_MISC_STS寄存器的SLIB_ULKF位,以確認(rèn)解鎖成功;
  • 在SLIB_SET_RANGE寄存器設(shè)定要保護(hù)的區(qū)域,包含指令區(qū)與數(shù)據(jù)區(qū)的地址;
  • 等待OBF位變?yōu)椤?’;
  • 在SLIB_SET_PWD寄存器設(shè)定安全區(qū)域密碼;
  • 等待OBF位變?yōu)椤?’;
  • 燒錄將存入安全庫區(qū)的代碼;
  • 進(jìn)行系統(tǒng)復(fù)位,重裝載安全庫區(qū)設(shè)定字;
  • 讀出SLIB_STS0/STS1寄存器用于判斷安全庫區(qū)設(shè)定結(jié)果。

注意事項(xiàng):

  • 只可在主閃存中設(shè)置安全庫區(qū),實(shí)際可設(shè)置范圍參見表1;
  • 啟動程序代碼區(qū)中設(shè)置安全庫區(qū)(需開啟AP模式),設(shè)置范圍為整個啟動程序代碼區(qū);
  • 主閃存和啟動程序代碼區(qū),安全庫區(qū)只能設(shè)置其中一個,不可同時設(shè)置;
  • 安全庫區(qū)代碼必須以扇區(qū)為單位進(jìn)行燒錄,且起始地址必須與主閃存地址對齊;
  • 中斷向量表是數(shù)據(jù)型態(tài)且通常會被放置在閃存的第一扇區(qū)(扇區(qū)0)內(nèi),請勿將閃存的第一扇區(qū)設(shè)定為安全庫區(qū);
  • 要被安全庫區(qū)保護(hù)的程序代碼,不可放置在閃存的前4KB內(nèi);

關(guān)于安全庫區(qū)設(shè)定寄存器的詳細(xì)說明,請參閱AT32WB415系列技術(shù)手冊。啟動安全庫區(qū)的程序可參考安全庫區(qū)應(yīng)用范例project_l0中位于main.c中的slib_enable()函數(shù)。亦可使用雅特力的ICP或ISP刻錄工具做設(shè)定,后面章節(jié)將會有詳細(xì)的說明。

如何解除安全庫區(qū)保護(hù)

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

  • 檢查FLASH_STS寄存器的OBF位,以確認(rèn)沒有其他正在進(jìn)行的編程操作;
  • 在SLIB_PWD_CLR寄存器寫入先前設(shè)置的安全區(qū)域密碼;
  • 進(jìn)行系統(tǒng)復(fù)位,重裝載安全庫區(qū)設(shè)定字;
  • 讀出SLIB_STS0寄存器用于判斷安全庫區(qū)設(shè)定結(jié)果。

編排及執(zhí)行安全庫區(qū)的程序

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

一、不可將中斷向量表設(shè)置為安全庫區(qū)

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

  • 不可將主閃存的第一扇區(qū)設(shè)置為安全庫區(qū)
  • 要被安全庫區(qū)保護(hù)的程序代碼,不可放置在閃存的第一扇區(qū)內(nèi)

二、安全庫區(qū)代碼與用戶區(qū)代碼的關(guān)聯(lián)性

受安全庫區(qū)保護(hù)的程序代碼(IP-code)可以從位于用戶代碼區(qū)(安全庫區(qū)之外的區(qū)域)的函數(shù)庫中調(diào)用函數(shù)。在這種情形下,IP-Code將會包含這些函數(shù)的地址,允許PC(程序計數(shù)器)在執(zhí)行IP-Code時跳轉(zhuǎn)到這些函數(shù)。一旦安全庫區(qū)被啟動,這些函數(shù)的地址就不能被改變,此時,這些位于用戶代碼區(qū)的函數(shù)的地址就必須固定下來,否則PC將跳轉(zhuǎn)到錯誤的地址而無法正常工作。因此在設(shè)置安全庫區(qū)的時候,應(yīng)該將所有與IP-Code相關(guān)聯(lián)的函數(shù)都一起編排到安全庫區(qū)之內(nèi)以避免此情況發(fā)生。下圖顯示出一個被保護(hù)的函數(shù)Function_A()調(diào)用到用戶區(qū)內(nèi)的函數(shù)Function_B()的例子。圖4. 安全庫區(qū)的函數(shù)調(diào)用用戶區(qū)函數(shù)的例子6c765a3e-670f-11ee-9788-92fbcf53809c.png

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

三、軟件浮點(diǎn)運(yùn)算庫的使用與編排

由于AT32WB415沒有硬件符點(diǎn)運(yùn)算單元(FPU),所以項(xiàng)目中如有符點(diǎn)數(shù)運(yùn)算,Keil或IAR編譯程序就會使用ARM提供的軟件浮點(diǎn)運(yùn)算庫函數(shù)。但因?yàn)檐浖↑c(diǎn)運(yùn)算庫函數(shù)是已經(jīng)編譯過的代碼,無法做修改,且其中有些函數(shù)內(nèi)會有如同前面章節(jié)提到的文字池格式的代碼,所以不能將浮點(diǎn)運(yùn)算庫函數(shù)一起編排到SLIB_CODE保護(hù)區(qū)之內(nèi),必須放到安全庫區(qū)之外。如下圖中Keil浮點(diǎn)運(yùn)算庫中的除法函數(shù),就有文字池格式的匯編代碼。圖6. 除法函數(shù)匯編代碼6c9ccec6-670f-11ee-9788-92fbcf53809c.png

當(dāng)sLib啟用后,sLib保護(hù)區(qū)內(nèi)的全部內(nèi)容就不能被改動,所以SLIB_CODE調(diào)用到的每個浮點(diǎn)運(yùn)算庫函數(shù)的地址也就不能被改變。第三章的范例將會說明如何將使用到的浮點(diǎn)運(yùn)算庫函數(shù),編排到SLIB-CODE保護(hù)區(qū)外且固定地址的區(qū)域,在啟用SLIB保護(hù)之后,讓SLIB-CODE保護(hù)區(qū)內(nèi)的程序可以正確無誤的調(diào)用。Keil軟件浮點(diǎn)運(yùn)算庫的詳細(xì)說明,可參考安裝目錄下的ARM DUI0378G文檔《ARMCompiler v5.06 for μVision ARM C and C++ Libraries and Floating-Point SupportUser Guide》。IAR軟件浮點(diǎn)運(yùn)算庫的詳細(xì)說明,可參考安裝目錄下的EWARM_DevelopmentGuide文檔《IAR C/C++ Development Guide》的PREBUILT RUNTIME LIBRARIES章節(jié)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控器
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    7101
  • 雅特力
    +關(guān)注

    關(guān)注

    0

    文章

    150

    瀏覽量

    7948
  • AT32
    +關(guān)注

    關(guān)注

    1

    文章

    110

    瀏覽量

    2050
收藏 人收藏

    評論

    相關(guān)推薦

    AT32F423入門使用指南

    初步環(huán)境準(zhǔn)備開發(fā)環(huán)境下載地址:
    的頭像 發(fā)表于 05-14 08:15 ?1128次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32F423入門<b class='flag-5'>使用指南</b>

    AT32F423時鐘配置入門指南

    電子發(fā)燒友網(wǎng)站提供《AT32F423時鐘配置入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 01-31 09:37 ?0次下載
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32F423時鐘配置入門<b class='flag-5'>指南</b>

    AT32WB415直接測試模式入門指南

    DTM操作說明資源準(zhǔn)備1)硬件環(huán)境:AT-START-WB415MT8852B2)軟件環(huán)境:SourceCode\projects\ble_app_gatt軟件設(shè)計本范例不推薦用戶修改,直接下載程序
    的頭像 發(fā)表于 01-19 08:14 ?446次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32WB415</b>直接測試模式入門<b class='flag-5'>指南</b>

    如何通過AT32WB415的藍(lán)牙模塊來實(shí)現(xiàn)ANCS的功能

    概述ANCS(AppleNotificationCenterService)即蘋果通知中心服務(wù),此服務(wù)為外圍藍(lán)牙設(shè)備(手表、耳機(jī)等)訪問IOS設(shè)備(iPhone、iPad等)上生成的多種通知提供了一種簡單方便的機(jī)制。ANCS圍繞三個原則設(shè)計:簡單性、高效性和可擴(kuò)展性,因此,不論是簡單的LED設(shè)備還是具有大顯示屏的功能強(qiáng)大的“配套”設(shè)備等配件來說,這項(xiàng)服務(wù)都具
    的頭像 發(fā)表于 12-30 08:14 ?440次閱讀
    如何通過<b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32WB415</b>的藍(lán)牙模塊來實(shí)現(xiàn)ANCS的功能

    如何通過AT32WB415的藍(lán)牙模塊來進(jìn)行OTA升級

    概述OTA(Over-The-AirTechnology)即空中下載技術(shù),利用OTA技術(shù)可以在不接觸(接線)的情況下對芯片程序進(jìn)行升級。AT32WB415的OTA是通過藍(lán)牙的方式實(shí)現(xiàn)的,利用芯片
    的頭像 發(fā)表于 12-20 08:15 ?741次閱讀
    如何通過<b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32WB415</b>的藍(lán)牙模塊來進(jìn)行OTA升級

    AT32WB415時鐘配置

    介紹如何結(jié)合提供的V2.x.x的板級支持包(BSP)來配置時鐘。以下介紹時鐘配置的方法主要分兩種:1、以手動編寫代碼調(diào)用BSP中提供的驅(qū)動函數(shù)接口來進(jìn)行時鐘配
    的頭像 發(fā)表于 12-20 08:14 ?423次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32WB415</b>時鐘配置

    AT32WB415安全庫應(yīng)用說明

    電子發(fā)燒友網(wǎng)站提供《AT32WB415安全庫應(yīng)用說明.pdf》資料免費(fèi)下載
    發(fā)表于 12-18 11:02 ?0次下載
    <b class='flag-5'>AT32WB415</b>安全庫應(yīng)用說明

    如何通過AT32WB415的藍(lán)牙模塊來實(shí)現(xiàn)SPP協(xié)議

    AT32WB415 SPP Application Note描述了如何通過AT32WB415的藍(lán)牙模塊來實(shí)現(xiàn)SPP協(xié)議,可以通過SPP協(xié)議來與主機(jī)進(jìn)行通訊。
    發(fā)表于 10-26 07:58

    AT32WB415直接測試模式入門指南

    AT32WB415直接測試模式入門指南介紹如何使用范例程序來測試RF功能。
    發(fā)表于 10-26 07:47

    AT32WB415 BLE MIDI入門指南

    AT32WB415 BLE MIDI入門指南介紹如何建立一個MIDI的控制器,發(fā)送控制訊號給手機(jī)進(jìn)行播放。
    發(fā)表于 10-26 07:24

    如何通過AT32WB415的藍(lán)牙模塊來實(shí)現(xiàn)ANCS的功能

    AT32WB415 ANCS Application Note描述了如何通過AT32WB415的藍(lán)牙模塊來實(shí)現(xiàn)ANCS的功能,可以與蘋果設(shè)備連接,對蘋果設(shè)備的通知信息進(jìn)行實(shí)時的監(jiān)聽與接收。
    發(fā)表于 10-26 07:13

    AT32WB415安全庫應(yīng)用說明

    這篇應(yīng)用筆記主要在闡述AT32WB415系列安全庫區(qū)的應(yīng)用原理、軟件使用方法及范例程序。
    發(fā)表于 10-26 06:54

    如何通過AT32WB415的藍(lán)牙模塊來進(jìn)行OTA升級

    AT32WB415 OTA Application Note描述了如何通過AT32WB415的藍(lán)牙模塊來進(jìn)行OTA升級。
    發(fā)表于 10-26 06:43

    AT32WB415時鐘配置入門指南

    AT32WB415時鐘配置本應(yīng)用入門指南主要介紹兩部分內(nèi)容:1、基于提供的V2.x.x 的板級支持包來進(jìn)行時鐘源碼的配置及修改2、如何
    發(fā)表于 10-26 06:34

    AT32WB415 Custom HID over BLE開發(fā)指南

    AT32WB415 Custom HID over BLE開發(fā)指南本應(yīng)用筆記將以 AN0097的 Custom HID device為藍(lán)本,將其功能移植到 BLE界面上,以期望能幫助使用者了解如何使用 BLE建立屬于自己的 HID裝置。
    發(fā)表于 10-26 06:06