zhoujie b69717b964 📝 docs(design): 新增系统设计文档集
 feat(system-overview): 创建系统总览文档
- 描述项目背景与硬件平台配置
- 提供 FreeRTOS 任务拓扑表(任务优先级、栈大小、职责)
- 详细说明系统启动序列和初始化依赖关系
- 绘制 2D/1D 状态机完整流程图
- 解释 TEMP_REQ 辅助通道工作机制
- 说明任务间同步机制(Frame_Ready_Flag、双缓冲 TX)

 feat(dvp-module-design): 创建 DVP 模块设计文档
- 提供 DVP 硬件连接引脚映射表
- 描述 DVP 时序配置(信号极性、工作模式)
- 解释 DMA ping-pong 行缓冲机制和切换逻辑
- 说明 DVP IRQ 帧组装流程(STR_FRM/ROW_DONE)
- 定义 FrameBuffer 数据格式和像素访问方式
- 说明 TMP 模式温度换算公式和字节序要求

 feat(qdx-protocol-design): 创建 QDX 协议设计文档
- 描述完整 TLV 帧结构(FrameHeader + TLV + CRC)
- 列出所有 Class/Type 映射表和用途说明
- 解释零拷贝 TX 缓冲区架构(HeadOffset 机制)
- 说明分片机制和最大载荷限制
- 定义 Flags 字段各位含义和使用场景

 feat(tcp-module-design): 创建 TCP 通信模块设计文档
- 描述双流连接架构(控制流 5511 / 数据流 5512)
- 说明握手流程和连接建立时序
- 解释心跳机制和 TCP Keepalive 配置
- 描述配置下发与缓存机制
- 说明数据发送队列和背压处理策略
- 解释 WCHNET 网络栈驱动任务工作机制

 feat(integration-guide): 创建对接集成指南
- 提供网络接入参数表(IP、端口、协议)
- 详细说明握手流程和配置下发格式
- 提供 2D/1D 温度帧解析方法和示例代码
- 说明检测结果上报和 NG 响应机制
- 解释 TEMP_REQ 按需截图工作方式
- 列出错误码表和对接故障排查步骤
2026-03-15 19:17:41 +08:00

51 lines
3.0 KiB
Markdown
Raw Permalink 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.

## Context
**项目背景**CH32V307WCU6 红外热像采集端固件,连接 Mini212G2 (256×192) 传感器,通过 1000M RGMII 以太网上报温度数据。核心功能已稳定运行,但缺少系统性设计文档。
**当前状态**:代码实现完整,包含 FreeRTOS 多任务、DVP+DMA 采集、QDX TLV 协议、双流 TCP 通信、2D/1D 双状态机。现有文档仅覆盖配置参数和协议接口,未形成模块级设计视图。
**读者**内部开发工程师理解实现逻辑、维护代码外部对接方ConfigServer/上位机开发团队,需接入协议)。
## Goals / Non-Goals
**Goals:**
- 为 5 个能力模块分别建立规范化的设计文档
- 通过 openspec specs 机制使文档可版本追踪和演进
- 提供外部对接方可直接使用的集成指南(无需阅读源码)
**Non-Goals:**
- 不修改任何代码
- 不覆盖硬件电气原理图(属于硬件文档)
- 不重复协议 HEX 命令表(已在 `Doc/Mini212G2预配置指南.md`
## Decisions
### 决策 1每个能力模块生成独立的 spec 文件Doc/ 目录存放最终可交付文档
**理由**openspec 的 `specs/<capability>/spec.md` 是规范锚点,实际可读性文档放在 `Doc/设计文档/` 下,分工清晰。每个 spec 描述 WHAT需求Doc 中文件描述 HOW实现细节
**备选方案**:一个大 spec 文件 → 拒绝spec 文件过大时 apply 阶段难以跟踪单个需求。
### 决策 2集成指南integration-guide作为独立能力单独维护
**理由**:外部对接方只需集成指南,不需要理解内部模块设计。独立文件避免外部文档被内部修改污染,版本可单独管控。
### 决策 3文档覆盖既有代码的实际行为不做超前设计
**理由**这是文档补全变更不是功能变更。spec 反映的是代码已实现的行为SHALL = 当前实现保证),不引入新约束。
### 决策 42D 状态机和 1D 状态机各自独立描述,不合并
**理由**两者触发逻辑、收集方式、发送格式完全不同2D 矩阵 vs 1D 时间序列)。合并描述会造成混淆。两者通过 `Config2D.Enabled` / `Config1D.Enabled` 互斥使能。
## Risks / Trade-offs
- **风险**:文档编写时代码继续演进,导致文档过时 → **缓解**:在 spec 中使用 SHALL 约束当前行为,代码变更时触发 spec 更新 PR 流程。
- **风险**integration-guide 中的协议字段描述与实际结构体不一致 → **缓解**:所有字段描述直接从 `qdx_protocol.h` 提取source of truth 为代码。
- **权衡**:文档详细程度 vs 维护成本 → 选择"关键路径详细,边缘情况参考注释"策略,避免过度文档导致维护负担。
## Open Questions
- Doc/ 下设计文档是否需要中英双语(供外部团队使用)?当前按中文优先。
- integration-guide 是否需要提供 Python/C# 示例解析代码片段?后续可作为独立变更补充。