generated from hulk/gd32e23x_template_cmake_vscode
docs: 修正协议文档命令编号并补全 M4~M9999 帧格式说明;新增项目 AGENTS.md
- 温度上报命令由 M3 笔误更正为 M4,补充 M4 回复示例
This commit is contained in:
@@ -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/<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
|
||||||
|
|
||||||
|
## 内存布局(当前调试阶段,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 风格),如需对齐另起任务
|
||||||
@@ -58,5 +58,28 @@
|
|||||||
|
|
||||||
### 4. 单次读取并发送板载温度传感器数据
|
### 4. 单次读取并发送板载温度传感器数据
|
||||||
|
|
||||||
- M3 指令 单次读取并发送板载温度传感器数据
|
- M4 指令 单次读取并发送板载温度传感器数据(TMP112,返回温度值×10000,4 字节有符号大端)
|
||||||
- `D5 03 02 4D 34 86`
|
- `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`
|
||||||
|
|||||||
Reference in New Issue
Block a user