Skip to content

Commit d0c42b5

Browse files
committed
update: 添加README
1 parent fe93a37 commit d0c42b5

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

README.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# STM32F407 OTA Bootloader
2+
3+
用于 STM32F407 的双分区 Bootloader。
4+
- 支持通过 Ymodem 协议进行 OTA 升级
5+
- 采用独立 Boot Flag 机制记录升级状态和启动状态
6+
7+
## Flash Layout
8+
9+
- Bootloader: `0x08000000 - 0x08003FFF` (16KB)
10+
- Boot Flag: `0x08004000 - 0x08007FFF` (16KB)
11+
- APP1: `0x08008000 - 0x0801FFFF` (96KB, 运行区)
12+
- APP2: `0x08020000 - 0x0803FFFF` (128KB, OTA缓存区)
13+
14+
分区定义见 [Bootloader/bootloader.h](Bootloader/bootloader.h)
15+
16+
## Boot Flow
17+
18+
上电后 Bootloader 按以下顺序决定是否进入升级模式:
19+
20+
1. 检查软件请求标志
21+
如果 APP 之前设置了 `enter_bootloader`,则直接进入 Bootloader 菜单。
22+
23+
2. 检查串口命令
24+
上电后 3 秒内,如果 `USART1` 收到字符 `B`,则进入 Bootloader 菜单。
25+
26+
3. 正常启动 APP
27+
若未请求进入 Bootloader,则执行正常启动流程:
28+
- 检查 `need_copy`
29+
- 必要时把 APP2 复制到 APP1
30+
- 检查启动次数
31+
- 跳转到 APP1
32+
33+
启动入口见 [Bootloader/main.c](Bootloader/main.c)
34+
35+
## UART Usage
36+
37+
- `USART1`: 调试输出 / Bootloader 命令口
38+
- `USART2`: APP 通信 / Ymodem OTA 数据口
39+
40+
## OTA Update Flow
41+
42+
OTA 下载始终写入 APP2,不直接覆盖 APP1。
43+
44+
流程如下:
45+
46+
1. APP 收到 OTA 触发命令
47+
2. APP 设置 `enter_bootloader` 并软件复位
48+
3. Bootloader 启动后直接进入菜单
49+
4. 主机发送命令 `2`
50+
5. 通过 Ymodem 将固件下载到 APP2
51+
6. 下载成功后设置 `need_copy=1`
52+
7. 下次启动时 Bootloader 将 APP2 复制到 APP1
53+
8. 跳转到新的 APP1
54+
55+
Ymodem 下载处理位于 [Bootloader/bootloader.c](Bootloader/bootloader.c)
56+
57+
## Boot Flag
58+
59+
Boot Flag 保存在独立扇区,用于保存启动状态和 OTA 状态,包括:
60+
61+
- `boot_attempts`
62+
- `need_copy`
63+
- `ota_complete`
64+
- `enter_bootloader`
65+
- `app1_version`
66+
- `app2_version`
67+
68+
相关定义见 [Bootloader/boot_flag.h](Bootloader/boot_flag.h)
69+
相关实现见 [Bootloader/boot_flag.c](Bootloader/boot_flag.c)
70+
71+
## Notes
72+
73+
- APP1 必须链接到 `0x08008000`
74+
- APP 的向量表必须正确重定位到 APP1 基址
75+
- APP 启动稳定后应清除 `boot_attempts`
76+
- 调试日志只能走 `USART1`,不要混入 `USART2` 的 Ymodem 数据流

0 commit comments

Comments
 (0)