STM32F103_Bootloader程序开发06 - IAP升级用的App.bin增加CRC32校验码,确保固件完整性,防止“变砖”

article/2025/8/4 2:33:38

导言


《STM32F103_Bootloader程序开发05 - Keil修改生成文件的路径与文件名,自动生成bin格式文件》上一章节成功让Keil生成App.bin二进制文件,用于IAP升级。

为了保障IAP升级过程中的固件完整性,避免因损坏文件导致设备“变砖”,为App.bin添加CRC32校验码是一项关键措施。在实际产品中,IAP(在应用程序中编程)升级机制极大地提升了设备远程维护与功能迭代的效率。然而,一旦升级过程中出现传输异常、存储错误或数据被篡改,App.bin中的固件内容若无有效校验机制,将可能导致“程序跳转失败”或“设备变砖”的严重问题。为避免此类风险,我们在本篇中将介绍如何在生成的App.bin文件末尾添加一个CRC32校验码,并在Bootloader中进行验证。通过这一机制,系统能在启动前准确判断固件的完整性,拒绝加载损坏固件,从而提升系统的可靠性与安全性。
在这里插入图片描述

总的来说,本章节的目的是在App.bin的结尾增加4个字节的CRC32,OTA(IAP)升级的时候使用App_crc.bin。注意不要使用App.bin。

项目地址:
github: https://github.com/q164129345/MCU_Develop/tree/main/bootloader06_stm32f103_compile_bin_iap_file
gitee(国内): https://gitee.com/wallace89/MCU_Develop/tree/main/bootloader06_stm32f103_compile_bin_iap_file

一、让Keil编译完代码后,自动生成App_crc.bin


1.1、准备工具

  1. srec_cat.exe(也可以去官网下载)
  2. crc_add.bat(我已经编写好了,拿来用就好)
    在这里插入图片描述
    如上所示,这两个工具已经在App的MDK-ARM文件夹里,自行领取即可。

1.2、让Keil编译完之后,自动调用crc_add.bat脚本,生成App_crc.bin文件

在这里插入图片描述

1.3、编译一次,看看效果

在这里插入图片描述
如上所示,编译完成之后,顺利生成两个bin文件。
在这里插入图片描述
在这里插入图片描述
如上所示:

  1. Run #1 的指令用于生成App.bin。
  2. Run #2 的指令(其实就是调用crc_add.bat)用于生成App_crc.bin。

二、对比App.bin与App_crc.bin


2.1、对比文件结尾

在这里插入图片描述
如上所示,左边是App_crc.bin文件,右边是App.bin文件。可见,App_crc.bin文件比App.bin文件在尾部多了一个CRC32校验码。
在下一章节,将编写一个代码,计算App_crc.bin的整包的CRC32码(当然,最后四个字节除外),用STM32计算出来的CRC32码跟文件最后的CRC32码做对比。如果它们相同,即整个固件的完整性是没有问题的。如果它们不相同,那整个固件的完整性有问题,IAP升级失败。等待上位机的下一次OTA升级。

2.2、对比文件内容(App_crc.bin的最后4个字节除外)

crc_add.bat脚本有没有将改动固件的内容呢?让ChatGPT帮我检查一下。
在这里插入图片描述
在这里插入图片描述


http://www.hkcw.cn/article/guYPXKTAKP.shtml

相关文章

语言使用的国家概况统计

