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

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

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

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

麥克泰技術(shù) ? 來源:麥克泰技術(shù) ? 2023-05-04 10:45 ? 次閱讀

嵌入式產(chǎn)品應(yīng)用中,為了保證系統(tǒng)數(shù)據(jù)在存儲或者傳輸過程中的完整性,固件映像中通常包含完整性檢查(integrity checks),以檢測映像是否損壞。例如,bootloader可以基于完整性檢查驗(yàn)證一個更新的固件映像是否可信?;蛘吖碳谕暾詸z查可以自我驗(yàn)證,檢查Flash是否損壞。

SEGGER Embedded Studio從v5.10版本(Linker v3.00及以上版本)開始提供完整性檢查功能,支持多種CRC和消息摘要算法(例如MD5和SHA)。

b39c6296-e708-11ed-ab56-dac502259ad0.png

b3b49e60-e708-11ed-ab56-dac502259ad0.png

01

使用方法

使用Linker提供的完整性檢查功能,首先需要將執(zhí)行檢查的區(qū)域定義為一個region,并為放置計(jì)算結(jié)果的區(qū)域定義一個region。

我們可以為整個Flash區(qū)域上創(chuàng)建一個CRC,并將結(jié)果放在Flash的末尾 。

此外,我們還可以定義計(jì)算CRC的區(qū)域的填充值。如:

define region FLASH    = [0x80000000 size 512k];
define region CRC     = [end(FLASH)-4, size 4];
define region APPLICATION = FLASH - CRC; 
fill APPLICATION with 0xFF;

將應(yīng)用段放到APPLICATION 域。

使用選擇的算法如CRC-32計(jì)算CRC。

place in CRC {
 integrity check of APPLICATION with algorithm="CRC-32" fill=0xFF
};

現(xiàn)在,APPLICATION域的CRC-32計(jì)算結(jié)果將保存在CRC域中。

02

實(shí)現(xiàn)

我們使用ST STM32F4_Discovery開發(fā)板,基于SEGGER Embedded Studio V7.10 提供的package manager創(chuàng)建STM32F4示例工程。

修改鏈接腳本

首先,我們需要在鏈接定位文件STM32F4xx_Flash_CCM.icf中定義應(yīng)用程序和計(jì)算出的CRC值放置的區(qū)域:

define region CRC = [end(FLASH)-4 size 4];
define region APPLICATION = FLASH - CRC;

將應(yīng)用段放置在APPLICATION區(qū)域之后,執(zhí)行完整性檢查,并將結(jié)果將被放置在CRC區(qū)域:

place in CRC {
integrity check of APPLICATION with algorithm="CRC-32/STM32" fill=0xFF
};
fill APPLICATION with 0xFF;

最后一行是可選的,確保Flash的所有空白區(qū)域使用相同值填充,用于計(jì)算CRC。

使用的算法是CRC-32/STM32,與目標(biāo)處理器使用的算法相同。

03

驗(yàn)證CRC結(jié)果

STM32系列內(nèi)置了一個CRC-32硬件計(jì)算單元,為了驗(yàn)證生成的CRC,我們將計(jì)算結(jié)果與STM32 CRC外設(shè)的硬件實(shí)現(xiàn)進(jìn)行比較。

在應(yīng)用程序使用STM32 CRC外設(shè)計(jì)算應(yīng)用程序區(qū)域上的CRC,然后將其與鏈接器計(jì)算的CRC進(jìn)行比較。

首先使能CRC外設(shè),基于ST CMSIS文件,操作如下:

RCC->AHB1ENR |= RCC_AHB1ENR_CRCEN; // Enable CRC clock
CRC->CR |= CRC_CR_RESET;      // Reset peripheral

為了計(jì)算CRC,數(shù)據(jù)被逐字寫入CRC數(shù)據(jù)寄存器

do {
           CRC->DR = __REV(*pData);  // Calculate CRC
        pData++;
} while (NumItems--);       
CRCResultHW = CRC->DR;      // Save CRC result

注意,STM32 CRC外設(shè)需要反轉(zhuǎn)一個字中各個字節(jié)的順序。為此,我們只需使用Embedded Studio的內(nèi)部函數(shù)__REV()。

