Files
ldc1612_cmake_vscode/README.md
T
hulk 89e7191cd5 build: 对齐模板工具链与 .vscode,APP 迁移 Bootloader 布局(0x08002000/54K)
工程编译与开发环境(参照 gd32e23x_template_cmake_vscode 模板)
- cmake/arm-none-eabi-gcc.cmake:硬编码工具链路径改为 GD32_GCC_BIN
  环境变量 / -DTOOLCHAIN_DIRECTORY 参数,与模板逐字一致
- .vscode:launch/tasks/settings/extensions 对齐模板,烧录与调试全部
  读取 GD32_GCC_BIN / GD32_OPENOCD_BIN / GD32_OPENOCD_SCRIPTS 环境变量;
  新增 J-Link 调试配置与 flash/reset/erase.jlink 脚本
- CMakeLists.txt:POST_BUILD 增加 Application/Application.hex 生成
  (J-Link 烧录脚本 loadfile 依赖)
- 验证:Debug / Release 编译通过(本机 ARM GCC 15.2.1)

Bootloader 布局适配(与旧版独立镜像不兼容,升级需整片烧录一次)
- LD/gd32e23x_flash.ld:FLASH ORIGIN=0x08002000, LENGTH=54K
- Src/system_gd32e23x.c:VECT_TAB_OFFSET=0x2000——Bootloader 不写
  VTOR,APP 必须自设向量表,否则中断落回 Bootloader 向量表
- 验证:.vectors 链接于 0x08002000,固件 12164B(54KB 上限 22%)

驱动修复
- Src/ldc1612.c:ldc1612_config_single_channel 各步骤 I2C 写入检查
  返回值,失败立即返回错误(原审查项 L3)

文档
- README:重写本地编译/烧录/调试说明,新增"固件布局与 Bootloader"章节
2026-09-26 18:41:29 +08:00