语言是文化的载体,也是沟通和协作的桥梁。随着全球化进程加快,了解主要语言的分布及其使用国家,对于数据分析师、产品经理、市场人员乃至技术开发者,都极为重要。本文将梳理全球几种主要语言(英语、法语、阿拉伯语、俄…

DeepSeek-R1-0528

深度思考能力强化​ DeepSeek-R1-0528 仍然使用 2024 年 12 月所发布的 DeepSeek V3 Base 模型作为基座,但在后训练过程中投入了更多算力,显著提升了模型的思维深度与推理能力。 更新后的 R1 模型在数学、编程与通用逻辑等多个基准测评中取得了当前国内…

MCU STM32搭配存储SD NAND(贴片式T卡)于智能皮电手环(Galvanic Skin Response, GSR 手环)的全方位评测

文章目录 卓越性能强化安全高效能效图形处理优势丰富集成特性模拟模块实时监控保障数据完整性提升安全性与可靠性测量原理采样率相关 在智能皮电手环及数据存储技术不断迭代的当下,主控 MCU STM32H750 与存储 SD NAND MKDV4GIL-AST 的强强联合,正引领行业…

处理知识库文件_编写powershell脚本文件_批量转换其他格式文件到pdf文件---人工智能工作笔记0249

最近在做部门知识库,选用的dify,作为rag的工具,但是经过多个对比,最后发现, 比较好用的是,纳米搜索,但是可惜纳米搜索无法在内网使用,无法把知识库放到本地,导致 有信息…

Java 基础 常见知识

基本数据类型 Java 中基本数据类型?对应的包装类?占多少字节? Java 中有 8 种基本数据类型: 6 种数字类型: 4 种整数类型:byte、short、int、long2 种浮点类型:float、double 1 种字符类型&a…

直播预告 | 聚焦芯必达|打造可靠高效的国产 MCU 与智能 SBC 汽车解决方案

随着汽车电子国产化快速推进,车规级 MCU 与 CAN/LIN SBC 作为车身控制的核心组件,正面临更高的安全与可靠性挑战。品佳集团将携手芯必达微电子,深入剖析国产 MCU/SBC/智能 SBC 的最新技术与应用,助力企业打造高性能、可量产的国产…

TF 卡 U1 与 U3 的核心差异解析:从速度标准到应用场景

在选购 TF 卡时,常常会看到 U1、U3 等标识,这些标识代表着不同的性能等级。最近不少客户询问 TF 卡 U1 和 U3 的区别,接下来将从多个维度为您详细解读,并通过对比图表直观呈现差异。 对比项目U1U3速度标准最低写入速度 10MB/s最低…

【Linux】vim编辑器

前言: 上文我们讲到了Linux中权限相关的指令【Linux】权限相关指令-CSDN博客 本文来讲解以下能让我们在Linux下编写代码的工具:vim 1.vim简单介绍 vim是Linux中一个较为常用的编辑器,也是Linux中上手难度最大的编辑器之一。有的同学可能知道v…

PKC6100A电流探头:攻克800V高压测试新利器

在新能源汽车行业快速发展的今天,电机控制器作为电动车辆的"大脑",其性能测试至关重要。然而,传统测试设备往往难以满足高压平台下的严苛测试需求。本文将为您揭秘普科科技PKC6100A电流探头如何帮助行业领先企业攻克测试难关。 一、…

【C++】STL详解(四)---Stack和Queue

文章目录 Stack定义方式使用方式 Queue定义方式使用方式 Stack Stack是一种容器&#xff0c;是基本的数据结构之一&#xff0c;特点是先进后出。 定义方式 方式一&#xff1a;普通定义方式 stack<int> st1;方式二&#xff1a; stack<int,vector<int>> …

换宽带ip地址会变吗?同一个宽带如何切换ip地址

在当今互联网时代&#xff0c;IP地址作为网络设备的"身份证"&#xff0c;其重要性不言而喻。许多用户在使用宽带时都会遇到这样的疑问&#xff1a;换宽带IP地址会变吗&#xff1f;同一个宽带如何切换IP地址&#xff1f;本文将深入探讨这一问题&#xff0c;帮助读者全…

WPF中一种使用Geometry图标的方法,用作制作图标按钮

1.去阿里巴巴矢量图标库或者哪里的图标库找到svg代码&#xff1a; 2.粘贴看一下&#xff1a; 3.摘取其中path属性&#xff0c;创建Geometry对象&#xff1a; 4.然后可以在按钮中使用&#xff1a; 感觉东西太多了&#xff0c;学不玩了

第二代IndoorLink头戴式无线讲解器,远距+动感,更好用了

在讲解器市场中&#xff0c;IndoorLink&#xff08;音德聆客&#xff09;头戴式无线讲解器一直具有鲜明的辨识度&#xff0c;张扬个性、动感自由的特点&#xff0c;受到很多用户欢迎。经过近一年的精细打磨后&#xff0c;IndoorLink头戴式迎来了全新升级。 日前&#xff0c;深…

PYTHON通过VOSK实现离线听写支持WINDOWSLinux_X86架构

在当今人工智能快速发展的时代&#xff0c;语音识别技术已经成为人机交互的重要方式之一。本文将介绍如何使用Python结合Vosk和PyAudio库实现一个离线语音识别系统&#xff0c;无需依赖网络连接即可完成语音转文字的功能。 技术栈概述 1. Vosk语音识别引擎 Vosk是一个开源的…

MyBatisPlus--快速入门

MyBatisPlus介绍 从名字中就可以感觉到MybatisPlus与MyBatis之间的渊源&#xff0c;而MyBatis是一个非常流行的持久层框架&#xff0c;主要来做数据库的增删改查&#xff0c;而MyBatisPlus这种命名方式让人不得不往MyBatis的升级版去联想&#xff0c;事实也确实如此&#xff0…

STL_stack和queue(deque priority_queue)

前言 本文主要介绍&#xff0c;本人的学习心得和知识汇总&#xff0c;本篇博文对于STL知识的讲解侧重于难点&#xff0c;不会每一个都细细讲解。本文主要对适配器设计模式展开讲解&#xff0c;对反向迭代器和优先级队列重点讲解。STL对栈和队列的设计不同于之前c语言设计的栈和…

从印巴空战看数据制胜密码:元数据如何赋能数字战场

2025年5月的印巴空战震惊世界&#xff1a;巴基斯坦以6:0的压倒性战绩击落印度“阵风”等战机&#xff0c;这场胜利的背后不仅是武器代差&#xff0c;更是“数据链体系”的降维打击。中巴联合研发的Link-17数据链以1毫秒延迟和动态跳频抗干扰技术&#xff0c;将预警机、战机、导…

【开源工具】音频格式转换大师:基于PyQt5与FFmpeg的高效格式转换工具开发全解析

&#x1f3a7; 【开源工具】音频格式转换大师&#xff1a;基于PyQt5与FFmpeg的高效格式转换工具开发全解析 &#x1f308; 个人主页&#xff1a;创客白泽 - CSDN博客 &#x1f525; 系列专栏&#xff1a;&#x1f40d;《Python开源项目实战》 &#x1f4a1; 热爱不止于代码&…

【Linux】环境变量完全解析

9.环境变量 文章目录 9.环境变量一、命令行参数二、获取环境变量程序中获取环境变量1. 使用命令行参数2. 使用系统调用函数getenv("字符串");3. 使用系统提供的全局变量environ 命令行中查询环境变量 三、常见环境变量1. HOME2. OLDPWD3. PATH4. SHELL 四、环境变量与…