- 新增 Mini212G2 传感器预配置指南文档,详细说明外部工具配置步骤
- 修复 DVP 头文件中的 SENSOR_TOTAL_LINES 定义,移除冗余行数
- 在 README 和模式配置文档中添加预配置指南的引用链接
- 新增 OpenSpec 变更记录,包含设计文档、提案、规格和任务清单
📦 build(openspec): 新增传感器预配置规范文档结构
- 在 openspec/changes/archive/ 下创建 2026-03-15-dvp-raw-data-pipeline 变更记录
- 包含设计文档、提案、规格说明和任务清单
- 在 openspec/specs/ 下创建 sensor-preconfig-guide 规格文档
5.5 KiB
5.5 KiB
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 模式输出的格式(协议文档等温阈值范围 -4005500 对应 -40.0550.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 等温阈值范围 -4005500 对应 -40.0550.0°C):
| 参数 | 值 |
|---|---|
| 单位 | 0.1°C/LSB |
| 编码 | 有符号 16-bit(int16_t) |
| 示例 | 25.0°C → 250,-10.0°C → -100,100.0°C → 1000 |
MCU 代码使用方式:
// 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 模式,首次上电后执行):
- 将传感器对准已知温度目标(如室温约 25°C 的平板物体)
- 通过串口 log 打印 DVP 帧中心像素原始值
- 确认中心像素值约等于 250(25.0°C × 10)
- 如输出值异常(如约 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),不属于启动配置 |