0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

麦克泰技术 来源:麦克泰技术 2023-05-04 10:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式产品应用中,为了保证系统数据在存储或者传输过程中的完整性,固件映像中通常包含完整性检查(integrity checks),以检测映像是否损坏。例如,bootloader可以基于完整性检查验证一个更新的固件映像是否可信。或者固件基于完整性检查可以自我验证,检查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提供的完整性检查功能,首先需要将执行检查的区域定义为一个region,并为放置计算结果的区域定义一个region。

我们可以为整个Flash区域上创建一个CRC,并将结果放在Flash的末尾 。

此外,我们还可以定义计算CRC的区域的填充值。如:

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

将应用段放到APPLICATION 域。

使用选择的算法如CRC-32计算CRC。

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

现在,APPLICATION域的CRC-32计算结果将保存在CRC域中。

02

实现

我们使用ST STM32F4_Discovery开发板,基于SEGGER Embedded Studio V7.10 提供的package manager创建STM32F4示例工程。

修改链接脚本

首先,我们需要在链接定位文件STM32F4xx_Flash_CCM.icf中定义应用程序和计算出的CRC值放置的区域:

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

将应用段放置在APPLICATION区域之后,执行完整性检查,并将结果将被放置在CRC区域:

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

最后一行是可选的,确保Flash的所有空白区域使用相同值填充,用于计算CRC。

使用的算法是CRC-32/STM32,与目标处理器使用的算法相同。

03

验证CRC结果

STM32系列内置了一个CRC-32硬件计算单元,为了验证生成的CRC,我们将计算结果与STM32 CRC外设的硬件实现进行比较。

在应用程序使用STM32 CRC外设计算应用程序区域上的CRC,然后将其与链接器计算的CRC进行比较。

首先使能CRC外设,基于ST CMSIS文件,操作如下:

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

为了计算CRC,数据被逐字写入CRC数据寄存器

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

注意,STM32 CRC外设需要反转一个字中各个字节的顺序。为此,我们只需使用Embedded Studio的内部函数__REV()。

运行该应用程序,在Debug Terminal窗口可以看到SEGGER linker CRC和STM32 CRC是匹配的。

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

通过SEGGER linker支持固件(firmware)完整性检查,无需外部工具,所有工作都可以在Embedded Studio工具链中本地完成,大大简化了需要完整性检查的设置。

附:

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);
}





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1715

    浏览量

    154670
  • crc
    crc
    +关注

    关注

    0

    文章

    205

    浏览量

    30616
  • SHA
    SHA
    +关注

    关注

    0

    文章

    19

    浏览量

    8687
  • STM32F4
    +关注

    关注

    3

    文章

    204

    浏览量

    29818
  • SEGGER
    +关注

    关注

    0

    文章

    60

    浏览量

    14759

