STM32 Customer BootLoader 刷新项目 (二) 方案介绍
STM32 Customer BootLoader 刷新项目 (二) 方案介绍
文章目录
- STM32 Customer BootLoader 刷新项目 (二) 方案介绍
- 1. 需求分析
- 2. STM32 Memery介绍
- 3. BootLoader方案介绍
- 4. 支持指令
1. 需求分析
首先在开始编程之前,我们先详细设计一下BootLoder的方案。
本项目做的BootLoader是在STM32自带的启动一级boot上加了一层,即为二级Boot,其是专门为客户自定义的启动过程中操作软件的后门。主要作用是更新MCU中的软件,在正常启动过程中,CB刷新整个控制器中的软件。
整个软件的代码块如下图所示,最下一层是SB(ST自带的Boot),这里面初始化异常向量表,初始化堆栈和RAM。
第二层是CB(客户定制化的Boot),这里面主要是执行客户所定义的启动逻辑,其中包括刷新整个控制器中的软件,获取软件版本号,擦除指定Sector的代码,使能读/写Flash保护,跳转到指定地址。还可以根据需求进行定制化实现。
第三层是APP应用,是实现控制器中的控制逻辑。
下图是CB的架构图,整个刷新和操作MCU都是通过USART来操作,其中USART1是主要和MCU进行通信、刷新和发送命令的串口,而USART2是Debug 端口,只在调试的时候使用用来输出打印信息,开发阶段完成后,USART2则不再使用。
2. STM32 Memery介绍
对于实现客户化的BootLoader,对于整个Flash空间,可以从下图中看出,地址范围是0x0800 0000-0x080F FFFF,再看下图中Table 5中,可以看出Sector 0-11,我们选中Sector 0-1作为Customer BootLoader的地址空间,即0x0800 0000-0x0800 7FFFF。剩下Application的地址空间为Sector 2-11。执行完ST的Boot后,跳转到Customer BootLoader,再CB中执行完相应的客户化操作,再跳转到Application,执行应用层程序。
3. BootLoader方案介绍
上面介绍了Memory的内存分配,下面我们可以更加详细的看出三块应用的程序Flash的分配。
板子MCU一上电先从STM32里面的ST BootLoader中先启动,进行异常向量表的初始化和堆栈初始化。后续跳转到Customer BootLoader所在的地址,即为0x0800 0000,通过相应的判断条件进入CB,执行相应的客户化指令。若没有客户的条件,则跳转至应用层程序Application。
下图则是在CB中的跳转逻辑,将Flash中的程序Aliasing映射到0x0000 0000地址处,实际是从0地址开始启动,0地址存放MSP的栈指针,其中offset 0x0000 0004则为存放PC指针跳转地址,程序执行到此处则开始跳转到相应地址区间。
下图为整个Customer BootLoader中的跳转逻辑,下一篇文章将详细介绍整个Customer BootLoader的程序编写过程。
4. 支持指令
下面是整个Customer BootLoader支持的指令,其中比较重要的是0x55(BL跳转固定地址),0x56(指定擦除扇区),0x57(在不同内存写数据)。后续将详细介绍整个Customer BootLoader的方案实现和代码实现。
主机发送 | 命令码 | BootLoader回复 | 备注 |
---|---|---|---|
BL_GET_VER | 0x51 | BootLoader版本号(1 byte) | 从MCU中读BootLoader的版本号 |
BL_GET_HELP | 0x52 | 所有支持的命令码(10 bytes) | 列出BootLoader支持的所有命令 |
BL_GET_CID | 0x53 | Chip identification number(2 bytes) | 读芯片的识别号 |
BL_GET_RDP_STATUS | 0x54 | 返回芯片读保护等级(1 byte) | 读行骗Flash的读保护等级 |
BL_GO_TO_ADDR | 0x55 | 返回成功或错误(1 byte) | BL跳转固定地址 |
BL_FLASH_ERASE | 0x56 | 返回成功或错误(1 byte) | 指定擦除扇区 |
BL_MEM_WRITE | 0x57 | 返回成功或错误(1 byte) | 在不同内存写数据 |
BL_EN_R_W_PROTECT | 0x58 | 返回成功或错误(1 byte) | 使能读/写保护 |
BL_MEM_READ | 0x59 | 主机请求的内存内容长度 | TO DO |
BL_READ_SECTOR_STATUS | 0x5A | 所有Sector状态 | 读所有扇区的保护状态 |
BL_OTP_READ | 0x5B | OTP contents | TO DO |
BL_DIS_R_W_PROTECT | 0x5C | 返回成功或错误(1 byte) | 该命令用于禁用用户Flash的不同扇区的读写保护功能。该命令将保护状态恢复为默认状态。 |
您的支持是我最大的动力!
系列BootLoader文章:
STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建
相关文章:

