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

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

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

3天內不再提示

雅特力AT32F423安全庫應用筆記

雅特力 AT32 MCU ? 2024-05-14 08:14 ? 次閱讀

概述

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

應用原理

安全庫區的應用原理

  • 設定以密碼保護主閃存中指定范圍的程序區(即安全庫區),軟件方案商可將核心算法存放到此區域,以達到保護的功能,其余空白程序區可以提供給終端商客戶進行二次開發。
  • 安全庫區劃分為唯讀區(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. 帶有安全庫區的主閃存區映射f5256cea-1186-11ef-9118-92fbcf53809c.png安全庫區的范圍大小是以扇區(sector)為單位做設定,每一扇區的大小以實際MCU型號為準。表1是AT32F423系列各型號的主閃存大小、每扇區大小及可設置范圍。另外啟動程序代碼區在開啟了主存擴展功能后,整個20KB區域也是可以作為安全庫區。表1. AT32F423各型號閃存大小總表f541306a-1186-11ef-9118-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)內,請勿將閃存的第一扇區設定為安全庫區的指令區;

關于安全庫區設定寄存器的詳細說明,請參閱AT32F423系列技術手冊。啟動安全庫區的程序可參考安全庫區應用范例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)f55f96a4-1186-11ef-9118-92fbcf53809c.png圖3. 文字池例子(2)f580fce0-1186-11ef-9118-92fbcf53809c.png

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

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

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

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

受安全庫區保護的程序代碼(IP-Code)可以從位于用戶代碼區(安全庫區之外的區域)的函數庫中調用函數。在這種情形下,IP-Code將會包含這些函數的地址,允許PC(程序計數器)在執行IP-Code時跳轉到這些函數。一旦安全庫區被啟動,這些函數的地址就不能被改變,此時,這些位于用戶代碼區的函數的地址就必須固定下來,否則PC將跳轉到錯誤的地址而無法正常工作。因此在設置安全庫區的時候,應該將所有與IP-Code相關聯的函數都一起編排到安全庫區之內以避免此情況發生。下圖顯示出一個被保護的函數Function_A()調用到用戶區內的函數Function_B()的例子。圖4. 安全庫區的函數調用用戶區函數的例子f5b89d94-1186-11ef-9118-92fbcf53809c.png此外,另一個最常見的情形就是使用到C語言的標準函式庫,例如memset()及memcpy()這類函數。如果IP-Code跟用戶區代碼都有調用到這類函數,就會有上述問題的困擾。列舉兩種常用的解決方法:1) 將其編譯到安全庫區范圍內,具體如何實現可以查看keil或IAR的相關文檔。2) 避免在IP-Code內使用C的標準函式庫,若非要使用,就必須將用到的函數改寫為其他名稱,以下是一個范例,在IP-Code 中寫一個my_memset()函數取代原先的memset()。圖5. 自定義函數范例f5dca6e4-1186-11ef-9118-92fbcf53809c.png

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

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

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

