docs: 初始化HCDF MID 405充放电控制器固件仓库
添加完整的项目README文档,包含系统架构、功能说明、目录结构、通信接口、Flash布局、开发编译流程、下载验证和注意事项等内容。
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
# HCDF MID 405 充放电控制器固件
|
||||
|
||||
本仓库是基于 **STM32F405RG** 的四通道双向电源/电子负载控制固件。主程序运行在 **RT-Thread 5.2.2** 上,负责连接上位机、HMI、快充协议板和源载功率板,完成通道切换、源/载控制、继电器管理、状态采集、校准和固件升级。仓库同时包含独立 Bootloader,用于应用固件校验、更新和出厂固件恢复。
|
||||
|
||||
> 本项目直接控制电源与电子负载硬件。调试前应确认限压、限流、散热、急停和继电器默认状态;修改通道切换或输出控制逻辑后,先在断电或受限功率条件下验证。
|
||||
|
||||
## 系统概览
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
PC["上位机 / 测试系统"] -->|"UART1 · Modbus RTU"| CTRL["STM32F405 控制板"]
|
||||
HMI["HMI 屏幕"] <-->|"UART2"| CTRL
|
||||
CTRL <-->|"UART3 · 多路复用"| NORTH["4 路快充协议板"]
|
||||
CTRL <-->|"UART6 · 多路复用"| SOUTH["4 路源载功率板"]
|
||||
CTRL --> RELAY["继电器与通道选择"]
|
||||
CTRL --> FLASH["参数 / 日志 / 升级分区"]
|
||||
USB["USB CDC 调试终端"] <-->|"MSH / 日志"| CTRL
|
||||
```
|
||||
|
||||
主程序把每个物理通道的控制状态集中保存在北向对象中,并从南向功率板刷新电压、电流、功率、故障和在线状态。上位机或 HMI 写入控制参数后,轮询线程将变化转换为协议板、功率板和继电器操作;采集结果再映射回 Modbus 寄存器和屏幕数据。
|
||||
|
||||
## 主要功能
|
||||
|
||||
- 四通道 Source/Sink 控制及通信通道复用。
|
||||
- 电源侧快充协议设置,代码中包含 FCP、SCP、QC2.0/QC3.0、AFC、PD、UFCS 等协议编号;实际支持范围以 `docs/` 中的协议表和目标板固件为准。
|
||||
- 电子负载恒压、恒流、恒功率、恒阻和开环模式,以及短路、OCP、动态测试控制。
|
||||
- 上位机 Modbus RTU 服务,地址默认为 `0x01`,实现 `0x01/0x02/0x03/0x04/0x05/0x06/0x0F/0x10`,并提供 `0x20` 升级和 `0x21` 校准扩展功能。
|
||||
- FAL 片内 Flash 管理、看门狗、硬件定时器、USB CDC 虚拟串口、FinSH/MSH 和 ULog。
|
||||
- 带 CRC、包头校验、AES 解密、断电恢复和出厂分区回退的 Bootloader 升级流程。
|
||||
|
||||
## 目录结构
|
||||
|
||||
| 路径 | 说明 |
|
||||
| --- | --- |
|
||||
| `apps/chrg/` | RT-Thread 主固件、SCons 配置和 Keil 工程 |
|
||||
| `apps/chrg/applications/bsp/` | GPIO、继电器、LED、串口封装、FAL、定时器、看门狗和 USB VCOM |
|
||||
| `apps/chrg/applications/thread/` | 接收、轮询、Modbus 和 LCD 六个常驻业务线程 |
|
||||
| `apps/chrg/applications/utils/` | Source/Sink 控制、功率板寄存器、协议编解码和通用工具 |
|
||||
| `apps/chrg/board/` | 时钟、STM32 HAL、CubeMX 配置、驱动端口和链接脚本 |
|
||||
| `apps/boot/` | 裸机 HAL Bootloader、YModem、固件校验/搬运和 Keil 工程 |
|
||||
| `libs/` | CMSIS、STM32F4 HAL 和共享驱动 |
|
||||
| `rt-thread/` | 随仓库维护的 RT-Thread 5.2.2 源码,不应随意做产品级改动 |
|
||||
| `docs/` | 原理图、引脚表、通信协议、HMI 和调试资料 |
|
||||
| `bin_pack/` | 升级包及 YModem 相关工具资料 |
|
||||
|
||||
## 通信接口与线程
|
||||
|
||||
主程序中的接口配置如下:
|
||||
|
||||
| 接口 | 波特率 | 作用 |
|
||||
| --- | ---: | --- |
|
||||
| UART1 | 115200, 8N1 | `thr.comm`:上位机 Modbus RTU 服务 |
|
||||
| UART2 | 921600 | `thr.lcd`:HMI 收发;RT-Thread 初始控制台配置也指向 UART2 |
|
||||
| UART3 | 230400 | `thr.nor`:快充协议板接收,`thr.rollnor` 负责轮询发送 |
|
||||
| UART6 | 115200 | `thr.sou`:功率板接收,`thr.rollsou` 负责轮询和批量写寄存器 |
|
||||
| USB CDC | USB FS | 环境初始化后将 RT-Thread 控制台切换到 `vcom` |
|
||||
|
||||
六个业务线程由 `chrg_thread.c` 统一创建。接收线程通过邮箱传递已解析消息,两个轮询线程通过事件触发,公共数据由互斥锁保护。修改线程优先级、栈大小或 IPC 类型时,应同时检查实时性和内存占用。
|
||||
|
||||
Bootloader 与主程序的串口用途不同:UART1 以 115200 接收升级数据,UART2 以 115200 输出启动和升级日志。
|
||||
|
||||
## Flash 布局与启动流程
|
||||
|
||||
STM32F405 片内 1 MiB Flash 使用三固件分区方案:
|
||||
|
||||
| 分区 | 地址范围 | 大小 | 用途 |
|
||||
| --- | --- | ---: | --- |
|
||||
| `boot` | `0x08000000` - `0x0800FFFF` | 64 KiB | Bootloader |
|
||||
| `param` | `0x08010000` - `0x0801FFFF` | 64 KiB | 参数 |
|
||||
| `log` | `0x08020000` - `0x0803FFFF` | 128 KiB | 日志预留区 |
|
||||
| `app` | `0x08040000` - `0x0807FFFF` | 256 KiB | 当前运行固件 |
|
||||
| `download` | `0x08080000` - `0x080BFFFF` | 256 KiB | 待更新固件 |
|
||||
| `factory` | `0x080C0000` - `0x080FFFFF` | 256 KiB | 出厂恢复固件 |
|
||||
|
||||
上电后 Bootloader 等待主机约 5 秒,检查升级请求和各分区固件状态;无升级任务且 `app` 校验通过时,设置向量表并跳转到 `0x08040000`。升级过程依次完成包头检查、擦除、写入、CRC/完整性校验和状态落盘,异常时可尝试从 `download` 或 `factory` 恢复。分区地址在 `apps/boot/application/include/app_config.h`、`apps/chrg/board/ports/fal_cfg.h` 和主程序链接脚本中必须保持一致。
|
||||
|
||||
## 开发环境
|
||||
|
||||
推荐环境:
|
||||
|
||||
- Windows 10/11;
|
||||
- Keil MDK 5 和对应 STM32F4 Device Pack;
|
||||
- Python 3、SCons,以及 ARM Compiler 5 或 `arm-none-eabi-gcc`;
|
||||
- RT-Thread Env(需要图形化配置时使用)。
|
||||
|
||||
仓库不附带编译器,`apps/chrg/rtconfig.py` 中的默认 GCC 路径为 `/usr/bin`。Windows 开发机通常需要通过 `RTT_CC` 和 `RTT_EXEC_PATH` 指定实际工具链位置。
|
||||
|
||||
## 编译主程序
|
||||
|
||||
### Keil MDK
|
||||
|
||||
直接打开 `apps/chrg/chrg.uvprojx`,选择 `chrg` Target 后 Build。也可从仓库根目录执行:
|
||||
|
||||
```powershell
|
||||
& 'C:\Keil_v5\UV4\UV4.exe' -b '.\apps\chrg\chrg.uvprojx'
|
||||
```
|
||||
|
||||
源文件或 Kconfig 发生变化后,可重新生成 Keil 工程:
|
||||
|
||||
```powershell
|
||||
Set-Location .\apps\chrg
|
||||
$env:RTT_CC = 'keil'
|
||||
$env:RTT_EXEC_PATH = 'C:\Keil_v5'
|
||||
scons --target=mdk5
|
||||
```
|
||||
|
||||
### SCons
|
||||
|
||||
```powershell
|
||||
Set-Location .\apps\chrg
|
||||
$env:RTT_CC = 'gcc'
|
||||
$env:RTT_EXEC_PATH = 'C:\ArmGNU\bin' # 修改为本机路径
|
||||
scons -j4
|
||||
```
|
||||
|
||||
成功后生成 `chrg.elf` 和 `rtthread.bin`。常用辅助命令:
|
||||
|
||||
```powershell
|
||||
scons --menuconfig # 修改 RT-Thread 功能配置
|
||||
scons -c # 清理 SCons 输出
|
||||
scons --target=mdk5 # 重新生成 Keil MDK5 工程
|
||||
```
|
||||
|
||||
配置入口包括 `apps/chrg/.config`、`defconfig`、`rtconfig.h` 和 `Kconfig`。修改配置后应检查生成文件差异,避免 `.config`、`defconfig` 与 `rtconfig.h` 长期不一致。
|
||||
|
||||
## 编译 Bootloader
|
||||
|
||||
Bootloader 当前使用独立 Keil 工程:
|
||||
|
||||
```powershell
|
||||
& 'C:\Keil_v5\UV4\UV4.exe' -b '.\apps\boot\boot.uvprojx'
|
||||
```
|
||||
|
||||
确认链接地址为 `0x08000000`、空间不超过 64 KiB,并在烧写前核对主程序仍链接到 `0x08040000`。不要把 `Objects/`、`build/`、`.axf`、`.bin`、`.hex` 或 `.map` 文件提交到 Git。
|
||||
|
||||
## 下载、调试与验证
|
||||
|
||||
1. 首次装机先烧写 Bootloader,再写入与 `app` 分区匹配的主固件或升级包。
|
||||
2. 连接 USB CDC 后打开串口终端,可通过 MSH 查看线程、设备和内存状态;主程序提示符为 `chrg `。
|
||||
3. 分别验证四个通道的在线状态、通道切换、源/载输出、继电器动作和测量回读。
|
||||
4. 使用上位机验证 Modbus 读写、非法地址/功能码响应以及多寄存器写入的生效时序。
|
||||
5. 升级相关修改至少覆盖正常升级、CRC 错误、中途断电、无有效 App 和 Factory 恢复场景。
|
||||
|
||||
仓库没有产品级自动化测试或覆盖率门槛。每次修改至少应完成受影响 Target 的全量编译,并在 STM32F405 实机记录固件版本、板卡版本、串口日志和测试结果。`rt-thread/tools/testcases/` 仅用于 RT-Thread 构建工具,不代表业务固件测试。
|
||||
|
||||
## 配置与安全注意事项
|
||||
|
||||
- Bootloader 的分区、包头、CRC、加密参数必须与升级包工具保持一致;任意一侧单独修改都会导致升级失败。
|
||||
- 当前 Bootloader 源码包含开发阶段的静态 AES 配置。量产前应替换为受控密钥方案,禁止在公开日志、README 或提交信息中泄露生产密钥。
|
||||
- 改动 Modbus 寄存器映射时同步更新 `chrg_regs.h`、上位机、HMI 和 `docs/` 协议文件,并说明兼容策略。
|
||||
- `docs/` 中可能同时存在多个版本的协议资料,调试前应核对日期、板卡版本和 Source/Sink 方向。
|
||||
- 仓库根目录未提供明确的开源许可证;对外分发源码、固件或第三方组件前,请先确认项目授权和各依赖许可证。
|
||||
|
||||
## 参与开发
|
||||
|
||||
编码规范、测试要求以及提交/合并请求约定见 [AGENTS.md](AGENTS.md)。提交前请检查 `git status`,只包含本次修改所需的源码和文档;协议、链接脚本、Flash 分区及升级兼容性变化必须在评审说明中单独列出。
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user