diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..c9fa09d --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,75 @@ +# 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//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 /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 + +## 开发进度 + +### 已完成 + +- [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 与任务 + +### 计划 / TODO + +- [ ] 正式发布前切回 Bootloader 布局(0x08002000/54K)并适配 OTA/Ymodem 打包流程 +- [ ] M5 温度补偿系数目前为 0(TEMP_COMP_COEFF_*),待标定后填入实际温漂系数 +- [ ] 模板侧(gd32e23x_template_cmake_vscode)的 SEGGER RTT / CFG_ENABLE 宏体系 + 尚未同步到本项目(board_config.h 仍是 define/undef 风格),如需对齐另起任务 diff --git a/CommunicationProtocol.md b/CommunicationProtocol.md index 451a69d..e1f1bf6 100644 --- a/CommunicationProtocol.md +++ b/CommunicationProtocol.md @@ -58,5 +58,28 @@ ### 4. 单次读取并发送板载温度传感器数据 -- M3 指令 单次读取并发送板载温度传感器数据 +- M4 指令 单次读取并发送板载温度传感器数据(TMP112,返回温度值×10000,4 字节有符号大端) - `D5 03 02 4D 34 86` + - 示例回复:`B5 F0 04 00 04 28 74 94`,有效数据 `0x00042874` = 272500,即 `27.25°C` + +### 5. 单次读取并发送温度补偿后的涡流传感器数据 + +- M5 指令 单次读取并发送温度补偿后的涡流传感器数据(补偿系数默认为 0,与 M3 等价) + - `D5 03 02 4D 35 87` + +### 6. 单次读取并发送标定数据(涡流原始值 + 温度值) + +- M6 指令 单次读取涡流原始值和板载温度值,用于温度标定 + - `D5 03 02 4D 36 88` + - 回复 9 字节:涡流原始值(4字节大端) + 0xFF + 温度值×10000(4字节大端) + - 示例回复:`B5 F0 09 01 AD BA DC FF 00 04 28 74 DC` + +### 7. 查询固件版本号 + +- M999 指令 返回固件版本号字符串,如 `v23.1.0.1`(板卡类型.主版本.次版本.修订号) + - `D5 03 04 4D 39 39 39 FF` + +### 8. 复位 MCU + +- M9999 指令 立即复位 MCU(无回复) + - `D5 03 05 4D 39 39 39 39 39`