方案商先燒錄SLIB代碼到MCU,然后終端用戶再燒錄應用代碼到MCU,步驟如下:(1)方法A:方案商將編譯完成的工程中SLIB部分的代碼通過ICP截取保存成BIN或者HEX檔:先將整個工程下載到MCU(此時不配置SLIB及FAP等信息),然后通過存儲器讀取功能讀取對應SLIB部分代碼(0x08001000~0x08002FFF),再通過ICP軟件操作文件-存儲器數據另存為將其保存為BIN或者HEX,例程中BIN檔命名為slib.bin,如下圖。圖42. 保存SLIB代碼f606a61a-1186-11ef-9118-92fbcf53809c.png方法B:方案商將編譯完成的工程直接產生bin格式的文件,取其中SLIB區域對應的一段,例如在KEIL工程中,user選項中添加fromelf.exe --bin --output .\Listings\@L.bin !L,生成對應固件的bin檔,將對應的SLIB段文件添加后綴名.bin格式,本例中改為ER_SLIB_INSTRUCTION.bin和ER_SLIB_READ_ONLY.bin,對應的就是0x08002000地址段的SLIB-INSTRUCTION文件和0x08001000地址段的SLIB-READ-ONLY文件,如下圖圖43. 生成SLIB代碼部分bin文件f63128f4-1186-11ef-9118-92fbcf53809c.png(2) 將bin通過ICP工具,在線燒錄到MCU,如下圖圖44. ICP在線燒錄MCUf6582fb2-1186-11ef-9118-92fbcf53809c.png(3) 或者通過ICP工具配置成離線項目工程保存到AT-Link,然后經過AT-Link離線燒錄到MCU,保存離線項目工程如下圖。圖45. AT-Link離線燒錄到MCUf68ac27e-1186-11ef-9118-92fbcf53809c.png(4) 經過步驟2或者步驟3,終端用戶拿到燒錄好SLIB部分的MCU,此時SLIB狀態會顯示為已啟用,終端用戶通過在線燒錄或者離線燒錄應用代碼到MCU完成整個過程,在線燒錄如下圖。圖46. 終端用戶燒錄代碼到MCUf719aeb2-1186-11ef-9118-92fbcf53809c.png

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

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

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

    關注

    146

    文章

    17123

    瀏覽量

    350992
  • 控制器
    +關注

    關注

    112

    文章

    16332

    瀏覽量

    177812
  • AT32
    +關注

    關注

    1

    文章

    113

    瀏覽量

    2090
