【固件升级】Bootloader(三)

【RT-Thread】STM32F1片内Flash实现Bootloader 本文基本实现STM32F1的Bootloader功能,并通过Ymodem进行程序升级,但这只是从PC端到设备升级,过程中也还存一些小问题,并不算真正意义上的OTA远程升级。当然通过串口通讯也可方便的扩展到其它无线通讯模块实现OTA功能。此外,RT-Thread官方给出的这个Bootloader升级方案确实极大的简化了OTA开发过程,提高了开发效率。 阅读详情

1. bootloader方案

类型作用说明
RT_threadBOOT带操作系统-使用组件-精简
裸机BOOT精简
  • 关于bootloader的软件方案要求
  • 第一点要求必须占用资源小
  • 易于移植扩展
  • 方便灵活修改
  • 带操作系统与裸机之争
  • 上面这点的解决方案是易于移植,不管是裸机或操作系统
  • 把功能性文件放在同一个.c .h 文件中
  • 逻辑函数封装好即可

2. 资料整理

2.1 开源 Bootloader 框架 - RT-FOTA

RT-Thread 官方推出了 STM32 系列单片机的通用 bootloader, 在其网站可以通过网页配置就可以生成 bootloader 的烧录文件,使广大嵌入式工程师不用编写一行代码,就能够轻松完成自己产品的 bootloader 功能。但是由于 RTT 官方的 bootloader 软件 RT-OTA 是商用性质,不公开源码,不仅仅限制了在其他平台的移植,而且也不方便加入产品的特定功能。本人软件水平有限,但是基于对开源精神的崇拜和 RTT 多年的感情,蒙发出利用业余时间编写一款开源的且基于 RTT 系统 bootloader 通用软件,贡献给大家。

【RT-FOTA 主要的功能】
支持 RTT 官方的 RBL 打包软件,使用方式也一致。目前支持包括 CRC32、AES256、quicklz 和 fastlz 功能;
支持命令行模式(FINSH 组件)和出厂固件恢复;
支持 FLASH 分区(FAL 组件);
支持功能扩展(RTT 组件);
其他功能可自行方便扩展;

原始工程编译大小
Program Size: Code=74574 RO-data=8910 RW-data=636 ZI-data=14836

占用flash:74574+8910+636 = 84120 = 82k
占用ram: 636+14836 = 15472 = 15k

可以看出这个资源占用挺大的
超出一般的BOOT容量大小

这个裁剪的话价值不大
不如自己写

可以参考借鉴
所以不选用

2.2 STM32 通用 Bootloader RT_thread

在这里插入图片描述

在这里插入图片描述

功能虽好,但是不支持自由修改逻辑,芯片型号支持少
这一点很不灵活
所以不选用
但是可以学习一下这些功能,
师夷长技以制夷

2.3 rtthread新建工程

自己新建一个工程
然后添加修改
这样灵活性最大
方便维护扩展

软件方案组成
RT_thread+组件+用户逻辑

2.4 Quick bootloader

Quick bootloader 是一个用于快速制作bootloader的组件
在这里插入图片描述

在这里插入图片描述
组件可以裁剪使用
功能设计的挺全面的

获取组件
方式1: 通过 Env配置工具 或 RT-Thread studio 开启软件包,根据需要配置各项参数;
配置路径为 RT-Thread online packages -> system -> qboot
注意:
这个是带操作系统的,必然占用ROM大
所以放弃

2.5 FAT组件

在这里插入图片描述
在这里插入图片描述

2.6 SFUD

在这里插入图片描述
在这里插入图片描述

2.7 EasyFlash

在这里插入图片描述

2.8 理解

在这里插入图片描述
这张图很好理解
三者的关系

看到鸡汤喝点
在这里插入图片描述
人只要成功一次,就能换一顶帽子,

3. 新建工程开始操作

  • 参考链接
  • https://blog.youkuaiyun.com/qq_33591039/article/details/121562204

3.1 新建工程

在这里插入图片描述

3.2 构建编译

