3. Sensor通信接口:MIPI CSI-2物理层与协议层、I2C/SPI控制接口详解
在嵌入式视觉系统中,Sensor与主控SoC之间的通信分为两条独立的链路:数据通道(MIPI CSI-2)负责高速传输图像像素数据;控制通道(I2C/SPI)负责寄存器读写、参数配置与AF对焦控制。本章从物理层到协议层拆解这两条链路,为后续初始化与AF联调打下硬件基础。
3.1 MIPI CSI-2 物理层:差分信号与D-PHY
MIPI CSI-2 物理层基于 D-PHY 标准,采用差分信号传输,具有低功耗、低电磁干扰(EMI)的特点。每个数据通道由一对差分线(Dp/Dn)组成,时钟通道独立传输DDR时钟。
关键指标: 单通道速率通常为 400 Mbps ~ 2.5 Gbps;4-lane 配置下总带宽可达 10 Gbps 以上,满足 4K@60fps 原始数据需求。
实战提示: 硬件设计时,MIPI 差分对必须等长布线(误差 < 5 mm),且远离高频开关电源,否则会导致眼图闭合、误码率上升。
3.2 MIPI CSI-2 协议层:数据包结构与帧格式
协议层定义了数据如何打包成 长数据包 和 短数据包,以及帧起始(FS)、帧结束(FE)、行起始(LS)等同步机制。
| 包类型 | 标识符 | 内容 | 长度 |
|---|---|---|---|
| 帧起始短包 | 0x00 | 帧号、时间戳 | 4 字节 |
| 帧结束短包 | 0x01 | 帧号、校验 | 4 字节 |
| 行起始短包 | 0x02 | 行号 | 4 字节 |
| 图像数据长包 | 0x2B / 0x2C | RAW / YUV 像素数据 | 可变(最大 64 KB) |
| 模式 | 时钟频率 | 最大传输速率 | 适用场景 |
|---|---|---|---|
| 标准模式 | 100 kHz | 100 kbps | 初始化配置、低速率场景 |
| 快速模式 | 400 kHz | 400 kbps | 常用模式,AF 对焦控制 |
| 快速+模式 | 1 MHz | 1 Mbps | 高帧率配置更新 |
实战建议: 初始化阶段使用 100 kHz 确保兼容性;AF 对焦控制建议提升至 400 kHz 以减少写入延迟。若 Sensor 支持,可启用 I2C 连续写模式(Auto-Increment)批量写入寄存器。
3.3.2 I2C 读写流程示例
以下为 Sensor 寄存器 0x3012 写入 0x42 的典型 I2C 时序(16 位寄存器地址):
// I2C 写操作:设备地址 0x6C (7-bit) + 写位 0
START | 0xD8 (0x6C << 1 | 0) | ACK | 0x30 (Reg High) | ACK | 0x12 (Reg Low) | ACK | 0x42 (Data) | ACK | STOP
// I2C 读操作:先写寄存器地址,再重新发起读
START | 0xD8 | ACK | 0x30 | ACK | 0x12 | ACK | REPEATED START | 0xD9 (读) | ACK | 0x42 (Data) | NACK | STOP
调试陷阱: 部分 Sensor 在 I2C 读操作前必须发送 STOP 信号,否则会返回错误数据。务必查阅 Sensor 手册的“Read Sequence”章节。
3.4 SPI 控制接口:高速配置场景
SPI(Serial Peripheral Interface)采用四线制:SCLK、MOSI、MISO、CS。相比 I2C,SPI 速率更高(可达 10 MHz+),适合需要批量写入大量寄存器的高端 Sensor。
| 特性 | I2C | SPI |
|---|---|---|
| 线数 | 2 (SCL, SDA) | 4 (SCLK, MOSI, MISO, CS) |
| 最大速率 | 1 MHz (Fast+) | 10 ~ 50 MHz |
| 寻址方式 | 设备地址 + 寄存器地址 | 片选 + 命令/地址 |
| 多设备支持 | 总线式,地址区分 | 独立片选线 |
| 典型应用 | 寄存器配置、AF 控制 | 固件下载、批量校准参数 |
选型原则: 消费类 Sensor 普遍使用 I2C(引脚少、成本低);工业/车载 Sensor 倾向 SPI(抗干扰强、速率高)。AF 对焦控制通常走 I2C,因为数据量小且需要频繁读写。
3.5 控制接口在 AF 对焦中的实战应用
AF 对焦控制通常通过 I2C 写入 VCM(音圈马达)驱动芯片的寄存器来实现。典型流程如下:
- 初始化 VCM 驱动: 写入模式寄存器,设置驱动电流范围(如 0 ~ 1023 DAC 值)。
- 写入目标位置: 向 VCM 数据寄存器写入 10 位或 12 位位置码。
- 读取状态: 轮询 VCM 状态寄存器,确认马达到位。
- 异常处理: 若超时未到位,执行复位或重新校准。
// 示例:通过 I2C 控制 VCM 移动到位置 512 (0x200)
// VCM 设备地址: 0x18, 数据寄存器: 0x03
uint16_t target_pos = 512; // 10-bit 范围 0~1023
// 写操作:寄存器地址 0x03,数据高字节 + 低字节
i2c_write(0x18, 0x03, (target_pos >> 8) & 0x03); // 高 2 位
i2c_write(0x18, 0x04, target_pos & 0xFF); // 低 8 位
// 读取状态寄存器 0x01,检查 bit[0] 是否置位
uint8_t status = i2c_read(0x18, 0x01);
if (status & 0x01) {
printf("AF 到位\n");
} else {
printf("AF 移动中或异常\n");
}
联调技巧: 使用 I2C 总线分析仪抓取 AF 控制时序,确认写入值与 Sensor 实际响应一致。部分 VCM 驱动需要等待 5~10 ms 才能读取到位状态,切勿连续轮询导致总线阻塞。
3.6 本章小结
- MIPI CSI-2 物理层 基于 D-PHY 差分信号,时钟 Lane 独立,数据 Lane 可配置 1/2/4 条。
- 协议层 以 FS/FE 短包界定帧边界,行数据长包携带像素,ECC/CRC 保障传输可靠性。
- I2C 是 Sensor 控制的主流接口,两线制、支持多设备,速率 100 kHz ~ 1 MHz。
- SPI 四线制、速率更高,适用于固件下载和批量参数写入。
- AF 对焦控制 通常走 I2C,通过 VCM 驱动寄存器写入位置码,需注意时序等待和状态轮询。