衡阳派盒市场营销有限公司

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

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

3天內不再提示

使用IAR Embedded Workbench和MCU的CRC模塊來檢查代碼的完整性

IAR愛亞系統 ? 來源:IAR愛亞系統 ? 作者:IAR愛亞系統 ? 2022-11-18 14:28 ? 次閱讀

保證代碼的完整性是嵌入式軟件開發中非常重要的一項任務。代碼的完整性檢查主要可以用于以下場合:

1. 在產線生產的時候,通過讀取相關軟件代碼版本號和相應的校驗碼來保證燒錄到MCU中的軟件是正確的;

2. 在通過Bootloader升級Application的時候,可以計算Application對應的校驗碼并和之前存取的Application的校驗碼進行比較,保證Application升級的正確性;

3. 在運行過程中,可以計算Application對應的校驗碼并和之前存取的Application校驗碼進行比較,保證Application在沒有損壞的情況下運行。(注意:根據需求的不同,在運行過程中可以分為上電檢查一次和運行過程中周期性地檢查)。

代碼的完整性檢查一般是通過計算對應代碼區域的校驗碼,并和之前存儲的校驗碼進行比較,若二者一致,說明對應代碼區域的完整性是好的,否則說明對應代碼區域數據被損壞。當然,完整性檢查準確率跟校驗碼有很大的關系,業界比較常用的是CRC。(注意:本文不對CRC原理進行詳細說明,想了解更多關于CRC的內容,請參考相關文獻。) IAR Embedded Workbench中內嵌了ielftool,可以在Link的時候生成對應代碼區域的校驗碼并存儲在指定的地址。 目前越來越多的MCU中內嵌了CRC硬件模塊,可以用于快速計算對應代碼區域的校驗碼。(本文以STM32 MCU為例介紹,方法同樣適用于其它帶CRC硬件模塊的MCU。)

本文主要介紹如何在IAR Embedded Workbench中生成對應代碼區域的校驗碼并存儲在指定的地址,然后利用MCU中內嵌的CRC硬件模塊計算對應代碼區域的校驗碼,并和之前存儲的校驗碼進行比較來檢查代碼的完整性。

在IAR Embedded Workbench中生成對應代碼區域的校驗碼并存儲在指定的地址

下面的選項使用CRC-32/MPEG-2為例生成對應代碼區域的校驗碼: 在IAR Embedded Workbench工程選項(Options)里面Linker選項里面生成Checksum 1. 勾選“Fill unused code memory”, Fill pattern里面填充相應的值(關于填充值請參考往期文章:“填充沒有使用的ROM來提高系統的健壯性”) 2. Start address和End address輸入對應代碼區域的地址(注意:不能包括存放Checksum的地址區域。比如,Checksum存放與0x080FFFFC ~ 0x080FFFFF, End address需要輸入0x080FFFFB)

3. 勾選“Generate Checksum”:

· Checksum Size: 選擇 “4 bytes”,

· Alignment: 輸入 “4”,

· Algorithm: 選擇 “CRC32”

· Complement: 選擇 “As is”,

· Initial value: 輸入“0xFFFFFFFF”,不要勾選“Use as input”

· Bit order: 選擇 “MSB first”

· 不要勾選 “Reverse byte order within word”

· Checksum unit size: 選擇 “32-bit”

6013ae84-6659-11ed-8abf-dac502259ad0.png

在ICF文件中輸入相應命令將Checksum放置指定的地址(這里是將checksum放置到Flash的最后):

place at end of FLASH_region { section .checksum };
構建(Build)并查看相關Log信息和map文件

構建(Build)成功之后,在Build窗口會顯示對應代碼區域的Checksum相關信息(Build窗口中的Filter Level要為All):

6042478a-6659-11ed-8abf-dac502259ad0.png 查看生成的map文件:

__checksum:存放于地址0x80f'fffc ~ 0x80f'ffff (Size: 4 bytes)

__checksum_begin: Checksum計算的起始地址:0x800'0000

__checksum_end: Checksum計算的結束地址:0x80f'fffb

