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

    文章

    1768

    浏览量

    156352
  • crc
    crc
    +关注

    关注

    0

    文章

    206

    浏览量

    31053
  • SHA
    SHA
    +关注

    关注

    0

    文章

    19

    浏览量

    8786
  • STM32F4
    +关注

    关注

    3

    文章

    204

    浏览量

    30439
  • SEGGER
    +关注

    关注

    0

    文章

    61

    浏览量

    14900

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    高多层板设计中的信号完整性:层叠结构比走线更重要

    高多层板是电子系统复杂化的必然产物,但它从来不是一件简单的事。每一次层数的增加,背后都是信号完整性、电源完整性和可制造之间的反复权衡。
    的头像 发表于 06-07 11:13 232次阅读

    IDT信号完整性产品:解决高速信号传输难题

    IDT信号完整性产品:解决高速信号传输难题 在当今的电子设备中,随着计算、存储和通信应用中信号速度的不断提高,系统设计师面临着越来越大的信号完整性挑战。高速信号在传输过程中,由于发射器、接收器和通道
    的头像 发表于 03-04 17:10 880次阅读

    SI合集002|信号完整性测量应用简介,快速掌握关键点

    一、信号完整性定义信号完整性(SignalIntegrity,简称SI)是衡量信号从驱动端经传输线抵达接收端后,波形完整程度的关键指标,反映了信号在电路中能否以正确的时序、持续时间和电压幅度作出响应
    的头像 发表于 01-26 10:58 561次阅读
    SI合集002|信号<b class='flag-5'>完整性</b>测量应用简介,快速掌握关键点

    使用MATLAB和Simulink进行信号完整性分析

    信号完整性是保持高速数字信号的质量的过程。信号完整性是衡量电信号从源传输到目标位置时的质量的关键度量。在高速数字和模拟电子中,确保信号的预期形状、时序和功率得以保持,能够保证数据的可靠且准确传输。
    的头像 发表于 01-23 13:57 8991次阅读
    使用MATLAB和Simulink进行信号<b class='flag-5'>完整性</b>分析

    Cadence工具如何解决芯粒设计中的信号完整性挑战

    在芯粒设计中,维持良好的信号完整性是最关键的考量因素之一。随着芯片制造商不断突破性能与微型化的极限,确保组件间信号的纯净与可靠面临着前所未有的巨大挑战。对于需要应对信号完整性与电源
    的头像 发表于 12-26 09:51 582次阅读
    Cadence工具如何解决芯粒设计中的信号<b class='flag-5'>完整性</b>挑战

    网络延迟具体是怎样影响电能质量在线监测装置的实时完整性的?

    网络延迟对电能质量在线监测装置实时完整性的影响,本质是 破坏 “数据传输的时序” 与 “数据接收的完整性” —— 装置采集的电流、电压、谐波等数据(尤其是暂态事件波形)需通过网络
    的头像 发表于 10-23 11:59 1112次阅读

    技术资讯 I 信号完整性与阻抗匹配的关系

    络参数。信号完整性与阻抗匹配之间存在什么关系?信号完整性与阻抗匹配密不可分,精确的阻抗匹配对于确保功率顺利传输至PCB互连中的负载器件至关重要。信号完整性问题涉及潜在
    的头像 发表于 09-05 15:19 5478次阅读
    技术资讯 I 信号<b class='flag-5'>完整性</b>与阻抗匹配的关系

    驾驭体验,先驭测试:揭秘车载娱乐系统功能完整性测试的全景解决方案

    在智能汽车日益成为“第三生活空间”的今天,车载娱乐系统(IVI)已不再是锦上添花的配置,而是衡量车型竞争力的核心要素之一。高品质的音视频播放、稳定清晰的收音机功能,直接关乎用户的驾乘体验与品牌口碑。然而,系统的复杂功能的交织
    的头像 发表于 08-28 10:10 2024次阅读
    驾驭体验,先驭测试:揭秘车载娱乐系统<b class='flag-5'>功能</b><b class='flag-5'>完整性</b>测试的全景解决方案

    串扰如何影响信号完整性和EMI

    欢迎来到 “掌握 PCB 设计中的 EMI 控制” 系列的第六篇文章。本文将探讨串扰如何影响信号完整性和 EMI,并讨论在设计中解决这一问题的具体措施。
    的头像 发表于 08-25 11:06 1w次阅读
    串扰如何影响信号<b class='flag-5'>完整性</b>和EMI

    什么是信号完整性

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

    普源DHO924示波器在信号完整性测试中的表现

    信号完整性测试是现代电子工程中的核心环节,涉及对信号传输过程中的失真、噪声、时序偏差等问题的精确分析与评估。普源DHO924示波器作为一款高性能、多功能数字示波器,凭借其卓越的技术参数与智能化
    的头像 发表于 06-24 12:10 1073次阅读
    普源DHO924示波器在信号<b class='flag-5'>完整性</b>测试中的表现

    是德DSOX1204A示波器在电源完整性测试中的关键优势

    瞬态响应、噪声抑制、电磁兼容(EMC)等。是德科技(Keysight)DSOX1204A示波器凭借其高性能硬件、智能化分析工具及灵活的应用功能,成为电源完整性测试中的利器。本文将深入探讨DSOX1204A在电源
    的头像 发表于 06-24 12:01 837次阅读
    是德DSOX1204A示波器在电源<b class='flag-5'>完整性</b>测试中的关键优势

    普源DHO5058示波器在信号完整性测试中的表现

    卓越的性能参数、多通道设计和智能化功能,为信号完整性测试提供了强有力的工具。本文将从技术特性、应用场景、实际表现和优势等方面,深入探讨DHO5058在信号完整性测试中的优异表现。   一、核心技术参数为信号
    的头像 发表于 06-23 14:16 876次阅读
    普源DHO5058示波器在信号<b class='flag-5'>完整性</b>测试中的表现

    季丰电子自建引脚完整性测试能力

    季丰可靠测试项目拓展AEC-Q100车规芯片验证C6:LI - Lead Integrity 引脚完整性Q100要求。
    的头像 发表于 06-23 09:22 1223次阅读
    季丰电子自建引脚<b class='flag-5'>完整性</b>测试能力

    凡亿Allegro Skill布线功能-检查跨分割

    在进行高速PCB设计的过程中,高速信号线需要进行阻抗控制,那么参考平面的完整性对于高速信号的完整性和稳定性至关重要。然而,如果仅仅依赖于肉眼去检查参考平面的完整性,往往容易遗漏一些关键
    的头像 发表于 06-19 11:50 2612次阅读
    凡亿Allegro Skill布线<b class='flag-5'>功能</b>-<b class='flag-5'>检查</b>跨分割