STM32 Customer BootLoader 刷新项目 (二) 方案介绍
STM32 Customer BootLoader 刷新项目 (二) 方案介绍 文章目录 STM32 Customer BootLoader 刷新项目 (二) 方案介绍1. 需求分析2. STM32 Memery介绍3. BootLoader方案介绍4. 支持指令 1. 需求分析 首先在开始编程之前,我们先详细设计一下BootLoder的方案。 本项目做…...

2-14 基于matlab的GA优化算法优化车间调度问题
基于matlab的GA优化算法优化车间调度问题。n个工作在m个台机器上加工。已知每个工作中工序加工顺序、各工序的加工时间以及每个工件所包含的工序,在满足约束条件的前提下,目的是确定机器上各工件顺序,以保证某项性能指标最优。程序功能说明&a…...

Program-of-Thoughts(PoT):结合Python工具和CoT提升大语言模型数学推理能力
Program of Thoughts Prompting:Disentangling Computation from Reasoning for Numerical Reasoning Tasks github:https://github.com/wenhuchen/Program-of-Thoughts 一、动机 数学运算和金融方面都涉及算术推理。先前方法采用监督训练的形式,但这…...

ansible setup模块
用于收集有关目标主机的系统和网络信息,并将这些信息存储为一个facts变量,可以在Playbook的后续任务中使用。setup模块可以用来获取主机的操作系统、软件包、IP地址、内存、磁盘和其他硬件信息。这些信息对编写Playbook和进行条件判断非常有用。当你在Pl…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的测试用例执行计划(100分) - 三语言AC题解(Python/Java/Cpp)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 https://app5938.acapp.acwing.com.cn/contest/2/problem/OD…...

NSIS 入门教程 (一)
介绍 大多数应用程序都附带一个安装程序,它将所需的文件复制到正确的文件夹中,创建注册表项,并提供卸载例程以(希望)从计算机中彻底删除应用程序. 有多种解决方案可以为自主开发的应用程序配备安装程序。除了Install …...

cve-2015-3306-proftpd-vulfocus
1.原理 proftp是用于搭建基于ftp协议的应用软件 ProFTPD是ProFTPD团队的一套开源的FTP服务器软件。该软件具有可配置性强、安全、稳定等特点。 ProFTPD 1.3.5中的mod_copy模块允许远程攻击者通过站点cpfr和site cpto命令读取和写入任意文件。任何未经身份验证的客户端都可以…...

超详细!想进华为od的请疯狂看我!
三分钟带你全面了解华为OD 【合同及管理】签约方为科锐国际/外企德科(人力服务公司),劳动合同期为4年,试用期6个月。员工关系合同管理、五险一金、考勤发薪由科锐国际/外企德科负责;定级定薪、员工培训、工作安排、绩…...

MQTT协议与TCP/IP协议在性能上的区别
MQTT协议与TCP/IP协议在性能上的区别主要体现在以下几个方面: 1.协议开销与传输效率: ① MQTT:MQTT协议针对消息传递进行了优化,使用了小型的控制包和变长的包头设计,极大程度地减少了数据传输过程中的冗余和带宽消耗…...

