IAP升级学习复习笔记
目录
[1. 让目标板进入Bootloader](#1. 让目标板进入Bootloader)
[2. 发送固件并烧录](#2. 发送固件并烧录)
[3. 让目标板进入APP](#3. 让目标板进入APP)
[1. 中控(设备地址 01H)](#1. 中控(设备地址 01H))
[2. 开关量模块(SWITCH,设备地址 01H)](#2. 开关量模块(SWITCH,设备地址 01H))
[3. 环境监测模块(ENV_MONITOR,设备地址 02H)](#3. 环境监测模块(ENV_MONITOR,设备地址 02H))
[4. 温湿度模块(TEMP_HUMI,设备地址 03H)](#4. 温湿度模块(TEMP_HUMI,设备地址 03H))
[1. 启动流程](#1. 启动流程)
[2. 处理启动命令](#2. 处理启动命令)
[3. 处理文件块(使用Modbus "Write File Record")](#3. 处理文件块(使用Modbus “Write File Record”))
[1. 实时烧录与回复](#1. 实时烧录与回复)
[2. 命令执行的顺序](#2. 命令执行的顺序)
一、Flash划分
中控和传感器的Flash空间需要合理划分,分别存放Bootloader、APP和配置信息。配置信息用于保存APP版本、大小、校验码等,决定启动时进入Bootloader还是APP。
中控(STM32H563RIV,2MB Flash)
-
Bootloader:256KB(地址 0x0800 0000 ~ 0x0803 FFFF)
-
APP:1784KB(地址 0x0804 0000 ~ 0x081F DFFF)
-
配置信息:8KB(最后一个扇区,地址 0x081F E000 ~ 0x081F FFFF)
传感器(STM32F030CC,256KB Flash)
-
Bootloader:128KB(地址 0x0800 0000 ~ 0x0801 FFFF)
-
APP:126KB(地址 0x0802 0000 ~ 0x0803 F7FF)
-
配置信息:2KB(最后一个扇区,地址 0x0803 F800 ~ 0x0803 FFFF)
图片6说明:此处应有Flash划分示意图,清晰标出各区域起始地址和大小,便于直观理解。
二、升级流程
升级分为三步:1. 进入Bootloader → 2. 发送固件并烧录 → 3. 进入APP 。
升级对象不同(中控或传感器),流程略有差异。
1. 让目标板进入Bootloader
-
升级中控:上位机直接给中控发命令。若中控正在运行APP,则写配置信息标记"进入Bootloader",然后软件复位。重启后Bootloader读到标记,保持在Bootloader等待升级。
-
升级传感器:上位机将命令发给中控(中控此时必须运行APP,因为APP功能更强,能转发命令),中控再转发给传感器。传感器若在APP中,同样写配置信息并复位,保持在Bootloader。
注意:升级传感器时,中控必须处于APP状态,以便转发数据和命令;升级中控时,中控自己需处于Bootloader状态。
2. 发送固件并烧录
上位机将固件分包发送,目标板每收到一个文件块就立即写入Flash,并回复结果。这样上位机可实时知道烧录是否成功。
3. 让目标板进入APP
固件发送完毕后,上位机发送"进入APP"命令。目标板写配置信息标记"启动APP",软件复位,Bootloader读取标记后跳转到APP执行。
时序图对比

cs
上位机 → 中控Bootloader
1. 发送启动命令
2. 回复启动命令
3. 执行启动命令(保持Bootloader)
1. 发送文件块
2. 烧录Flash
3. 回复文件块
...(重复直到发送完毕)
最后发送"进入APP"命令,中控复位启动APP

cs
上位机 → 中控APP → 传感器Bootloader
1. 发送启动命令
2. 转发启动命令
3. 回复启动命令(传感器→中控)
4. 回复启动命令(中控→上位机)
4. 执行启动命令(传感器保持Bootloader)
1. 发送文件块
2. 转发文件块
3. 烧录Flash
4. 回复文件块(传感器→中控)
5. 回复文件块(中控→上位机)
...(重复)
最后发送"进入APP"命令,传感器复位启动APP
三、点表:增加命令寄存器
所有设备(中控、开关量模块、环境监测模块、温湿度模块)统一增加一个AO(4x)寄存器 ,地址为0000H,用于接收升级命令:
-
写入
0x55:启动Bootloader -
写入
0xAA:启动APP
各模块的完整寄存器说明如下(设备地址区分不同模块):
1. 中控(设备地址 01H)
| 寄存器地址 | 类别 | 用途 | 描述 |
|---|---|---|---|
| 0000H | DI | 控制LED1 | 1-亮 |
| 0000H | AO | 升级命令寄存器 | 写入0x55启动Bootloader,0xAA启动APP |
2. 开关量模块(SWITCH,设备地址 01H)
| 寄存器地址 | 类别 | 用途 | 描述 |
|---|---|---|---|
| 0000H | DI | 读取按键KEY1 | 1-被按下 |
| 0001H | DI | 读取按键KEY2 | 1-被按下 |
| 0002H | DI | 读取按键KEY3 | 1-被按下 |
| 0000H | DO | 控制继电器1 | 1-吸合 |
| 0001H | DO | 控制继电器2 | 1-吸合 |
| 0002H | DO | 控制LED1 | 1-亮 |
| 0003H | DO | 控制LED2 | 1-亮 |
| 0004H | DO | 控制LED3 | 1-亮 |
| 0000H | AO | 升级命令寄存器 | 同上 |
3. 环境监测模块(ENV_MONITOR,设备地址 02H)
| 寄存器地址 | 类别 | 用途 | 描述 |
|---|---|---|---|
| 0000H | DO | 控制蜂鸣器1 | 1-响 |
| 0001H | DO | 控制蜂鸣器2 | 1-响 |
| 0002H | DO | 控制LED1 | 1-亮 |
| 0003H | DO | 控制LED2 | 1-亮 |
| 0004H | DO | 控制LED3 | 1-亮 |
| 0000H | AI | 读取光敏电压 | 0xfff对应3.3V,12位精度 |
| 0001H | AI | 读取可调电阻电压 | 0xfff对应3.3V,12位精度 |
| 0000H | AO | 升级命令寄存器 | 同上 |
4. 温湿度模块(TEMP_HUMI,设备地址 03H)
| 寄存器地址 | 类别 | 用途 | 描述 |
|---|---|---|---|
| 0000H | DO | 控制蜂鸣器1 | 1-响 |
| 0001H | DO | 控制蜂鸣器2 | 1-响 |
| 0002H | DO | 控制LED1 | 1-亮 |
| 0003H | DO | 控制LED2 | 1-亮 |
| 0004H | DO | 控制LED3 | 1-亮 |
| 0000H | AI | 读取温度 | 单位0.1℃,16位有符号整数 |
| 0001H | AI | 读取湿度 | 单位0.1%RH,16位有符号整数 |
| 0000H | AO | 升级命令寄存器 | 同上 |
说明:此处应有系统任务交互图,展示PC通过USB串口与多个任务(任务1~4)通信,任务分别负责读取开关量传感器按键、更新DI寄存器,将DO值发送给各传感器,以及读取环境监测和温湿度传感器的ADC值更新AI寄存器。该图形象说明了点表中寄存器如何被周期性地读写。
四、Bootloader软件设计
Bootloader的核心任务只有三个:启动判断、处理启动命令、处理文件块。
1. 启动流程
上电后Bootloader首先读取配置信息:
-
若标记为"启动APP",则跳转到APP执行。
-
若标记为"停留在Bootloader"或无有效标记,则停留在Bootloader,等待升级命令。
2. 处理启动命令
-
收到"进入Bootloader"命令:若当前已在Bootloader则忽略;若在APP则写配置信息并软件复位。
-
收到"进入APP"命令:写配置信息并软件复位,Bootloader下次启动时会跳转APP。
3. 处理文件块(使用Modbus "Write File Record")
-
中控Bootloader:需处理映射信息和固件信息。
-
record_no = 0:解析文件头,获取文件大小等信息。
-
record_no ≠ 0:根据record_no记录映射表或烧录Flash数据。
-
-
传感器Bootloader:只需处理固件信息,直接将数据写入Flash。
图片说明:此处应有Bootloader详细流程图,包含以下分支:
开始 → 判断是否收到"进入Bootloader"命令 → 若已在Bootloader?→ 写配置信息 → 软件复位 → Bootloader根据配置信息不启动APP。
升级流程:接收文件头成功?→ 接收文件块成功?→ 烧录 → 接收完毕?→ 接收"进入APP"命令 → 写配置信息 → 软件复位 → 启动APP。
五、IAP要点及时序
为确保升级可靠且实时反馈,有两个关键设计:
1. 实时烧录与回复
-
升级中控APP:中控Bootloader每收到一个文件块,立即写入Flash,然后根据写入结果回复Modbus响应。上位机等待响应后再发下一包,出错可重发。
-
升级传感器APP:中控APP每收到一个文件块,立即转发给传感器,传感器的Bootloader写入Flash后回复中控,中控再回复上位机。同样保证每一包的实时反馈。
2. 命令执行的顺序
-
目标是中控:中控收到启动命令(如"进入Bootloader"或"进入APP")后,先回复上位机(因为一旦复位就无法回复),再执行复位操作。
-
目标是传感器:中控收到命令后,先转发给传感器,等待传感器执行完毕并回复,然后中控再回复上位机,确保命令已生效。
六、上位机程序流程图
上位机升级流程非常清晰:
-
开始
-
发送"进入Bootloader"命令(等待目标板回复)
-
循环发送文件头(直到成功)
-
循环发送文件块(每发一块等待回复,直到全部发完)
-
发送"进入APP"命令
-
退出
图片说明:此处应有上位机流程图,直观展示上述循环判断过程。
总结
IAP升级的核心在于Flash划分 、Bootloader与APP的角色切换 、命令和数据的可靠传输。通过增加统一的命令寄存器,上位机可以灵活控制中控和传感器进入升级模式。Bootloader负责启动判断和实时烧录,确保升级过程稳定。时序图(图片1、2)和流程图(图片4、5、6)清晰展示了各环节的交互,是理解和实现IAP的重要参考。
说明:此处应有系统任务交互图,展示PC通过USB串口与多个任务(任务1~4)通信,任务分别负责读取开关量传感器按键、更新DI寄存器,将DO值发送给各传感器,以及读取环境监测和温湿度传感器的ADC值更新AI寄存器。该图形象说明了点表中寄存器如何被周期性地读写。