generated from hulk/gd32e23x_template_cmake_vscode
4.8 KiB
4.8 KiB
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,不适用)
- OpenOCD:
- 调试器探针历史问题(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
内存布局(当前调试阶段,2026-10-02 用户确认)
- APP 直接链接在 0x08000000,VECT_TAB_OFFSET=0x00(Src/system_gd32e23x.c), 不考虑 Bootloader;正式发布时再切回 Bootloader 布局(0x08002000/54K + OTA 打包, 参见 hulk-mcu-firmware skill)
- 修改布局需同时改
LD/gd32e23x_flash.ld的 ORIGIN 与 VECT_TAB_OFFSET
开发进度
已完成
- LDC1612 驱动(初始化/单通道配置/原始值读取/状态检查)
- TMP112 驱动(初始化/温度读取/阈值/单次转换)
- RS485 命令体系:M1/M2(周期上报开关)、M3(涡流原始值)、M4(温度×10000)、 M5(温度补偿涡流值)、M6(标定数据:涡流+温度)、M999(版本)、M9999(复位)
- v1.0.1:涡流传感器温度标定方法与标定命令(M6)
- 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
- 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)
- 2026-10-02:解决 DAPLink 烧录器识别问题(Zadig WinUSB 驱动冲突); 新增 DAPLink 专用烧录 cfg 与任务
计划 / TODO
- 正式发布前切回 Bootloader 布局(0x08002000/54K)并适配 OTA/Ymodem 打包流程
- M5 温度补偿系数目前为 0(TEMP_COMP_COEFF_*),待标定后填入实际温漂系数
- 模板侧(gd32e23x_template_cmake_vscode)的 SEGGER RTT / CFG_ENABLE 宏体系 尚未同步到本项目(board_config.h 仍是 define/undef 风格),如需对齐另起任务