196 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LDC1612 传感器固件
本仓库基于 GD32E23x CMake + VSCode 工程模板(`gd32e23x_template_cmake_vscode`),包含 LDC1612 电感采样、TMP112 温度采集及补偿、RS485 命令处理。当前版本为 V1.0.1。固件采用 Bootloader + APP 布局:APP 链接在 `0x08002000`(54KB Flash / 8KB RAM),启动时自设向量表偏移;开发进度与审查资料见 `doc/` 目录。
## 本地编译
需要 CMake 3.20 或更新版本、Ninja 和 ARM GCC。CMake、Ninja 应在 `PATH` 中;ARM GCC 通过 `GD32_GCC_BIN` 指定,也可在配置时传入 `-DTOOLCHAIN_DIRECTORY="D:/toolchain/arm-gcc/bin"`,该参数优先于环境变量。工具链路径支持包根目录或 `bin` 目录。
在工程根目录运行 PowerShell(工具链路径请替换为本机安装位置):
```powershell
$env:GD32_GCC_BIN = 'D:\toolchain\xpack-arm-none-eabi-gcc-15.2.1-1.1\bin'
cmake --preset Debug
cmake --build --preset Debug
cmake --preset Release
cmake --build --preset Release
```
输出位于 `Build/Debug` 或 `Build/Release`:`Application/Application.elf` 用于调试,`LDC1612_V1.0.1_APP_<日期>.bin` / `.hex` 为应用固件;`Application/Application.hex` 供 J-Link 烧录任务使用。应用固件不含 Bootloader:单独烧录需写到 `0x08002000`;整片烧录(Bootloader + APP + 标志页)用配套的固件合并工具(`gd32e230f8_firmware_merge_tool` 仓库)处理。详见[固件布局与 Bootloader](#固件布局与-bootloader)。
如果切换 ARM GCC 版本,请使用新的构建目录,或通过 CMake Tools 的 “Delete Cache and Reconfigure” 重新配置。需要独立验证目录时可运行:
```powershell
cmake --preset Debug -B Build/local-check/Debug
cmake --build Build/local-check/Debug
```
---
## 目录
- [本地编译](#本地编译)
- [固件布局与 Bootloader](#固件布局与-bootloader)
- [适用范围](#适用范围)
- [默认配置](#默认配置)
- [工具链准备](#工具链准备)
- [使用说明](#使用说明)
- [时钟配置说明](#时钟配置说明)
- [vcpkg 依赖管理(可选)](#vcpkg-依赖管理可选)
- [建议补充内容](#建议补充内容)
---
## 固件布局与 Bootloader
GD32E230F8(64KB Flash)按 Bootloader + APP 方式分区:
| 区域 | 地址范围 | 说明 |
|---|---|---|
| Bootloader | `0x08000000` - `0x08001FFF`(8KB) | 随板提供,独立固件(`gd32e230f8_bootloader_hulk.bin`),负责 RS485 Ymodem OTA 与跳转 |
| APP(本仓库) | `0x08002000` - `0x0800F7FF`(54KB) | 链接区 `FLASH ORIGIN=0x08002000, LENGTH=54K` |
| 温度标定页(预留) | `0x0800F800` - `0x0800FBFF` | 预留存放标定数据;当前 APP 不访问,仅靠 54KB 链接上限保证不越界覆盖 |
| 有效标志 | `0x0800FFFC` | Bootloader OTA 完成后自写 `0x0000EEEE`,跳转前校验 |
工程侧的两个适配点(缺一不可):
- `LD/gd32e23x_flash.ld`:FLASH `ORIGIN = 0x08002000, LENGTH = 54K`;
- `Src/system_gd32e23x.c`:`VECT_TAB_OFFSET = 0x2000`——Bootloader 不写 VTOR,APP 必须自己把向量表指到 `0x08002000`,否则中断会落回 Bootloader 向量表(现象:收到第一个 RS485 字节即死机)。
⚠️ 与旧版布局(APP 链接在 `0x08000000` 的独立镜像)不兼容:从旧版升级需整片烧录一次。RS485 协议、命令集(M1-M6/M999/M9999)与回包格式无任何变化。布局依据与 Bootloader 反汇编分析见 `doc/LDC1612_工程审查与实验方案_2026-09-26.md`。
---
## 适用范围
- 适用于兆易创新 GD32E23x 系列 Cortex-M23 内核单片机
- 支持标准外设库开发
- 推荐开发环境:VSCode + CMake + ARM GCC 工具链
---
## 默认配置
- MCU 主频:内部 RC 振荡器,系统时钟配置为 72MHz
---
## 工具链准备
### 1. xPack GNU Arm Embedded GCC Toolchain
- **原模板版本**:xpack-arm-none-eabi-gcc-11.3.1-1.1;本机编译验证使用 15.2.1-1.1。
- **安装位置**:由本机统一管理,不提交到仓库。
- **官方下载地址**:https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases
- **路径自定义说明**:
编译器与 GDB 均通过 `GD32_GCC_BIN` 环境变量定位(或配置时传 `-DTOOLCHAIN_DIRECTORY`),CMake 文件与 `.vscode` 均无需修改路径。
### 2. OpenOCD(GD-Link 支持)
- **版本**:xpack-openocd-0.11.0-3
- **获取地址**:https://github.com/burakenez/gd32-tools-xpack-openocd/tree/v0.11.0-3
- **说明**:
- 本版本提取自 Embedded Builder V1.4.1.23782。
- ⚠️ 请勿随意更换版本,因 GD32 MCU 支持有限,推荐严格使用此版本。
- **路径自定义说明**:
通过两个环境变量定位,安装位置任意:
- `GD32_OPENOCD_BIN`:`openocd.exe` 所在 `bin` 目录;
- `GD32_OPENOCD_SCRIPTS`:OpenOCD `scripts` 目录。
`.vscode` 的调试配置与烧录任务全部读取这两个变量,无需修改任何文件。
---
## 使用说明
1. **配置环境变量**(用户级,按本机安装位置设置一次即可)
| 环境变量 | 指向 | 用途 |
|---|---|---|
| `GD32_GCC_BIN` | ARM GCC 的 `bin` 目录 | 编译、GDB 调试 |
| `GD32_OPENOCD_BIN` | OpenOCD 的 `bin` 目录 | 烧录、调试 |
| `GD32_OPENOCD_SCRIPTS` | OpenOCD 的 `scripts` 目录 | 烧录、调试 |
设置后重开终端 / VSCode 生效。`cmd` 示例:`setx GD32_GCC_BIN "D:\toolchain\xpack-arm-none-eabi-gcc-15.2.1-1.1\bin"`。
2. **编译**
命令行见上文[本地编译](#本地编译),或直接用 VSCode 的 CMake Tools 选择 Debug / Release preset 构建。
3. **烧录固件**
- **OpenOCD(GD-Link)**:VSCode 任务 `Flash MCU`(连带编译用 `Build and Flash`);另有 `Reset MCU`、`Mass Erase MCU`、`OpenOCD Server` 任务。
- **J-Link**:任务 `Flash MCU (Jlink)` 等,依赖构建生成的 `Build/<preset>/Application/Application.hex`。
- 器件与接口在 `.vscode/settings.json` 的 `gd32.jlink.*` / `gd32.openocd.*` 中配置,当前为 GD32E230F8 / SWD。
4. **调试**
VSCode 调试配置有两个:`Debug with OpenOCD` 与 `Debug with J-Link`(均使用 cortex-debug,SVD 文件 `GD32E230.svd`,支持外设寄存器查看)。烧录调试器以 GD-Link 为例;J-Link 直接选用对应配置即可。
---
## 时钟配置说明
本工程默认系统时钟为内部 IRC8M 振荡器经 PLL 倍频后的 72MHz。
如需修改主频或时钟源,请编辑 `Src/system_gd32e23x.c` 文件:
1. 查找如下宏定义区:
```c
// #define __SYSTEM_CLOCK_8M_HXTAL (__HXTAL)
// #define __SYSTEM_CLOCK_8M_IRC8M (__IRC8M)
// #define __SYSTEM_CLOCK_72M_PLL_HXTAL (uint32_t)(72000000)
#define __SYSTEM_CLOCK_72M_PLL_IRC8M_DIV2 (uint32_t)(72000000)
```
2. 取消你需要的时钟方案的注释,并注释掉其它方案。
3. 保存后重新编译工程即可生效。
详细时钟初始化流程可参考 `system_gd32e23x.c` 文件中的 `system_clock_config` 及相关函数实现。
---
## vcpkg 依赖管理(可选)
本工程可选支持 vcpkg 作为 C/C++ 工具链和构建工具的自动化依赖管理方案。
- 自动下载和管理如 CMake、Ninja 等构建工具,简化环境配置。
- 可扩展用于第三方 C/C++ 库的统一管理。
**启用方法**:
1. 在项目根目录创建 `vcpkg-configuration.json` 文件,内容如下:
```json
{
"registries": [
{
"name": "microsoft",
"location": "https://aka.ms/vcpkg-ce-default",
"kind": "artifact"
},
{
"name": "arm",
"location": "https://aka.ms/vcpkg-artifacts-arm",
"kind": "artifact"
}
],
"requires": {
"arm:tools/ninja-build/ninja": "^1.12.0",
"arm:tools/kitware/cmake": "^3.28.4"
}
}
```
2. 启动 VSCode 或命令行,vcpkg 会自动检测并安装所需工具。
如不需要 vcpkg,可忽略本文件。
---
## 建议补充内容
- **快速上手示例**:如 main.c 的最小点灯/串口输出代码片段。
- **常见问题与解答**:如构建失败、烧录失败的排查建议。
- **多板卡适配说明**:如有多种硬件,如何切换 BoardName。
- **贡献指南**:如何提交 PR、代码风格约定等。
- **License 说明**:开源协议和版权声明。
---
如需进一步完善或有其他建议,欢迎随时反馈!