在这里插入图片描述
可以看到FLASH占用55K , RAM占用5K
需要裁剪

  • BOOT硬件
  • 硬件SPI四个引脚
  • 一个LED引脚

3.3 设置CubeMX

设置flash使用的SPI
设置LED使用的GPIO
设置 NVIC
RT-Thread 操作系统重定义
HardFault_Handler、PendSV_Handler、SysTick_Handler 中断函数,
为了避免重复定义的问题,在生成工程之前,需要在中断配置中,代码生成的选项中,
取消选择三个中断函数(
对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer)

3.4 解决报错

  • 关于SConscript 文件的修改网上有很多资料
  • 语法不深究

报错:
描述 资源 路径 位置 类型
fatal error: stm32l0xx_hal_exti.h: No such file or directory stm32l0xx_hal_conf.h /boot/cubemx/Inc 第 192 行 C/C++ 问题
问题:
CUBEMX是新版的,生成的hal_confg.h里面带了#include stm32f1xx_hal_exti.h
但是RTT里面的是库不是最新的,里面没有这个文件,所以就报错了
解决:
可以屏蔽掉或者找一个文件放进去
#ifdef HAL_EXTI_MODULE_ENABLED
// #include “stm32l0xx_hal_exti.h”
#endif /* HAL_EXTI_MODULE_ENABLED */

3.5 再次编译

在这里插入图片描述
可以看到资源占用挺大,需要裁剪

3.6 rt_thread setting

在这里插入图片描述

关掉不必要的系统设置
编译后大小
RAM: 3.59k
ROM: 13.9K
这个快14K了,资源占用太大了,这种方式放弃

3.7 优化等级

参考链接
https://gitee.com/rtthread/docs-online/blob/master/rt-thread-version/rt-thread-standard/application-note/system/optimization/Optimize-code-size/an0049-optimize-code-size.md

RT-Thread-Studio 使用的是 GCC 编译器,GCC 编译器对代码的编译优化有一系列的配置项,大体分为五个优化等级:-O0、-O1、-O2、-O3 和 -Os。

-O0:关闭所有优化选项,是 GCC 默认的等级,目的是让编译器减少编译时间并使调试产生预期的结果。在 RT-Thread-Studio 中,默认也是配置的该选项,如果编译的代码尺寸较大,我们建议更换优化等级(一般我们会选择 O2 等级)。

-O1:这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的,但一般这些任务肯定能顺利完成。

-O2:O1 的进阶。这是推荐的优化等级,除非你有特殊的需求。O2 会比 O1 启用更多的优化选项。当设置了 O2 等级后,编译器会试图增加编译的时间和提升生成代码的性能(我们一般选用此优化等级完成编译任务)。

-O3:这是最高的优化等级,O3 开启了 O2 指定的所有优化,并启用了更多的优化选项。例如构建用于保存变量的伪寄存器网络(使得调试更加困难)、优化循环执行过程等。开启 O3 优化不一定会减少代码尺寸,有可能会为了减少代码执行时间反而增加代码体积。一般我们不使用此优化等级。

-Os:该这个等级用来优化代码尺寸。其中启用了 O2 中不增加目标文件大小的优化选项。这对于磁盘空间极其紧张或者 CPU 缓存较小的机器非常有用。一般使用 O2 等级之后发现生成的目标文件尺寸偏大,可以尝试使用 Os 等级进一步的优化。下表是GCC 优化等级列表。

3.8 SEGGER RTT

  1. 开启
    在这里插入图片描述
  2. 解决编译错误

在这里插入图片描述

在这里插入图片描述

问题是RTT 设备驱动的问题
自己初始化就可以

3.9 屏蔽文件,添加文件

选中文件,右键,资源配置里面
排除构建或添加构建
RTT Excluded Resource RTT排除资源 取消勾选
在这里插入图片描述

取消这个打勾显示隐藏的文件

3.10 RTT输出

