# 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`),不属于启动配置 |