一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

IAR愛亞系統(tǒng) ? 來源:IAR愛亞系統(tǒng) ? 作者:IAR愛亞系統(tǒng) ? 2022-11-18 14:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

保證代碼的完整性是嵌入式軟件開發(fā)中非常重要的一項(xiàng)任務(wù)。代碼的完整性檢查主要可以用于以下場(chǎng)合:

1. 在產(chǎn)線生產(chǎn)的時(shí)候,通過讀取相關(guān)軟件代碼版本號(hào)和相應(yīng)的校驗(yàn)碼來保證燒錄到MCU中的軟件是正確的;

2. 在通過Bootloader升級(jí)Application的時(shí)候,可以計(jì)算Application對(duì)應(yīng)的校驗(yàn)碼并和之前存取的Application的校驗(yàn)碼進(jìn)行比較,保證Application升級(jí)的正確性;

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

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

本文主要介紹如何在IAR Embedded Workbench中生成對(duì)應(yīng)代碼區(qū)域的校驗(yàn)碼并存儲(chǔ)在指定的地址,然后利用MCU中內(nèi)嵌的CRC硬件模塊計(jì)算對(duì)應(yīng)代碼區(qū)域的校驗(yàn)碼,并和之前存儲(chǔ)的校驗(yàn)碼進(jìn)行比較來檢查代碼的完整性。

在IAR Embedded Workbench中生成對(duì)應(yīng)代碼區(qū)域的校驗(yàn)碼并存儲(chǔ)在指定的地址

下面的選項(xiàng)使用CRC-32/MPEG-2為例生成對(duì)應(yīng)代碼區(qū)域的校驗(yàn)碼: 在IAR Embedded Workbench工程選項(xiàng)(Options)里面Linker選項(xiàng)里面生成Checksum 1. 勾選“Fill unused code memory”, Fill pattern里面填充相應(yīng)的值(關(guān)于填充值請(qǐng)參考往期文章:“填充沒有使用的ROM來提高系統(tǒng)的健壯性”) 2. Start address和End address輸入對(duì)應(yīng)代碼區(qū)域的地址(注意:不能包括存放Checksum的地址區(qū)域。比如,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文件中輸入相應(yīng)命令將Checksum放置指定的地址(這里是將checksum放置到Flash的最后):

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

構(gòu)建(Build)成功之后,在Build窗口會(huì)顯示對(duì)應(yīng)代碼區(qū)域的Checksum相關(guān)信息(Build窗口中的Filter Level要為All):

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

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

__checksum_begin: Checksum計(jì)算的起始地址:0x800'0000

__checksum_end: Checksum計(jì)算的結(jié)束地址:0x80f'fffb

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

在代碼中調(diào)用CRC硬件模塊計(jì)算對(duì)應(yīng)代碼區(qū)域的校驗(yàn)碼并和之前存儲(chǔ)的校驗(yàn)碼進(jìn)行比較

首先需要在代碼中聲明Checksum相關(guān)的變量:

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

然后在代碼中計(jì)算對(duì)應(yīng)代碼區(qū)域的校驗(yàn)碼并和之前存儲(chǔ)的校驗(yàn)碼進(jìn)行比較(注意:每次重新計(jì)算之前需要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;
}

調(diào)試

調(diào)試發(fā)現(xiàn),通過CRC硬件模塊計(jì)算出來的校驗(yàn)碼和之前存儲(chǔ)的校驗(yàn)碼是一致的,說明檢查代碼區(qū)域的完整性是好的:

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

總結(jié)

本文主要介紹了如何在IAR Embedded Workbench中配置在Link時(shí)生成對(duì)應(yīng)代碼區(qū)域的校驗(yàn)碼并存儲(chǔ)于指定地址,然后在運(yùn)行過程中使用MCU內(nèi)嵌的CRC硬件模塊計(jì)算對(duì)應(yīng)代碼區(qū)域的校驗(yàn)碼,并和之前存儲(chǔ)的校驗(yàn)碼進(jìn)行比較來檢查對(duì)應(yīng)代碼區(qū)域的完整性。

審核編輯:湯梓紅

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

    關(guān)注

    146

    文章

    17984

    瀏覽量

    367135
  • 嵌入式
    +關(guān)注

    關(guān)注

    5152

    文章

    19675

    瀏覽量

    317690
  • IAR
    IAR
    +關(guān)注

    關(guān)注

    5

    文章

    381

    瀏覽量

    37473
  • Embedded
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    23056

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

文章出處:【微信號(hào):IAR愛亞系統(tǒng),微信公眾號(hào):IAR愛亞系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

    基于STM32芯片IAR環(huán)境下的CRC配置。STM32全系列產(chǎn)品都具有CRC外設(shè),對(duì)CRC的計(jì)算提供硬件支持,為應(yīng)用程序節(jié)省了代碼空間。
    的頭像 發(fā)表于 09-06 17:38 ?1.5w次閱讀

    如何在IAR Embedded Workbench中配置生成對(duì)應(yīng)代碼區(qū)域的CRC校驗(yàn)碼

    在“使用IAR Embedded WorkbenchMCUCRC模塊
    的頭像 發(fā)表于 10-27 11:49 ?2439次閱讀
    如何在<b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>中配置生成對(duì)應(yīng)<b class='flag-5'>代碼</b>區(qū)域的<b class='flag-5'>CRC</b>校驗(yàn)碼

    IAR Embedded Workbench中計(jì)算多個(gè)地址區(qū)間的Checksum

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

    【武漢芯源】IAR Embedded Workbench?集成開發(fā)環(huán)境已全面支持武漢芯源CW32 MCU系列

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

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

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

    IAR Embedded Workbench中進(jìn)行ARM+RISC-V多核調(diào)試

    不同的程序,調(diào)試時(shí)每個(gè)核都會(huì)開啟獨(dú)立的IAR Embedded Workbench IDE,可以通過View > Cores可以打開對(duì)應(yīng)的Cores窗口查看和操作對(duì)應(yīng)Core的
    發(fā)表于 06-14 16:55

    如何使用NUC1262 CRC對(duì)代碼完整性進(jìn)行驗(yàn)證

    應(yīng)用:本示例代碼使用 NUC1262 CRC 對(duì)代碼完整性進(jìn)行自我驗(yàn)證。 BSP 版本: NUC1262_Series_BSP_CMSIS_V3.00.001 硬件
    發(fā)表于 08-29 06:49

    IAR Systems發(fā)布 IAR Embedded Wor

    IAR Systems發(fā)布 IAR Embedded Workbench for ARM新版本  IAR Systems發(fā)布
    發(fā)表于 02-11 09:14 ?1436次閱讀

    IAR_embedded_Workbench用戶指南介紹

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

    IAR Embedded Workbench?集成開發(fā)環(huán)境已全面支持航順芯片HK32MCU系列

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

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

    YRDKRX62N 快速入門指南 (IAR Embedded Workbench)
    發(fā)表于 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
    發(fā)表于 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)
    發(fā)表于 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
    發(fā)表于 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單片機(jī)硬件CRC計(jì)算單元采用固定的多項(xiàng)式發(fā)生器計(jì)算8位或者32位數(shù)據(jù)的CRC校驗(yàn)值,對(duì)數(shù)據(jù)傳輸或數(shù)據(jù)存儲(chǔ)的一致、完整性進(jìn)行驗(yàn)證。
    發(fā)表于 02-26 11:45 ?1479次閱讀
    RA <b class='flag-5'>MCU</b>中的<b class='flag-5'>CRC</b><b class='flag-5'>模塊</b>和使用方法