STM32 F407VG 启动到不同的(主要)应用程序
STM32 F407VG Boot into different (main-)applications
对于我刚刚开始的项目,我需要用 C 编写一个固件,让我可以启动到两个不同的固件版本。任务是能够使用带有 Intel .hex 文件的 RS485 端口在现场更新包含 STM 的设备。我的想法是将两个固件版本放在闪存中指定的起始地址,包括某种数据完整性校验和。根据参考手册中的闪存模块组织,我的第一个想法是将一个版本放入扇区 10(从 0x080C0000 开始),将另一个版本放入扇区 11(从 0x080E0000 开始)。每次重置后,STM32 应该启动到“引导管理器”,这只是决定扇区 10 或扇区 11 中的固件是较新版本的最小代码。我想在下图中阐明我的想法:
[大致过程][1]
[1]: https://i.stack.imgur.com/xLowh.png
每个扇区的128kBytes足够了。到目前为止,我能够将单个字节写入闪存并在之后读取它们。此外,我已经使用 RS485 设置了一个可用的 UART 通信。
我的问题
- 我可以直接将.hex文件直接写入Flash中,不加修改吗
:020000040800F2
:1000000002200B
等?
由于我对跳转没有经验:我应该如何执行从“bootmanager”到扇区 5 固件的跳转?地址是否自动相对于扇区 5 中的入口点?
能不能给个关键词或者告诉我,我会遇到什么挑战?
*编辑:我知道 STM 本身包含一个引导加载程序。不幸的是,RS485 设备硬连线到 USART2 使用的 GPIO 引脚。根据参考手册,内部bootloader只能用于USART1和USART3,CAN2和USB OTG FS
大多数 STM32 微控制器都支持双内存组和动态更新(参见 AN4767 - On-the-fly firmware update for dual bank STM32 microcontrollers)
这将允许完全按照您的要求执行。
通常微控制器需要有一个引导加载程序和 2 个镜像库。
启动时,引导加载程序将启动并检查它必须启动哪个版本并相应地设置起始地址。
此应用说明适用于 F7 系列,但您可以查看它以了解它如何适用于您的特定微控制器(参见 AN4826 - STM32F7 Series Flash memory dual bank mode)。
关于您的问题:
- 代码会像往常一样写两次(或 2 个不同的固件)
- 查看引用的应用笔记和关键字,例如:双银行、即时更新、DFU 等
Can I just write the .hex file into the Flash as it is without
modification like
不,你不能。您需要修改链接描述文件以将其存档
您需要将整个两个应用程序都放在 FLASH 中,因此将其分成 50/50%。
如果两个镜像都损坏了,我通常会添加一些串行FLASH来备份固件。
您需要编写自定义引导加载程序。
对于我刚刚开始的项目,我需要用 C 编写一个固件,让我可以启动到两个不同的固件版本。任务是能够使用带有 Intel .hex 文件的 RS485 端口在现场更新包含 STM 的设备。我的想法是将两个固件版本放在闪存中指定的起始地址,包括某种数据完整性校验和。根据参考手册中的闪存模块组织,我的第一个想法是将一个版本放入扇区 10(从 0x080C0000 开始),将另一个版本放入扇区 11(从 0x080E0000 开始)。每次重置后,STM32 应该启动到“引导管理器”,这只是决定扇区 10 或扇区 11 中的固件是较新版本的最小代码。我想在下图中阐明我的想法: [大致过程][1] [1]: https://i.stack.imgur.com/xLowh.png
每个扇区的128kBytes足够了。到目前为止,我能够将单个字节写入闪存并在之后读取它们。此外,我已经使用 RS485 设置了一个可用的 UART 通信。
我的问题
- 我可以直接将.hex文件直接写入Flash中,不加修改吗
:020000040800F2
:1000000002200B
等?
由于我对跳转没有经验:我应该如何执行从“bootmanager”到扇区 5 固件的跳转?地址是否自动相对于扇区 5 中的入口点?
能不能给个关键词或者告诉我,我会遇到什么挑战?
*编辑:我知道 STM 本身包含一个引导加载程序。不幸的是,RS485 设备硬连线到 USART2 使用的 GPIO 引脚。根据参考手册,内部bootloader只能用于USART1和USART3,CAN2和USB OTG FS
大多数 STM32 微控制器都支持双内存组和动态更新(参见 AN4767 - On-the-fly firmware update for dual bank STM32 microcontrollers)
这将允许完全按照您的要求执行。
通常微控制器需要有一个引导加载程序和 2 个镜像库。 启动时,引导加载程序将启动并检查它必须启动哪个版本并相应地设置起始地址。
此应用说明适用于 F7 系列,但您可以查看它以了解它如何适用于您的特定微控制器(参见 AN4826 - STM32F7 Series Flash memory dual bank mode)。
关于您的问题:
- 代码会像往常一样写两次(或 2 个不同的固件)
- 查看引用的应用笔记和关键字,例如:双银行、即时更新、DFU 等
Can I just write the .hex file into the Flash as it is without modification like
不,你不能。您需要修改链接描述文件以将其存档
您需要将整个两个应用程序都放在 FLASH 中,因此将其分成 50/50%。
如果两个镜像都损坏了,我通常会添加一些串行FLASH来备份固件。
您需要编写自定义引导加载程序。