60637752-6659-11ed-8abf-dac502259ad0.png

在代碼中調用CRC硬件模塊計算對應代碼區域的校驗碼并和之前存儲的校驗碼進行比較

首先需要在代碼中聲明Checksum相關的變量:

/* Linker generated symbols */
extern uint32_t const __checksum;
extern uint32_t __checksum_begin;
extern uint32_t __checksum_end;

然后在代碼中計算對應代碼區域的校驗碼并和之前存儲的校驗碼進行比較(注意:每次重新計算之前需要Reset CRC模塊):

/* Resets the CRC calculation unit                                    */
CRC->CR = 0x01;
 
/* Calculate the code flash using CRC calculation unit                */
CrcValue = HAL_CRC_Accumulate(&hcrc, (uint32_t *)&__checksum_begin,
   (((uint32_t)&__checksum_end - (uint32_t)&__checksum_begin + 1u)/4u)); 
       
/* Compare the calculated CRC with the previously stored CRC          */
if(__checksum == CrcValue)
{
    RomTst_Result = true;
}
else
{
    RomTst_Result = false;
}

調試

調試發現,通過CRC硬件模塊計算出來的校驗碼和之前存儲的校驗碼是一致的,說明檢查代碼區域的完整性是好的:

60819dd6-6659-11ed-8abf-dac502259ad0.png

總結

本文主要介紹了如何在IAR Embedded Workbench中配置在Link時生成對應代碼區域的校驗碼并存儲于指定地址,然后在運行過程中使用MCU內嵌的CRC硬件模塊計算對應代碼區域的校驗碼,并和之前存儲的校驗碼進行比較來檢查對應代碼區域的完整性。

審核編輯:湯梓紅

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

    關注

    146

    文章

    17319

    瀏覽量

    352650
  • 嵌入式
    +關注

    關注

    5092

    文章

    19177

    瀏覽量

    307680
  • IAR
    IAR
    +關注

    關注

    5

    文章

    354

    瀏覽量

    36780
  • Embedded
    +關注

    關注

    0

    文章

    44

    瀏覽量

    22266

原文標題:使用IAR Embedded Workbench和MCU的CRC模塊來檢查代碼的完整性