收藏 人收藏

    評論

    相關推薦

    AT32F423時鐘配置入門指南

    AT32F423時鐘配置本應用入門指南主要介紹兩部分內容:1、基于提供的V2.x.x 的板級支持包來進行時鐘源碼的配置及修改2、如何使用配套的時鐘配置工具來進行時鐘路徑及參數的設
    發表于 10-26 07:22

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

    這篇應用筆記介紹AT32F423的GPIO功能及固件驅動程序API的配置和使用,并對BSP例程的軟件設計加以說明,同時演示使用方法并展示實驗效果,供用戶參考。AT32F423xx的通用功能I/O
    發表于 10-26 06:26

    AT32F423安全應用說明

    這篇應用筆記主要在闡述AT32F423系列安全庫區的應用原理、軟件使用方法及范例程序。
    發表于 10-26 07:18

    AT32F423入門使用指南

    AT32F423入門使用指南旨在讓用戶快速使用AT32F423xx 進行項目開發。
    發表于 10-26 06:37

    AT32F421

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

    正式推出AT32F423系列超值型Cortex-M4F MCU

    AT32F423系列MCU最高主頻為150MHz,提供多達256KB Flash和48KB SRAM,包含1個高階外部儲存器(XMC)擴展,兼容8080/6800模式作為LCD并口。
    發表于 04-21 10:47 ?386次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>正式推出<b class='flag-5'>AT32F423</b>系列超值型Cortex-M4<b class='flag-5'>F</b> MCU

    發布超值型AT32F423系列MCU,以高性價比搶攻高性能應用市場

    4月20日,正式推出AT32F423系列超值型Cortex-M4F MCU,內建單精度浮點運算單元(FPU),支持多管腳及封裝選擇,具
    的頭像 發表于 04-21 11:05 ?1027次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>發布超值型<b class='flag-5'>AT32F423</b>系列MCU,以高性價比搶攻高性能應用市場

    發布超值型AT32F423系列MCU,以高性價比搶攻高性能應用市場

    4月20日,正式推出AT32F423系列超值型Cortex-M4F MCU,內建單精度浮點運算單元(FPU),支持多管腳及封裝選擇,具
    的頭像 發表于 04-21 13:49 ?599次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>發布超值型<b class='flag-5'>AT32F423</b>系列MCU,以高性價比搶攻高性能應用市場

    力推出AT32F423系列超值型Cortex-M4F MCU

    AT32F423系列MCU最高主頻為150MHz,提供多達256KB Flash和48KB SRAM,包含1個高階外部儲存器(XMC)擴展,兼容8080/6800模式作為LCD并口。
    發表于 04-23 14:25 ?358次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b>力推出<b class='flag-5'>AT32F423</b>系列超值型Cortex-M4<b class='flag-5'>F</b> MCU

    重磅!發布全新超值型AT32F423系列MCU,以高性價比搶攻高性能應用市場

    4月20日,正式推出AT32F423系列超值型Cortex-M4FMCU,內建單精度浮點運算單元(FPU),支持多管腳及封裝選擇,具備高效能、高集成和高性價比等特點,為AT32家
    的頭像 發表于 04-25 11:44 ?1087次閱讀
    重磅!<b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>發布全新超值型<b class='flag-5'>AT32F423</b>系列MCU,以高性價比搶攻高性能應用市場

    直播預告|超值型AT32F423新品發布,多管腳高性能滿足多元市場需求

    隨著工業自動化、物聯網、5G等技術的不斷發展,各類新興智能終端設備的興起帶動MCU需求快速成長。全力打造高效能、高可靠性且具有競爭的AT32系列MCU產品,日前推出
    的頭像 發表于 06-21 15:10 ?623次閱讀
    直播預告|<b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>超值型<b class='flag-5'>AT32F423</b>新品發布,多管腳高性能滿足多元市場需求

    AT32F423時鐘配置入門指南

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

    AT32F423 I 2C使用指南

    電子發燒友網站提供《AT32F423 I 2C使用指南.pdf》資料免費下載
    發表于 02-01 09:30 ?0次下載
    <b class='flag-5'>AT32F423</b> I 2C使用指南

    AT32F423 GPIO使用指南

    GPIO特性AT32F423支持多達86個雙向I/O引腳,這些引腳分為6組,分別為PA0-PA15、PB0-PB15、PC0-PC15、PD0-PD15、PE0-PE15
    的頭像 發表于 03-05 08:18 ?939次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32F423</b> GPIO使用指南

    AT32F423入門使用指南

    初步環境準備開發環境下載地址:
    的頭像 發表于 05-14 08:15 ?1507次閱讀
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32F423</b>入門使用指南
    主站蜘蛛池模板: 老男人粗大猛| 婷婷久久无码欧美人妻| 扒开老师大腿猛进AAA片邪恶| 国产精品99久久久久久AV蜜臀| 久久久久综合| 伦理片在线线手机版韩国免费观看 | 国产精品成人A蜜柚在线观看| 麻豆第一区MV免费观看网站| 学生精品国产在线视频| free乌克兰性xxxxhd| 久久理伦片琪琪电影院| 相声flash| 在线 国产 欧美 专区| 国产激情视频在线| 欧美一区二区影院| 中文国产成人精品久久免费| 国产午夜视频在永久在线观看| 日本精品无码久久久久APP| 最近中文字幕完整版高清| 国产综合91| 熟女强奷系列中文字幕| RUNAWAY韩国动漫免费官网版| 久久视频在线视频观品15| 亚洲精品色情APP在线下载观看| 2018高清国产一区二区三区| 99热久久爱五月天婷婷| 久久精品国产欧美日韩99热| 亚洲精品一线二线三线无人区| 国产成人精品视频播放| 日本一区精品久久久久影院| 9久久免费国产精品特黄 | 男女啪啪抽搐呻吟高潮动态图| 亚洲最大在线视频| 果冻传媒剧情在线观看| 幸福草电视剧演员表介绍| 富婆夜店找黑人猛男BD在线| 青青热久精品国产亚洲AV无码| 999视频在线观看| 美女张开让男生桶| 亚洲成人中文| 国产精品成人A蜜柚在线观看|