对于我刚开始工作的项目,我需要用 C 语言编写一个固件,让我可以启动到两个不同的固件版本。任务是能够使用带有 Intel .hex 文件的 RS485 端口在现场更新包含 STM 的设备。我的想法是将两个固件版本放在闪存中指定的起始地址,包括某种校验和以确保数据完整性。根据参考手册中的闪存模块组织,我的第一个想法是将一个版本放入扇区 10(从 0x080C0000 开始),将另一个版本放入扇区 11(从 0x080E0000 开始)。每次复位后,STM32 应该启动到“bootmanager”,这只是决定扇区 10 或扇区 11 中的固件是较新版本的最少代码。我想在下图中阐明我的想法:
每个扇区的 128kBytes 就足够了。到目前为止,我能够将单字节写入闪存并在之后读取它们。另外,我已经使用 RS485 建立了一个工作的 UART 通信。
我的问题
- 我可以直接将 .hex 文件写入 Flash 中,无需修改,例如
:020000040800F2
:1000000002200B
ETC?
由于我对跳转不熟悉:我应该如何执行从“bootmanager”到扇区 5 固件的跳转?地址是否自动相对于扇区 5 的入口点?
你能给我关键词或告诉我,我会遇到什么挑战吗?
*编辑:我知道 STM 本身包含一个引导加载程序。不幸的是,RS485 设备硬连线到 USART2 使用的 GPIO 引脚。根据参考手册,内部bootloader只能被USART1和USART3、CAN2和USB OTG FS使用