運(yùn)行該應(yīng)用程序,在Debug Terminal窗口可以看到SEGGER linker CRC和STM32 CRC是匹配的。

b3cf4dc8-e708-11ed-ab56-dac502259ad0.png

通過SEGGER linker支持固件(firmware)完整性檢查,無需外部工具,所有工作都可以在Embedded Studio工具鏈中本地完成,大大簡化了需要完整性檢查的設(shè)置。

附:

File  : main.c
Purpose : Example application doing a CRC check using the STM32 CRC peripheral


#include 
#include 
#include "stm32f4xx.h"


#define FLASH_IMAGE_START 0x08000000
#define FLASH_IMAGE_END  0x080FFFFC
#define FLASH_APPLICATION_END (FLASH_IMAGE_END - 0x4)
/*********************************************************************
*
*    main()
*
* Function description
*  Application entry point.
*/
int main(void) {
 int i;
 unsigned int NumItems;
 unsigned int* pData;
 unsigned int CRCResultHW;
 unsigned int CRCResult;
 unsigned int OldValue;
 
 i = 0;
 NumItems = (FLASH_APPLICATION_END - FLASH_IMAGE_START) / 4;
 pData = (unsigned int*)FLASH_IMAGE_START;  // points to start of Flash
 CRCResult = *(unsigned int*)FLASH_IMAGE_END; // Saves CRC value calculated by SEGGER Linker
 //
 // Config CRC Module
 //
 RCC->AHB1ENR |= RCC_AHB1ENR_CRCEN;
 CRC->CR |= CRC_CR_RESET;
 //
 // Calculate CRC with ST CRC unit over complete Flash area
 //
 do {
  CRC->DR = __REV(*pData); // ST algorithm expects words in reversed order
  pData++;
 } while (NumItems--);
 CRCResultHW = CRC->DR;
 printf("Hardware calculated CRC over Flash is: 0x%X 
", CRCResultHW);
 printf("SEGGER Linker calculated CRC over Flash is: 0x%X
", CRCResult);
 //
 // Compare with Linker result
 //
 if (CRCResult == CRCResultHW) {
  printf("Both CRC check sums are matching!
");
 } else {
  printf("CRC check sums are not matching. Check parameters.
");
 }
 do {
  i++;
 } while (1);
}





審核編輯:劉清

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

    關(guān)注

    10

    文章

    1614

    瀏覽量

    147657
  • crc
    crc
    +關(guān)注

    關(guān)注

    0

    文章

    199

    瀏覽量

    29420
  • SHA
    SHA
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    8435
  • STM32F4
    +關(guān)注

    關(guān)注

    3

    文章

    194

    瀏覽量

    27974
  • SEGGER
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    14090

原文標(biāo)題:使用SEGGER Linker的完整性檢查功能

文章出處:【微信號:麥克泰技術(shù),微信公眾號:麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    信號完整性和信號一致你還不知道嗎?#示波器 #信號完整性

    信號完整性
    安泰儀器維修
    發(fā)布于 :2024年09月25日 17:59:54

    高速電路中的信號完整性和電源完整性研究

    高速電路中的信號完整性和電源完整性研究
    發(fā)表于 09-25 14:44 ?0次下載

    高速高密度PCB信號完整性與電源完整性研究

    高速高密度PCB信號完整性與電源完整性研究
    發(fā)表于 09-25 14:43 ?3次下載

    高速PCB信號完整性設(shè)計(jì)與分析

    高速PCB信號完整性設(shè)計(jì)與分析
    發(fā)表于 09-21 11:51 ?0次下載

    高速PCB的信號完整性、電源完整性和電磁兼容研究

    電子發(fā)燒友網(wǎng)站提供《高速PCB的信號完整性、電源完整性和電磁兼容研究.pdf》資料免費(fèi)下載
    發(fā)表于 09-19 17:37 ?0次下載

    把信號完整性設(shè)計(jì)落到實(shí)處

    ses信號完整性(SI)和電源完整性(PI)是PCB設(shè)計(jì)的關(guān)鍵,無論板速如何。仿真和指導(dǎo)原則雖有幫助,但難以覆蓋所有風(fēng)險點(diǎn)。于博士的課程將系統(tǒng)化信號完整性設(shè)計(jì),通過核心知識點(diǎn)和實(shí)際案例,提供清晰
    的頭像 發(fā)表于 08-30 12:29 ?262次閱讀
    把信號<b class='flag-5'>完整性</b>設(shè)計(jì)落到實(shí)處

    信號完整性與電源完整性-電源完整性分析

    電子發(fā)燒友網(wǎng)站提供《信號完整性與電源完整性-電源完整性分析.pdf》資料免費(fèi)下載
    發(fā)表于 08-12 14:31 ?27次下載

    信號完整性與電源完整性-差分對的特性

    電子發(fā)燒友網(wǎng)站提供《信號完整性與電源完整性-差分對的特性.pdf》資料免費(fèi)下載
    發(fā)表于 08-12 14:28 ?1次下載

    信號完整性與電源完整性-信號的串?dāng)_

    電子發(fā)燒友網(wǎng)站提供《信號完整性與電源完整性-信號的串?dāng)_.pdf》資料免費(fèi)下載
    發(fā)表于 08-12 14:27 ?0次下載

    信號完整性與電源完整性 第一章 概論

    電子發(fā)燒友網(wǎng)站提供《信號完整性與電源完整性 第一章 概論.pdf》資料免費(fèi)下載
    發(fā)表于 08-09 14:49 ?1次下載

    示波器探頭在電源完整性測量上的應(yīng)用

    在電子設(shè)備的開發(fā)和維護(hù)過程中,電源完整性是一個至關(guān)重要的考量因素。電源完整性(Power Integrity, PI)涉及到電源分配網(wǎng)絡(luò)(PDN)的性能,確保電子設(shè)備能夠獲得穩(wěn)定、干凈的電源供應(yīng)
    的頭像 發(fā)表于 08-02 09:38 ?249次閱讀
    示波器探頭在電源<b class='flag-5'>完整性</b>測量上的應(yīng)用

    搞定電源完整性,不如先研究PDN

    ? 在現(xiàn)代電子設(shè)備的設(shè)計(jì)中,一個關(guān)鍵的因素是電源完整性。電源完整性不僅影響設(shè)備的性能,還直接關(guān)系到設(shè)備的穩(wěn)定性和可靠。作為電子設(shè)備的基礎(chǔ),印刷電路板(PCB)的電源完整性設(shè)計(jì)尤為重要
    的頭像 發(fā)表于 06-13 18:16 ?2640次閱讀
    搞定電源<b class='flag-5'>完整性</b>,不如先研究PDN

    搞定電源完整性,不如先研究PDN!

    。它擁有的電源完整性分析功能可以在設(shè)計(jì)初期就幫助 模擬和評估電路板的電源網(wǎng)絡(luò),及時發(fā)現(xiàn)并指出可能的電源噪聲問題和缺陷 ,像是一個敏銳的指導(dǎo)者。華秋DFM不僅幫助工程師更好地 布局電容器,提升電源
    發(fā)表于 06-12 15:21

    什么是信號完整性

    在現(xiàn)代電子通信和數(shù)據(jù)處理系統(tǒng)中,信號完整性(Signal Integrity, SI)是一個至關(guān)重要的概念。它涉及信號在傳輸過程中的質(zhì)量保持,對于確保系統(tǒng)性能和穩(wěn)定性具有決定性的影響。本文將從信號完整性的定義、影響因素、測試方法、以及在實(shí)際應(yīng)用中的重要
    的頭像 發(fā)表于 05-28 14:30 ?1022次閱讀

    構(gòu)建系統(tǒng)思維:信號完整性,看這一篇就夠了!

    能和功能實(shí)現(xiàn)起著決定性的作用。 本文將從基礎(chǔ)概念到實(shí)際應(yīng)用,為工程師們提供清晰的指引,并深入探討信號完整性的重要、所需的專業(yè)知識,以及所用到的相關(guān)軟件工具等。 通過本文希望工程師們能夠更系統(tǒng)地了解信號
    發(fā)表于 03-05 17:16