Files
ldc1612_cmake_vscode/AGENTS.md
T
hulk b6da450f8a build: 恢复正式发布布局 0x08002000/54K + VECT_TAB_OFFSET=0x2000
调试裸机布局(0x08000000/VTOR=0)仅限本地临时修改,不进仓库;
2026-10-02 23:21:47 +08:00

81 lines
5.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.
# AGENTS.md — ldc1612_cmake_vscode 项目约定与进度
## 项目概述
GD32E230 电涡流传感器节点固件:LDC1612(电涡流/电感数字转换器)+ TMP112(板载温度),
通过 RS485 串口命令协议(`D5 03 LEN [cmd] CRC`)与上位机通信,支持温度补偿与标定。
- 协议文档:`CommunicationProtocol.md`;寄存器速查:`LDC1612_REG_LIST.md`
- 版本策略:`Inc/version.h`(BOARD_TYPE_CODE.主.次.修订,当前 23.1.0.1)
## 工具链与构建
- 语言/环境:C99,GD32E23x 标准库(`SDK/`)
- 编译器:`arm-none-eabi-gcc`(D:\toolchain\xpack-arm-none-eabi-gcc-15.2.1-1.1)
- 构建:CMake + Ninja,preset `Debug` / `Release`,输出 `Build/<preset>/Application/Application.elf`
- 命令行构建:`cmake --build Build\Debug`(需 arm-none-eabi-gcc/cmake/ninja 在 PATH)
- 烧录/调试(.vscode/tasks.json、launch.json):
- OpenOCD:`GD32_OPENOCD_BIN` 指向定制构建(含 gd32e23x flash 驱动,CMSIS-DAP HID 后端)
- `Flash MCU (DAPLink)` 任务 + `.vscode/openocd_daplink_gd32e23x.cfg`:
适配 DAPLink 探针(无 connect_assert_srst,当前共享 cfg 的 connect_assert_srst
会导致 Cortex-M23 识别失败);烧录命令 `program Application.elf verify reset exit`
- J-Link 任务需 SEGGER 探针 + PATH 中 JLink.exe(当前接的是 DAPLink,不适用)
- 调试器探针历史问题(2026-10-02 已解决):DAPLink 的 CMSIS-DAP v1 接口曾被 Zadig
装上 libwdi WinUSB 驱动(oem244.inf),导致 OpenOCD 枚举不到探针;删除该驱动包后
恢复 HID。若复发:管理员运行 `pnputil /delete-driver <oemNN.inf> /uninstall`。
- 串口验证:RS485 转 USB(FTDI,COM15),115200-8N1,**需同时置位 RTS+DTR**
(转换器方向控制),否则命令发不出去;DAPLink 虚拟串口为 COM8。
## 硬件/板级约定(Inc/board_config.h)
- MCU:GD32E230(自动探测 Flash 容量,64KB → USART1 作 RS485)
- RS485:SP3487(无自动方向),USART1 PA2(TX)/PA3(RX),DE=PA1(USART 硬件 DE,AF1)
- I2C0:PF0(SDA)/PF1(SCL),硬件 IIC 100kHz(`SOFTWARE_IIC` 可切换软模拟,默认关闭)
- LED:PB1
- 传感器:LDC1612 @0x2B(40MHz 外部时钟),TMP112 @0x49(ADD0=GND)
- 调试宏(均默认关闭):DEBUG_VERBOSE / COM_DEBUG / LDC_DEBUG / EDDY_DRIVE_CURRENT_DETECTION
## 内存布局(仓库默认 = 正式发布布局)
- **APP 链接在 0x08002000(54K),VECT_TAB_OFFSET=0x2000(Src/system_gd32e23x.c),
前置 8KB Bootloader**;OTA/Ymodem 打包(_UPDATE.bin/_BL.bin)基于此布局,
详见 hulk-mcu-firmware skill
- 调试阶段如需脱离 Bootloader 裸机运行(直接烧 0x08000000):临时把
`LD/gd32e23x_flash.ld` 的 ORIGIN 改为 0x08000000、VECT_TAB_OFFSET 改为 0x00,
**仅限本地临时修改,不要提交推送**(否则烧 _BL 镜像时 Bootloader 会覆盖 APP 头部)
- 修改布局需同时改 `LD/gd32e23x_flash.ld` 的 ORIGIN 与 VECT_TAB_OFFSET
## 开发进度
### 已完成
- [x] LDC1612 驱动(初始化/单通道配置/原始值读取/状态检查)
- [x] TMP112 驱动(初始化/温度读取/阈值/单次转换)
- [x] RS485 命令体系:M1/M2(周期上报开关)、M3(涡流原始值)、M4(温度×10000)、
M5(温度补偿涡流值)、M6(标定数据:涡流+温度)、M999(版本)、M9999(复位)
- [x] v1.0.1:涡流传感器温度标定方法与标定命令(M6)
- [x] 2026-10-02:从模板 gd32e23x_template_cmake_vscode 导入 IIC 驱动改进:
错误路径改为 i2c_bus_reset() 总线恢复+重试、_i2c_wait_flag_timeout 系列带超时
辅助函数、i2c_scan 增加 AERR 处理、新增 i2c_read_raw(无子地址读取)、
i2c_write/i2c_read 改为 16 位寄存器地址(DLPC 风格,本项目传感器仍走
i2c_write_16bits/i2c_read_16bits 8 位寄存器路径);移除未使用的
i2c_read/write_8bits、_32bits、i2c_read_display_params 显示面板便捷函数;
tmp112.c 读取改回 i2c_read_16bits
- [x] 2026-10-02:硬件验证通过——全部命令实测:M3 涡流原始值 ~0x01ADBADC
(室温)/0x01B094BA(板子被手捂热后,随温度同步上移,无错误位)、
M4 温度 27.25→30.45→29.95°C(跟踪板温变化合理)、M5 补偿值(系数为 0 时≈M3)、
M1 周期上报(~10ms/帧)开启、M2 停止("ok" 确认)、M6 组合数据、
M999 版本 v23.1.0.1、M9999 复位(复位后 M999 恢复应答);
所有响应 CRC 抽查校验正确;Release 预设编译通过(text 11.4KB)
- [x] 2026-10-02:解决 DAPLink 烧录器识别问题(Zadig WinUSB 驱动冲突);
新增 DAPLink 专用烧录 cfg 与任务
- [x] 2026-10-02:发布 V1.0.2(Gitea Release + tag,基于 0x08002000 Bootloader
布局打包 _UPDATE.bin/_BL.bin;dev 顶端另提交调试布局 0x08000000 供日常烧录)
### 计划 / TODO
- [ ] 正式发布前切回 Bootloader 布局(0x08002000/54K)并适配 OTA/Ymodem 打包流程
- [ ] M5 温度补偿系数目前为 0(TEMP_COMP_COEFF_*),待标定后填入实际温漂系数
- [ ] 模板侧(gd32e23x_template_cmake_vscode)的 SEGGER RTT / CFG_ENABLE 宏体系
尚未同步到本项目(board_config.h 仍是 define/undef 风格),如需对齐另起任务