LeetCode 每日一题 2024/6/17-2024/6/23
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 6/17 522. 最长特殊序列 II6/18 2288. 价格减免6/19 2713. 矩阵中严格递增的单元格数6/20 2748. 美丽下标对的数目6/21 LCP 61. 气温变化趋势6/22 2663. 字典序最小的美丽字…...

FlinkCDC pipeline模式 mysql-to-paimon.yaml
flinkcdc 需要引入: source端: flink-cdc-pipeline-connector-mysql-xxx.jar、mysql-connector-java-xxx.jar、 sink端: flink-cdc-pipeline-connector-paimon-xxx.jar flinkcdc官方提供connect包下载地址,pipeline模式提交作业和…...

mysql数据库入门手册
数据库 常见的数据库查看当前用户及其权限创建用户授权用户访问数据库撤销用户权限修改用户密码删除用户增创建一个数据库创建表表中插入数据表中添加字段(三种方式) 删删除表记录删除表字段删除表(三种方式)删除数据库 改修改表名…...

增强大型语言模型(LLM)可访问性:深入探究在单块AMD GPU上通过QLoRA微调Llama 2的过程
Enhancing LLM Accessibility: A Deep Dive into QLoRA Through Fine-tuning Llama 2 on a single AMD GPU — ROCm Blogs 基于之前的博客《使用LoRA微调Llama 2》的内容,我们深入研究了一种称为量化低秩调整(QLoRA)的参数高效微调࿰…...

空间复杂度 线性表,顺序表尾插。
各位少年,大家好,我是那一脸阳光,本次分享的主题是时间复杂度和空间复杂度 还有顺序表文章讲解和分享,如有不对可以评论区指导。 时间复杂度例题 // 计算斐波那契递归Fib的时间复杂度? long long Fib(size_t N){if(N…...

linux创建用户、切换用户、删除用户
创建用户 # 创建新用户 sudo useradd newuser# 设置新用户的密码 sudo passwd newuser切换用户 # 切换到新用户 su newuser# 验证用户切换 whoami 删除用户 # 删除用户 sudo userdel -r username# 验证用户是否已被删除 grep username /etc/passwd 如果删除用户时提示&…...

BC64 牛牛的快递(c++)
牛牛的快递 题目描述输入描述输出描述示例代码 解题思路例如 题目描述 牛牛正在寄快递,他了解到快递在 1kg 以内的按起步价 20 元计算,超出部分按每 kg 1元计算,不足 1kg 部分按 1kg计算。如果加急的话要额外付五元,请问牛牛总共要…...

离线linux通过USB连接并使用手机网络
离线linux通过USB连接并使用手机网络 引场景 引 离线环境要安装一些软件特别麻烦,要自己去官网下载对应的包,然后上传到服务器上,再解压,编译,执行,配置变量等等,错一步都可能安装失败。有网络…...

I2C总线8位IO扩展器PCF8574
PCF8574用于I2C总线的远程8位I/O扩展器 PCF8574国产有多个厂家有替代产品,图示为其中一款HT8574 1 产品特点 低待机电流消耗:10 uA(最大值) I2C 转并行端口扩展器 漏极开路中断输出 与大多数微控制器兼容 具有大电流驱动能力的闭…...

