ch32v307_camera/doc/Mini212G2预配置指南.md
zhoujie c347c988f2 📝 docs(dvp): 更新传感器预配置文档并修复行数定义
- 新增 Mini212G2 传感器预配置指南文档,详细说明外部工具配置步骤
- 修复 DVP 头文件中的 SENSOR_TOTAL_LINES 定义,移除冗余行数
- 在 README 和模式配置文档中添加预配置指南的引用链接
- 新增 OpenSpec 变更记录,包含设计文档、提案、规格和任务清单

📦 build(openspec): 新增传感器预配置规范文档结构

- 在 openspec/changes/archive/ 下创建 2026-03-15-dvp-raw-data-pipeline 变更记录
- 包含设计文档、提案、规格说明和任务清单
- 在 openspec/specs/ 下创建 sensor-preconfig-guide 规格文档
2026-03-15 18:03:55 +08:00

150 lines
5.5 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.

# Mini212G2 模组预配置指南
> **适用场景**MCU 端 `SENSOR_UART_ENABLE=0`传感器通过外部工具USB/串口调试软件)预先配置并保存到 Flash。
> **配置工具**:可使用厂家上位机软件或通用串口调试工具,连接传感器 USB 接口或 UART 接口115200 8N1
> **参考文档**`Doc/Mini212G2串口通讯协议.md`、`Doc/Mini212G2系列用户手册.md`
---
## 必须配置的参数(共 4 项)
以下参数与 MCU DVP 驱动强耦合,任意一项配置错误将导致图像数据完全错误。
### 1. 数字口类型 → CMOS
| 属性 | 值 |
|------|-----|
| 设置值 | CMOS |
| 串口命令 | `55 AA 07 02 01 02 00 00 00 02 04 F0` |
| 原因 | MCU 使用 DVP 8-bit 并行接口接收数据,必须选 CMOS 模式 |
---
### 2. CMOS 接口 → **CMOS8(LSB)** ⛔ 关键,必须为 LSB
| 属性 | 值 |
|------|-----|
| **设置值** | **CMOS8(LSB)** |
| 串口命令 | `55 AA 07 02 01 04 00 00 00 02 02 F0` |
| ❌ 禁止设置 | CMOS8(MSB) → `55 AA 07 02 01 04 00 00 00 01 01 F0` |
**原因(字节序)**
CH32V307 是小端序Little-Endian处理器DVP DMA 按字节顺序依次写入 `FrameBuffer`,代码通过 `(uint16_t*)FrameBuffer` 直接读取 16-bit 温度值:
```
FrameBuffer[row][0] → uint16_t 低字节bits[7:0]
FrameBuffer[row][1] → uint16_t 高字节bits[15:8]
```
| 传感器模式 | DVP 先收到 | uint16_t 读取结果 |
|---|---|---|
| LSB低字节先发 | 低字节 | ✅ 正确 |
| MSB高字节先发 | 高字节 | ❌ 字节反序,温度值完全错误 |
---
### 3. CMOS 内容 → **TMP** ⛔ 关键,必须为 TMP不是 Y16
| 属性 | 值 |
|------|-----|
| **设置值** | **TMP** |
| 串口命令 | `55 AA 07 02 01 03 00 00 00 08 0F F0` |
| ❌ 禁止设置 | Y16 → `55 AA 07 02 01 03 00 00 00 02 05 F0` |
> **Mini212G2 是测温型产品,支持 TMP 模式。** 若不确定,使用前请与厂家确认。
**为什么必须选 TMP不能选 Y16**
| 模式 | 数据含义 | MCU 是否可直接使用 |
|------|----------|--------------------|
| **TMP温度矩阵** | 传感器内部已完成辐射定标16-bit 值 = 实际温度 × 10单位 0.1°C/LSB | ✅ 直接使用,与代码假设完全匹配 |
| Y16红外辐射原始数据 | 原始 ADC 计数值,不是温度,数值越大表示越热但无对应温度 | ❌ 需要读出厂标定参数 + 手写温度解算公式才能转换为温度 |
MCU 代码(`qdx_preprocess.c`)将像素值直接当 0.1°C/LSB 的温度使用——这正是 **TMP 模式输出的格式**(协议文档等温阈值范围 -400~5500 对应 -40.0~550.0°C 即 0.1°C/LSB。若配置为 Y16所有温度判断将得到错误结果但系统不会报错。
其他禁止选项:
- `TMP+参数行`(参数行会打乱行计数,`SENSOR_HEIGHT=192` 对应到 193 行后中断异常)
- `TMP+YUV422`YUV 通道数据会覆盖温度帧)
---
### 4. 帧率 → 25Hz 或 30Hz
| 属性 | 值 |
|------|-----|
| 推荐值 | 25Hz |
| 串口命令25Hz | `55 AA 07 02 01 05 00 00 00 00 01 F0` |
| 串口命令30Hz | `55 AA 07 02 01 05 00 00 00 00 01 F0` *(参见协议文档帧率表)* |
---
## 配置后必须保存
配置完成后发送保存命令,否则断电后配置丢失:
```
保存设置55 AA 07 01 00 04 00 00 00 01 03 F0
```
> ⚠️ 保存后重新上电,配置才从 Flash 生效。
---
## TMP 模式温度值格式确认
Mini212G2 TMP 模式输出格式(协议文档 §2.4.5 等温阈值范围 -400~5500 对应 -40.0~550.0°C
| 参数 | 值 |
|------|----|
| 单位 | 0.1°C/LSB |
| 编码 | 有符号 16-bitint16_t |
| 示例 | 25.0°C → 250-10.0°C → -100100.0°C → 1000 |
MCU 代码使用方式:
```c
// qdx_preprocess.c 中直接将像素值当温度0.1°C/LSB
// 示例testPattern 阈值
#define TEMP_RAW(deg_c) ((uint16_t)((deg_c) * 10))
// 35.0°C → 35080.0°C → 80090.0°C → 900
```
**联调验证步骤**TMP 模式,首次上电后执行):
1. 将传感器对准已知温度目标(如室温约 25°C 的平板物体)
2. 通过串口 log 打印 DVP 帧中心像素原始值
3. 确认中心像素值约等于 **250**25.0°C × 10
4. 如输出值异常(如约 2980 或约 7450说明配置的不是纯 TMP 模式,需重新检查步骤 3 的配置
| 实测中心值(约) | 说明 |
|-----------------|------|
| ~250 | ✅ TMP 0.1°C/LSB与代码一致 |
| ~2980 | ❌ 可能是开尔文模式K×10配置错误 |
| ~7450 | ❌ 可能是 Y16 原始 ADC 值,应切换为 TMP 模式 |
---
## 配置命令汇总表
| 步骤 | 功能 | 命令HEX |
|------|------|-------------|
| 1 | 数字口 → CMOS | `55 AA 07 02 01 02 00 00 00 02 04 F0` |
| 2 | **CMOS 接口 → CMOS8(LSB)** | `55 AA 07 02 01 04 00 00 00 02 02 F0` |
| 3 | **CMOS 内容 → TMP** | `55 AA 07 02 01 03 00 00 00 08 0F F0` |
| 4 | 帧率 → 25Hz | `55 AA 07 02 01 05 00 00 00 00 01 F0` |
| 5 | **保存设置** | `55 AA 07 01 00 04 00 00 00 01 03 F0` |
> 每条命令发送后等待 ACK`55 AA 01 00 01 F0`,收到后再发下一条。
---
## 不需要配置的项目
| 参数 | 说明 |
|------|------|
| 外同步 | 保持默认关闭内同步MCU DVP 作为接收方 |
| VSYNC/HSYNC 极性 | MCU 侧已配置 `VSYNC active-high`,传感器默认输出一致 |
| 分辨率 | Mini212G2 固定 256×192无需配置 |
| NUC 快门补偿 | 运行时按需触发(`55 AA 07 02 01 08 00 00 00 01 0D F0`),不属于启动配置 |