add README_zh.md
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
# STM8 Bootloader Template Project
|
||||
|
||||
(English | [中文](README_zh.md))
|
||||
|
||||
## Overview
|
||||
|
||||
This project provides a flexible bootloader implementation for STM8 microcontrollers using the SDCC compiler. The bootloader resides in the option bytes reserved area and enables in-application programming (IAP) capabilities via UART communication.
|
||||
|
||||
181
README_zh.md
Normal file
181
README_zh.md
Normal file
@@ -0,0 +1,181 @@
|
||||
# STM8 Bootloader 模板项目
|
||||
|
||||
([English](README.md) | 中文)
|
||||
|
||||
## 概述
|
||||
|
||||
本项目为 STM8 微控制器提供了一个灵活的 Bootloader 实现,使用 SDCC 编译器进行编译。Bootloader 存储在选项字节保留区域,支持通过 UART 通信进行在应用编程(IAP)功能。
|
||||
|
||||
注意:本 Bootloader 实现基于并受 [STM8uLoader](https://github.com/ovsp/STM8uLoader) 项目的启发,为了集成到本模板结构中进行了重大修改和增强。
|
||||
|
||||
## 特性
|
||||
|
||||
- **三阶段 Bootloader**:
|
||||
- Boot0:用于加载 Boot1 的复位/TRAP 中断服务程序
|
||||
- Boot1:存储在选项字节保留区的最小化 Bootloader
|
||||
- Boot2:通过串口通信加载的完整功能 Bootloader
|
||||
|
||||
- **灵活配置**:
|
||||
- 通过 Makefile 宏 `ENABLE_OPTION_BOOTLOADER` 启用/禁用 Bootloader
|
||||
|
||||
- **完整工具链**:
|
||||
- PC 端编程工具,支持固件更新
|
||||
- 支持读、写、跳转和执行操作
|
||||
|
||||
- **安全操作**:
|
||||
- Bootloader 完整性受选项字节保护
|
||||
- 超时或通信失败时回退到主应用程序
|
||||
|
||||
## Bootloader 参考
|
||||
|
||||
本项目的 Bootloader 实现源自 ovsp 开发的优秀 STM8uLoader 项目。主要改进包括:
|
||||
|
||||
- 集成到模块化的模板项目结构中
|
||||
- 三阶段 Bootloader 方法(Boot1 在选项字节中,Boot2 动态加载)
|
||||
- 增强的 Makefile 系统和配置宏
|
||||
- 扩展的命令集和错误处理
|
||||
|
||||
## Bootloader 操作流程
|
||||
|
||||
1. **上电/复位**:
|
||||
- MCU 从复位向量(0x8000)开始执行
|
||||
- 控制权转移到 `bootloader_enter()`
|
||||
|
||||
2. **阶段 1(Boot1)**:
|
||||
- 从选项字节(0x480E-0x483F)复制 Boot1 到 RAM 并运行
|
||||
- 通过 UART 发送同步序列 `0x00 0x0D`
|
||||
- 等待 PC 端发送 Boot2 代码
|
||||
|
||||
3. **阶段 2(Boot2)**:
|
||||
- 接收并验证来自 PC 的 Boot2 代码
|
||||
- 执行 Boot2,提供完整的命令接口
|
||||
- 处理 PC 端的编程、读取和设备控制命令
|
||||
|
||||
4. **应用程序启动**:
|
||||
- 在成功编程或超时后,跳转到主应用程序(0x8004)
|
||||
- 可选择停留在 Bootloader 模式进行调试
|
||||
|
||||
## Bootloader 集成
|
||||
|
||||
1. 主应用程序包含 `bootloader.h`,该文件将 TRAP 中断向量重定向到 `bsp/boot0.c` 中的 `bootloader_enter()`。
|
||||
|
||||
2. 在构建过程中,Makefile 交换复位向量(0x8000)和陷阱向量(0x8004)的位置。这确保启动时首先执行 Bootloader 入口程序。
|
||||
|
||||
3. 它通过 UART1 发送握手信号(`0x00 0x0D`)并等待约 200ms 获取响应。在超时期限内,执行流程将进入主应用程序。
|
||||
|
||||
## 项目构建
|
||||
|
||||
### 先决条件
|
||||
- 已安装 SDCC(Small Device C 编译器)
|
||||
- stm8flash 或类似的编程工具
|
||||
- Python 3.x(用于 PC 端工具)
|
||||
|
||||
### 编译选项
|
||||
|
||||
启用 Bootloader 支持:
|
||||
```bash
|
||||
make ENABLE_OPTION_BOOTLOADER=1
|
||||
```
|
||||
|
||||
禁用 Bootloader(直接执行应用程序):
|
||||
```bash
|
||||
make ENABLE_OPTION_BOOTLOADER=0
|
||||
```
|
||||
|
||||
### 构建目标
|
||||
```bash
|
||||
# 构建应用程序和 Bootloader 选项
|
||||
make all
|
||||
|
||||
# 编程设备(需要 stm8flash)
|
||||
make flash
|
||||
```
|
||||
|
||||
## 选项字节配置
|
||||
|
||||
Bootloader 使用保留的选项字节区域进行存储:
|
||||
|
||||
| 地址范围 | 内容 | 大小 |
|
||||
|--------------|--------------------------|-----------|
|
||||
| 0x4800-0x480A | 设备选项字节 | 11 字节 |
|
||||
| 0x480D-0x483F | Boot1 代码 | 51 字节 |
|
||||
|
||||
**重要提示**:这些地址是针对 STM8S103/003 的。对于其他 STM8 型号需要相应调整。
|
||||
|
||||
## PC 通信协议
|
||||
|
||||
### 连接参数
|
||||
- **波特率**:128000 bps
|
||||
- **数据位**:8
|
||||
- **校验位**:无
|
||||
- **停止位**:1
|
||||
|
||||
### 命令集
|
||||
| 命令 | 操作码 | 描述 |
|
||||
|------------|---------|-------------------------------|
|
||||
| CMD_READ | 0xF1 | 从设备读取内存 |
|
||||
| CMD_WRITE | 0xF2 | 向设备写入内存 |
|
||||
| CMD_GO | 0xF3 | 跳转到指定地址执行 |
|
||||
| CMD_EXEC | 0xF4 | 执行机器码 |
|
||||
|
||||
### 通信序列
|
||||
1. Boot1 发送同步字节:`0x00 0x0D`
|
||||
2. PC 响应 Boot2 反向字节
|
||||
3. Boot1 接收 Boot2 并校验和
|
||||
4. Boot2 执行并准备接收命令
|
||||
5. PC 发送带有适当参数的命令
|
||||
|
||||
## 使用示例
|
||||
|
||||
### 编程新固件
|
||||
```bash
|
||||
# 1. 构建应用程序
|
||||
make flash
|
||||
|
||||
# 2. 进入交互模式
|
||||
python scripts/stm8loader.py /dev/ttyUSB0
|
||||
|
||||
# 3. 使用命令行:
|
||||
python scripts/stm8loader.py /dev/ttyUSB0 --write 0x8000 firmware.bin
|
||||
```
|
||||
|
||||
## 支持的设备
|
||||
|
||||
当前已测试:
|
||||
- STM8S103/003(默认配置)
|
||||
|
||||
**重要提示**:移植到其他 STM8 型号需要验证外设寄存器定义
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 常见问题
|
||||
|
||||
1. **设备无响应**:
|
||||
- 验证波特率设置
|
||||
- 检查 UART 引脚连接(TX/RX 是否接反?)
|
||||
- 确保选项字节已正确编程
|
||||
|
||||
2. **Bootloader 未启动**:
|
||||
- 验证编译时是否设置了 `ENABLE_OPTION_BOOTLOADER`
|
||||
- 检查 main.c 是否包含 `bootloader.h`
|
||||
- 检查 `bsp/boot0.c`
|
||||
- 确认选项字节配置
|
||||
|
||||
## 安全注意事项
|
||||
|
||||
1. **电源稳定性**:确保编程期间电源稳定
|
||||
2. **看门狗定时器**:在 Bootloader 中禁用或正确处理看门狗
|
||||
3. **中断**:在 Bootloader 操作期间保存/恢复中断上下文
|
||||
4. **内存保护**:切勿覆盖选项字节中的 Bootloader 区域
|
||||
|
||||
## 参考资料
|
||||
|
||||
- [STM8uLoader](https://github.com/ovsp/STM8uLoader)
|
||||
- [STM8S 参考手册](https://www.st.com/resource/en/reference_manual/cd00190271-stm8s-series-and-stm8af-series-8bit-microcontrollers-stmicroelectronics.pdf)
|
||||
- [STM8 CPU 编程手册](https://www.st.com/resource/en/programming_manual/cd00161709-stm8-cpu-programming-manual-stmicroelectronics.pdf)
|
||||
- [SDCC 用户指南](http://sdcc.sourceforge.net/doc/sdccman.pdf)
|
||||
- [STM8 Bootloader AN2659](https://www.st.com/resource/en/application_note/cd00173937-stm8-swim-communication-protocol-and-debug-module-stmicroelectronics.pdf)
|
||||
|
||||
---
|
||||
|
||||
**注意**:本实现用于教育和开发目的。在部署前,请务必在您的具体应用场景中验证 Bootloader 行为。
|
||||
Reference in New Issue
Block a user