日志输出设置
在这里插入图片描述
初始化
在这里插入图片描述
测试输出
在这里插入图片描述
如果输出有异常,
记得拔掉J-LINK重新插上
记得拔掉J-LINK重新插上
记得拔掉J-LINK重新插上

  • 这个是自己初始化的
  • 如果使用官方的注册使用流程也可以

4.裸机bootloader

小熊派开发板移植RT-FOTA 前言 买了小熊派的开发板,将demo code验证完成之后就放下了。刚好最近工作也在做OTA相关的开发,发现自己对于升级的功能还不够了解,在码云找到了一位大神基于RTThread的RT-FOTA代码,基本与RTThread的BootLoader功能一致,闲来无事,将这个移植适配到小熊派开发板。 一、RT-FOTA介绍 码云仓库中的地址为 https://gitee.com/Aladdin-Wang/RT-FOTA-STM32L431 摘抄自仓库的readme: 为了能让开发者快速掌握 OTA 升级这把利器, 阅读详情

相关推荐

STM32 BootLoader 实战(三):串口 YMODEM 升级 APP 固件

本文以 STM32 BootLoader 串口 IAP 为例,讲解 YMODEM 协议数据包、首包解析、APP Flash 擦除写入、固件校验、APP 有效标志和升级主流程实现。

lidecong133的博客 1016

STM32通用Bootloader——FOTA

1.固件升级简述 固件升级,通常称为 OTA(Over the Air)升级或者 FOTA(Firmware Over-The-Air)升级,即固件通过空中下载进行升级的技术。 1.1 bootloader 升级模式 bootloader 的升级模式常见有以下两种: bootloader 分区 + app1 分区 + app2 分区模式 该模式下, bootloader 启动后,检查 app1 和 app2 分区,哪个固件版本最新就运行哪个分区的固件。当有新版本的升级固件时,固件下载程序会将新的固件下载到

sinat_31039061的博客 1万+

Nordic nrf52840蓝牙DFU实战:从密钥生成到固件升级全流程避坑指南

本文详细介绍了Nordic nRF52840蓝牙DFU(设备固件升级)的完整实战流程,涵盖密钥生成、Bootloader配置、固件打包与安全升级等核心步骤。文章深入解析了DFU背后的安全签名机制与多镜像协作原理,并提供了从环境搭建到问题排查的全流程避坑指南,帮助开发者构建稳定可靠的物联网设备远程更新系统。

wine的专栏 986

基于RT-Thread完整版搭建的极简Bootloader

项目背景Agile Upgrade: 用于快速构建 bootloader 的中间件。example文件夹提供 PC 上的示例特性适配RT-Thread官方固件打包工具 (图形化工具及命令行工具)使用纯 C 开发,不涉及任何硬件接口,可在任何形式的硬件上直接使用加密、压缩支持如下:AES256fastlzquicklz原生适配file及fal操作接口移植简单,实现自定义的后端只需...

rtthreadiotos的博客 2766

告别变砖!基于RT-Thread的BootLoader设计:如何用QBoot实现固件回滚与4G升级双保险

本文详细介绍了基于RT-Thread的QBoot双备份设计,为嵌入式设备提供固件升级的终极安全方案。通过4G远程固件升级和智能回滚机制,有效防止设备变砖,适用于野外基站、农业物联网等无人值守场景。文章涵盖硬件选型、存储分区规划、固件校验流程及4G网络优化策略,帮助开发者构建高可靠性的升级系统。

weixin_29161785的博客 356

PX4-bootloader功能及代码分析

PX4-bootloader

Vincent的博客 1639

【STM32F407】【三】OTA实战:Bootloader通过SPI驱动NM25Q128实现安全固件升级

本文详细介绍了基于STM32F407微控制器实现OTA安全固件升级的实战方案。通过SPI协议驱动NM25Q128 Flash芯片存储固件镜像,重点讲解Bootloader设计、SPI配置、Flash读写操作以及CRC校验等安全机制,确保远程升级的可靠性和设备安全性。

ik6789012的博客 410

STM32F103 IAP升级实战:HAL库下的Bootloader与APP跳转全解析

