目录
1.Bootloader升级流程:
(一)检查 Flag值
(二)解密与转移固件
(三)备份当前 APP
(四)搬移固件到片上Flash
(五)跳转与确认
2.硬件架构:
模块介绍:
架构图:
4.软件架构:
Bootloader:
5.更新后的Bootloader升级流程:
1.Bootloader升级流程:
(一)检查 Flag值
1.在Bootloader启动过程中,首先检查EEPROM上的Flag值。如果Flag值表示固件已经完整地存放在外部Flash的A区域,那么Bootloader 开始执行升级操作。
2.这个检查过程确保了只有在有合法的升级请求时才进行后续的复杂操作,提高了系统的稳定性和安全性。
(二)解密与转移固件
1.Bootloader将A区域的固件一部分一部分地解密并放到B区域。由于SRAM一般很小,不可能装下一整个固件,所以采用每次处理1K的方式,与Flash的擦除单位相匹配,提高了操作的效率和灵活性。
2.这个过程需要确保解密算法的正确性和安全性,防止固件被恶意篡改或窃取。
(三)备份当前 APP
1.将当前内部正常运行的APP存入A区域,覆盖掉原来的A区域,作为备份区域。这样在升级出现问题时,可以恢复到之前的版本,提高了系统的可靠性和可恢复性。
2.备份过程需要确保数据的完整性和准确性,避免备份数据损坏导致无法恢复。
(四)搬移固件到片上Flash
1.接着将B区域的已解密固件搬移到STM32 的片上Flash的APP区域。这个过程需要确保数据的正确传输和存储,避免出现数据丢失或错误。
2.搬移完成后,将Flag修改,表明可升级的固件已经迁移到内部Flash,防止下次重启再次进行不必要的迁移操作。
(五)跳转与确认
1.最后,进行跳转至片上flash的APP区域,进入APP后,再次修改Flag,确认已经启动成功。这个过程确保了系统能够正常启动并运行新的固件版本。
2.跳转和确认过程需要确保系统的稳定性和正确性,避免出现启动失败或异常情况。
2.硬件架构:
模块介绍:
Stm32F411CEU6:用于存放Bootloader代码和APP的主控芯片
Key:用于实现App和Bootloader切换逻辑模块
Led:用于演示App代码运行成功
Ch340:用于实现MCU与PC之间通信的中间模块
PC:使用相关上位机软件进行控制和下载芯片
Jlink:下载代码和Trace调试
W25Q64:存放下载备份App的代码
HC05:实现远程升级的必备工具,于PC端实现蓝牙通信
AT24C02:用来存放部分标志位信息,版本信息等
架构图:
4.软件架构:
Bootloader:
Key_Detect:用于上电时检测Bootloader是否进入下载模式
Download_logic:用于管理整个下载流程
Ymodem:基于上位机与MCU之间的通信协议
Gpio:外设寄存器层
Uart:外设寄存器层
Flash:外设寄存器层
W25Q_Driver:存放官方W25Q驱动库
W25Q_Handler:基于升级流程与W25Q之间的协议
AT24C02_Driver:存放Eeprom的驱动库