webClient + fastJSON2 获取json格式的数据,同时解析至java class 并 下划线转驼峰
webClient中 .accept(MediaType.APPLICATION_JSON) 决定返回值是什么格式一般情况可以不写,但这里要获取JSON格式的 .bodyToMono(String.class)指定返回类型 fastJSON2中 Student student JSON.parseObject(result, Student.class, JSONReader.Feature.SupportSm…...

4、SpringMVC 实战小项目【加法计算器、用户登录、留言板、图书管理系统】
SpringMVC 实战小项目 3.1 加法计算器3.1.1 准备⼯作前端 3.1.2 约定前后端交互接⼝需求分析接⼝定义请求参数:响应数据: 3.1.3 服务器代码 3.2 ⽤⼾登录3.2.1 准备⼯作3.2.2 约定前后端交互接⼝3.2.3 实现服务器端代码 3.3 留⾔板实现服务器端代码 3.4 图书管理系统准备后端 3…...

OpenCV--形态学
形态学 形态学图像全局二值化自适应阈值腐蚀操作膨胀开运算闭运算形态学梯度顶帽操作黑帽操作 形态学 从图像中提取对表达和描绘区域形状有意义的图像分量 图像全局二值化 import cv2 import numpy as np """ 图像全局二值化--0与255 二值化的主要目的是通过…...

【LinuxC语言】IP地址相关的函数
文章目录 前言inet_addr()inet_aton()inet_ntoa()示例代码总结前言 在Linux C语言编程中,处理网络通信是一个核心主题,其中涉及到的IP地址相关函数扮演着至关重要的角色。这些函数允许我们在不同的网络层次上操作和管理IP地址,从而实现有效的数据传输和通信控制。本文将介绍…...

QT事件处理系统之五:自定义事件的发送案例 sendEvent和postEvent接口
1、案例 双击窗口,会发送 自定义事件,然后在事件过滤中心进行拦截处理自定义事件。 2、核心代码 /*解释:双击窗口时,将产生双击事件,然后该事件被包裹成一个对象,随后将会被发往event事件中心,然后进行事件的处理(Widget对象);因为m_lineEdit开启了事件过滤机制,所…...

模版与策略模式
一,怎么选择 如果需要固定的执行流程,选模版 如果不需要固定的执行流程,只需要对一个方法做具体抽象,选策略 参考文章: 常用设计模式汇总,告诉你如何学习设计模式 二,常用写法 子类 exten…...

SQL-Python
师从黑马程序员 数据库介绍 数据库就是存储数据的库 数据组织:库->表->数据 数据库和SQL的关系 MySQL的基础命令 SQL基础 SQL语言的分类 SQL的语法特征 DDL-库管理 show DATABASES;use sys;SELECT database();CREATE DATABASE test CHARSET utf-8;SHOW D…...

mysql索引以及优化
索引的作用 在数据库表中对字段建立索引可以大大提高查询速度 mysql索引类型 普通索引唯一索引: 唯一索引列的值必须唯一允许有空值,如果是组合索引,则列值的组合必须唯一create unique index indexName on mytable(username(length))修改表结…...

【pytorch06】 维度变换
常用API view/reshapesqueeze/unsqueezetranspose/t/permuteexpand/repeat view和reshape view操作的基本前提是保证numel()一致 a.view(4,28*28)的物理意义是把行宽以及通道合并在一起,对于4张图片,我们直接把所有数据都合在一起,用一个7…...

移动Web开发实战内容要点!!!
移动web开发 目录 移动web开发 第一章、Web开发标准与网页网站制作介绍 1.1Web开发标准 1.2网页基本构成元素 第二章、Web开发技术基础 2.1HTML的主要特点: 2.2HTML基本知识 2.3CSS样式 2.4JavaScript 第三章、打造移动Web应用程序 3.1为什么Android会成…...

spdlog生产者消费者模式
spdlog生产者消费者模式 spdlog提供了异步模式,显示的创建async_logger, 配合环形队列实现的消息队列和线程池实现了异步模式。异步logger提交日志信息和自身指针, 任务线程从消息队列中取出消息后执行对应的sink和flush动作。 1. 环形队列 1.1 环形队…...

日语 13 14
13. スピーチの依頼 いらい 自信 自信 自信 自信 自信 じしん 折り入って 折り入って 折り入って おりいって 诚恳 頼み 頼み 頼み 頼み 頼み たのみ 请求 整備 整備 整備 整備 整備 せいび 维修 肥満 肥満 肥満 肥満 肥満 ひまん 肥胖 権利 …...