本文详细解析了STM32F103在HAL库环境下实现IAP升级的全过程,包括内存布局设计、中断向量表重定向、固件校验等核心环节。通过实战代码示例,展示了Bootloader与APP跳转的关键技术,帮助开发者快速掌握远程固件升级方案,提升工业级设备的维护效率。

weixin_30500105的博客 516

基于STM32实现OTA&BootLoader 第四章——三分区形式BootLoader程序设计

本文详细介绍了STM32单片机基于三分区架构的BootLoader设计与实现方案。主要内容包括:1)将Flash划分为BootLoader区(B区)和两个应用分区(A1、A2区),实现程序冗余备份;2)设计OTA升级流程,通过标志位管理实现安全升级和回滚机制;3)实现串口IAP功能,采用Xmodem协议进行程序传输和CRC校验;4)通过向量表重定位技术实现分区跳转。系统支持本地串口升级和远程OTA升级两种方式,确保在升级失败时仍能正常运行原有程序,提高了系统的可靠性和维护性。文中还提供了完整的代码实现方案和

Zevalin的博客 641

mOTA:面向MCU的轻量级高可靠OTA固件升级框架

嵌入式OTA(空中下载)是物联网设备生命周期管理的核心能力,其本质是在资源受限环境下实现安全、原子、可恢复的固件更新。原理上依赖分层架构设计、Flash分区策略与断电保护状态机,技术价值体现在极低内存开销、裸机/RTOS兼容性及工业级鲁棒性。典型应用场景包括STM32等Cortex-M系列MCU的远程维护、产线升级与灾难恢复。本文聚焦mOTA这一专为32位MCU优化的开源OTA框架,深入解析其Bootloader分层设计、双/三分区模型及‘再入Bootloader’机制,覆盖从固件打包、加密校验到断电续写全

weixin_42168902的博客 141

STM32F103C8T6基于YMODEM协议的IAP固件升级实战指南

本文详细介绍了基于STM32F103C8T6的IAP固件升级实战方案。通过规划Flash分区、集成YMODEM协议实现可靠串口传输,并拆解Bootloader核心代码,指导开发者完成从固件接收、校验到安全写入与跳转的全过程,为嵌入式设备提供稳定、可远程维护的升级能力。

rock5的博客 655

STM32H5 程序升级方案设计:基于 BootLoader

本文介绍了基于STM32H5的串口本地升级方案设计,重点阐述了BootLoader开发与Flash分区规划。方案采用PC端串口工具与STM32H5开发板进行固件传输,将Flash划分为BootLoader区、APP区和配置信息区。详细分析了CPU与Flash的地址映射关系,以及BootLoader引导应用程序的核心机制:通过设置异常向量表基地址、初始化栈指针和程序计数器,实现非起始地址应用程序的启动。该方案为理解嵌入式程序升级的底层逻辑提供了清晰的技术路径。

2502_90552706的博客 1046

HC32F460 IAP实战:从Bootloader设计到远程升级全解析

本文深入解析了基于HC32F460微控制器的IAP(在应用编程)实战方案,从Bootloader核心设计、Flash分区规划到应用程序配合与串口升级全流程。详细阐述了构建稳定可靠的远程固件升级功能的关键技术,包括跳转机制、通信协议、异常处理及防变砖策略,为嵌入式系统实现产品级OTA升级提供了完整参考。

weixin_29166013的博客 117

STM32f407VET6 IAP固件升级,bootloader+双APP区

简单的IAP技术是:boot分区+1个APP区;在升级的过程中,boot程序会把原先的APP区擦除,再把新的bin文件拷贝到APP区,完成升级;风险:在升级过程中突然断电,会导致原先的APP被擦除,新的APP未成功写入,设备变砖,无法通过预留的通信接口升级程序,只能程序烧录。考虑到这种风险:现在将flash分区划为3分区:boot区+APP1区+APP2区;APP1存储老固件;APP2存储新固件;总结:上述操作的目的是:保证flash上在同一时刻至少有1份可使用的APP;