文章出處:【微信號:IAR愛亞系統,微信公眾號:IAR愛亞系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何為STM32編程節省代碼空間?在IAR中配置CRC參數有竅門

    基于STM32芯片IAR環境下的CRC配置。STM32全系列產品都具有CRC外設,對CRC的計算提供硬件支持,為應用程序節省了代碼空間。
    的頭像 發表于 09-06 17:38 ?1.4w次閱讀

    如何在IAR Embedded Workbench中配置生成對應代碼區域的CRC校驗碼

    在“使用IAR Embedded WorkbenchMCUCRC模塊
    的頭像 發表于 10-27 11:49 ?1778次閱讀
    如何在<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>中配置生成對應<b class='flag-5'>代碼</b>區域的<b class='flag-5'>CRC</b>校驗碼

    IAR Embedded Workbench中計算多個地址區間的Checksum

    在前面的文章“使用IAR Embedded WorkbenchMCUCRC模塊
    的頭像 發表于 01-05 12:33 ?1647次閱讀
    在<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>中計算多個地址區間的Checksum

    【武漢芯源】IAR Embedded Workbench?集成開發環境已全面支持武漢芯源CW32 MCU系列

    Embedded Workbench for Armversion 9.30.1版本現已提供對武漢芯源CW32系列Arm MCU的支持,這代表著我們的用戶可以使用IAR
    發表于 06-14 14:54

    使用SEGGER Linker的完整性檢查功能

    linker CRC和STM32 CRC是匹配的。 通過SEGGER linker支持固件(firmware)完整性檢查,無需外部工具,所有工作都可以在
    發表于 05-18 13:50

    IAR Embedded Workbench中進行ARM+RISC-V多核調試

    不同的程序,調試時每個核都會開啟獨立的IAR Embedded Workbench IDE,可以通過View > Cores可以打開對應的Cores窗口查看和操作對應Core的
    發表于 06-14 16:55

    如何使用NUC1262 CRC代碼完整性進行驗證

    應用:本示例代碼使用 NUC1262 CRC代碼完整性進行自我驗證。 BSP 版本: NUC1262_Series_BSP_CMSIS_V3.00.001 硬件
    發表于 08-29 06:49

    IAR Systems發布 IAR Embedded Wor

    IAR Systems發布 IAR Embedded Workbench for ARM新版本  IAR Systems發布
    發表于 02-11 09:14 ?1381次閱讀

    IAR_embedded_Workbench用戶指南介紹

    IAR embedded Workbench for ARM 是 IAR Systems 公司為 ARM 微處理器開發的一 個集成開發環境(下面簡稱
    發表于 11-09 18:08 ?90次下載

    IAR Embedded Workbench?集成開發環境已全面支持航順芯片HK32MCU系列

    IAR Systems?日前宣布:其最新發布的IAR Embedded Workbench for Arm? version 9.20已全面支持航順芯片HK32
    發表于 12-23 14:08 ?1798次閱讀

    YRDKRX62N 快速入門指南(IAR Embedded Workbench)

    YRDKRX62N 快速入門指南 (IAR Embedded Workbench)
    發表于 04-12 19:14 ?0次下載
    YRDKRX62N 快速入門指南(<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>)

    YRDKRL78G13 快速入門指南(IAR Embedded Workbench) Rev.1.01

    YRDKRL78G13 快速入門指南 (IAR Embedded Workbench) Rev.1.01
    發表于 04-13 18:49 ?0次下載
    YRDKRL78G13 快速入門指南(<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>) Rev.1.01

    YRDKRX62N 快速入門指南(IAR Embedded Workbench)

    YRDKRX62N 快速入門指南 (IAR Embedded Workbench)
    發表于 08-04 18:30 ?1次下載
    YRDKRX62N 快速入門指南(<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>)

    YRDKRL78G13 快速入門指南(IAR Embedded Workbench) Rev.1.01

    YRDKRL78G13 快速入門指南 (IAR Embedded Workbench) Rev.1.01
    發表于 08-10 18:31 ?0次下載
    YRDKRL78G13 快速入門指南(<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>) Rev.1.01

    RA MCU中的CRC模塊和使用方法

    瑞薩RA單片機硬件CRC計算單元采用固定的多項式發生器計算8位或者32位數據的CRC校驗值,對數據傳輸或數據存儲的一致完整性進行驗證。
    發表于 02-26 11:45 ?1062次閱讀
    RA <b class='flag-5'>MCU</b>中的<b class='flag-5'>CRC</b><b class='flag-5'>模塊</b>和使用方法
    冠通棋牌世界| 视频百家乐破解| 百家乐官网巴厘岛娱乐城| 谁会玩百家乐的玩法技巧和规则| 现金百家乐官网信誉| 大发888游戏平台 送1688元礼金领取lrm | 御金娱乐| 百家乐赌博软件下载| 百家乐官网大转轮真人视讯| 仕达屋娱乐城| 百家乐庄闲庄庄闲| 百家乐官网路单生| 百家乐官网注码方法| 威尼斯人娱乐平台注册网址 | 上市百家乐官网.评论| 中宁县| 网上百家乐是真的| 内乡县| 百家乐游戏研发| 澳门百家乐官网牌规| bet365备用bd| YY百家乐的玩法技巧和规则| 百家乐官网麻将牌| 赌场百家乐官网是如何玩| 大发888官方| tt百家乐的玩法技巧和规则 | 潞城市| 伟博娱乐城| 北京太阳城三期| 百家乐可以出千吗| 爱拼百家乐现金网| 神话百家乐官网的玩法技巧和规则| 百家乐官网麻关于博彩投注| 青鹏棋牌官网下载| 百家乐群| 百家乐游戏台| 万人迷百家乐官网的玩法技巧和规则| 百家乐官网筹码桌布| 金冠百家乐官网娱乐城| 六合彩马报| 百家乐乐赌|