- 新增 Mini212G2 传感器预配置指南文档,详细说明外部工具配置步骤
- 修复 DVP 头文件中的 SENSOR_TOTAL_LINES 定义,移除冗余行数
- 在 README 和模式配置文档中添加预配置指南的引用链接
- 新增 OpenSpec 变更记录,包含设计文档、提案、规格和任务清单
📦 build(openspec): 新增传感器预配置规范文档结构
- 在 openspec/changes/archive/ 下创建 2026-03-15-dvp-raw-data-pipeline 变更记录
- 包含设计文档、提案、规格说明和任务清单
- 在 openspec/specs/ 下创建 sensor-preconfig-guide 规格文档
150 lines
5.5 KiB
Markdown
150 lines
5.5 KiB
Markdown
# 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-bit(int16_t) |
|
||
| 示例 | 25.0°C → 250,-10.0°C → -100,100.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 → 350,80.0°C → 800,90.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`),不属于启动配置 |
|