yrx020307的博客 2086

STM32的开源Bootloader框架 RT-FOTA 移植

STM32的开源Bootloader框架 RT-FOTA 移植 文档对应的源码程序 https://blog.youkuaiyun.com/weixin_39946218/article/details/124491960

ArcGISPro应用指南:ArcGISPro制图全流程详解

本文介绍了基于ArcGIS Pro的地图制作基本流程,旨在帮助读者快速掌握从数据加载到地图输出的完整制图操作。文章首先简要概述了GIS技术在当今数据驱动时代的重要作用,并引出ArcGIS Pro作为专业GIS平台的优势与应用价值。随后,内容围绕地图制作的核心步骤展开,包括数据加载、布局创建、地图范围设置以及各类地图要素(如指北针、比例尺、图例、图名)的插入与样式调整。此外,还介绍了如何通过添加图形、文本及动态元素增强地图表达效果,并最终完成地图导出设置与文件输出格式的选择。

weixin_45812624的博客 1357

嵌入式固件升级实战:从ISP到IAP的BootLoader设计全解析

本文全面解析嵌入式固件升级中BootLoader的设计与实践,对比ISP和IAP两种程序下载方式,详细讲解分区设计、固件搬运流程及多重防变砖机制,并提供实战代码示例,帮助开发者实现安全可靠的远程固件升级。

m2n3o4p5的博客 190

Ubuntu 20.04下Cube-Studio云原生平台单机部署全攻略(附避坑指南)

本文详细介绍了在Ubuntu 20.04系统上单机部署Cube-Studio云原生平台的完整流程,包括环境准备、Docker配置、Rancher与Kubernetes集群部署以及Cube-Studio核心组件安装。特别提供了官方文档未涵盖的实战技巧和常见问题解决方案,帮助开发者高效完成部署并避免常见陷阱。

weixin_29313423的博客 464

探索STM32 IAP程序:从Bootloader到APP与上位机

STM32 IAP程序源代码,包含bootloader源码,APP源码,上位机源码(C#)。稳定可用。此代码基于STM32标准库。Bootloader占用8KB。在嵌入式开发领域,STM32以其强大的性能和丰富的资源备受开发者青睐。今天咱就来聊聊STM32的IAP(In - Application Programming)程序,这可是实现设备固件远程升级等功能的关键技术。咱手上这套代码那是基于STM32标准库,稳定可用,还包含了Bootloader源码、APP源码以及上位机源码(用C#写的哦)。

eniETIUz的博客 352

15、分布式参数热交换器:建模、动态特性与控制

本文综述了分布式参数热交换器的建模、动态特性和控制方法。从热交换器的基本方程推导出发,探讨了一维流动、流动强迫、错流、螺旋和旋转再生式热交换器的建模方法,并分析了其动态行为和频率响应中的共振现象。同时,介绍了热交换器的模拟方法,包括数值模拟和近似方法,并讨论了多种控制策略,如常规控制、最优控制、数字控制以及自适应控制。最后,总结了热交换器研究的发展历程,并展望了未来的研究方向,包括建模精度提升、控制算法优化和跨学科融合等。

w8x9y0z1的博客 123

RFC 字符码转换深度解析:Unicode、非 Unicode 与 MDMP 系统的协奏

老版本 MDMP 系统不上传自定义映射时,Unicode 端会落回“预配置列表”。列表里可见西欧 1100、日文 8000、中文 8400 等经典编号。若需强制覆写映射,可在 SM59 ➡Unicode页签启用,或直接勾选作为兜底。字符编码问题常“潜伏”多年,一旦旧系统升级或新增语种便集中爆发。掌握 RFC code page 转换机理、灵活运用 SM59 选项、在早期对 LANG 字段和字段长度进行治理,是根治乱码与 short dump 的关键。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 224
上一篇: SFUD之W25Q16
下一篇: 【快速笔记】freeRTOS
Long-Run
博客等级 码龄3年 4600粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值