原文标题:使用SEGGER Linker的完整性检查功能

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    什么是信号完整性

    电子发烧友网站提供《什么是信号完整性?.pdf》资料免费下载
    发表于 07-09 15:10 0次下载

    了解信号完整性的基本原理

    作者:Cece Chen 投稿人:DigiKey 北美编辑 随着支持人工智能 (AI) 的高性能数据中心的兴起,信号完整性 (SI) 变得至关重要,这样才能以更高的速度传输海量数据。为确保信号完整性
    的头像 发表于 05-25 11:54 877次阅读
    了解信号<b class='flag-5'>完整性</b>的基本原理

    Samtec虎家大咖说 | 浅谈信号完整性以及电源完整性

    前言 在这一期的Samtec虎家大咖说节目中,Samtec信号完整性(SI)和电源完整性(PI)专家Scott McMorrow、Rich Mellitz和Istvan Novak回答了观众的提问
    发表于 05-14 14:52 1076次阅读
    Samtec虎家大咖说 | 浅谈信号<b class='flag-5'>完整性</b>以及电源<b class='flag-5'>完整性</b>

    电源完整性基础知识

    先说一下,信号完整性为什么写电源完整性?SI 只是针对高速信号的部分,这样的理解没有问题。如果提高认知,将SI 以大类来看,SI&amp;PI&amp;EMI 三者
    发表于 05-13 14:41

    信号完整性测试基础知识

    在当今快速发展的数字时代,高速传输已成为电子设备的基本要求。随着数据传输速率的不断提升,信号完整性(Signal Integrity,简称SI)问题变得越来越重要。信号完整性是高速互连系统设计的基石
    的头像 发表于 04-24 16:42 3327次阅读
    信号<b class='flag-5'>完整性</b>测试基础知识

    电源完整性分析及其应用

    引言 电源完整性这一概念是以信号完整性为基础的,两者的出现都源自电路开关速度的提高。当高速信号的翻转时间和系统的时钟周期可以相比时,具有分布参数的信号传输线、电源和地就和低速系统中的情况完全不同了
    发表于 04-23 15:39

    普源DHO3000系列示波器电源完整性测试

    整个系统的性能和可靠。普源DHO3000系列示波器凭借其卓越的性能和丰富的功能,成为进行电源完整性测试的绝佳工具。本文将详细探讨基于普源DHO3000系列示波器的电源完整性测试方案,
    的头像 发表于 04-15 14:45 602次阅读
    普源DHO3000系列示波器电源<b class='flag-5'>完整性</b>测试

    技术资讯 | 信号完整性测试基础知识

    本文重点信号完整性测试需要从测试电路板和原型获取实验数据并加以分析。在理想的工作流程中,还会仿真信号完整性指标,并将其与实际测量值进行比较。信号完整性测试只能检查特定的结构,通常需要在
    的头像 发表于 04-11 17:21 1927次阅读
    技术资讯 | 信号<b class='flag-5'>完整性</b>测试基础知识

    普源示波器在信号完整性分析中的应用研究

    着系统的性能和可靠。普源示波器作为一种高精度、多功能测试仪器,在信号完整性分析中发挥着不可或缺的作用。本文将探讨普源示波器在信号完整性分析中的应用及其重要
    的头像 发表于 03-19 14:20 678次阅读
    普源示波器在信号<b class='flag-5'>完整性</b>分析中的应用研究

    电子线路信号完整性设计规则

    电子发烧友网站提供《电子线路信号完整性设计规则.pdf》资料免费下载
    发表于 01-21 09:24 0次下载
    电子线路信号<b class='flag-5'>完整性</b>设计规则

    PCB信号完整性探讨-PPT

    信号完整性(Signal lntegrity,SI)包含由于信号传输速率加快而产生的互连、电源、器件等引起的所有信号质量及延时等问题。    
    的头像 发表于 01-15 11:30 941次阅读
    PCB信号<b class='flag-5'>完整性</b>探讨-PPT

    是德示波器在电源完整性分析中的应用

    影响系统稳定性,甚至可能导致系统失效。因此,对电源完整性进行精确分析和有效的解决至关重要。而作为电子测量领域领先厂商,是德(Keysight)的示波器凭借其卓越的性能和丰富的功能,在电源完整性分析中扮演着关键角色。 是德示波器并
    的头像 发表于 01-07 11:05 680次阅读
    是德示波器在电源<b class='flag-5'>完整性</b>分析中的应用

    如何解決信号完整性问题

    如何解决信号完整性问题呢?是德科技在向您介绍信号完整性分析基础知识的同时,我们还向您展示如何使用基本信号完整性(Signal Integrity - SI) 分析技术(例如眼图、S参数、时域反射计(TDR) 和单脉冲响应)来解决
    的头像 发表于 12-25 16:51 2457次阅读
    如何解決信号<b class='flag-5'>完整性</b>问题

    听懂什么是信号完整性

    2024年12月20日14:00-16:00中星联华科技将举办“高速信号完整性分析与测试”-“码”上行动系列线上讲堂线上讲堂。本期会议我们将为大家介绍高速串行总线传输基本框架,什么是信号完整性?高速
    的头像 发表于 12-15 23:33 1034次阅读
    听懂什么是信号<b class='flag-5'>完整性</b>

    12月20日线上讲堂|听懂什么是信号完整性

    2024年12月20日14:00-16:00中星联华科技将举办“高速信号完整性分析与测试”-“码”上行动系列线上讲堂线上讲堂。本期会议我们将为大家介绍高速串行总线传输基本框架,什么是信号完整性?高速
    的头像 发表于 12-06 01:06 779次阅读
    12月20日线上讲堂|听懂什么是信号<b class='flag-5'>完整性</b>