1. OTA升级与BootLoader基础概念
大家好,今天我们来聊聊STM32的OTA升级,特别是BootLoader分区设计和W25Q64存储方案。我自己在做物联网项目时,经常遇到设备固件需要远程更新的情况,OTA(Over-The-Air)升级就成了必备技能。简单说,OTA就是通过无线方式给设备刷写新固件,而BootLoader就是那个在设备启动时负责引导和升级的关键程序。
如果你用的是STM32F103这类芯片,Flash空间有限(比如64KB),BootLoader的设计就得精打细算。通常,我们会把Flash分成两个区:BootLoader区(B区)和应用程序区(A区)。B区负责检查升级标志、接收新固件,并跳转到A区执行;A区则是用户真正的应用程序。这里有个坑:STM32的Flash擦写次数有限(约1万次),所以频繁升级可能会损坏Flash。这时候,外挂存储芯片 like W25Q64(SPI Flash)就成了救星——它容量大、价格低,还能分担主Flash的擦写压力。
实际项目中,我更喜欢用W25Q64存升级标志和固件数据,而不是EEPROM。为啥?因为W25Q64便宜又好买,虽然寿命比EEPROM短些(10万次 vs 100万次),但对于大多数物联网设备来说完全够用。比如,我在一个智能插座项目里,用W25Q64的第一个Block存升级标志和版本号,后面几个Block存固件数据,稳得一匹。
2. BootLoader分区设计与跳转逻辑
BootLoader的分区设计是OTA的核心。以STM32F103C8T6(64KB Flash)为例,我通常这样分区:
- B区(BootLoader区):占用前20KB(0x08000000 - 0x08005000),负责系统初始化、升级检查和跳转。
- A区(应用程序区):占用剩余44KB(0x08005000 - 0x0800E000),存放用户程序。
分区不是随便划的,得考虑Flash的页大小(STM32F103是1KB/页)和中断向量表偏移。B区太小可能功能不全,太大又浪费A区空


271

被折叠的 条评论
为什么被折叠?



