2. Sensor硬件接口与协议基础

Sensor驱动开发的第一步不是写寄存器,而是把“物理连接”和“协议时序”这两件事看清楚。联咏(Novatek)平台接入一颗Sensor,通常涉及四类信号:图像数据接口(MIPI CSI-2、DVP或LVDS)、控制总线(I2C)、时钟与同步信号(MCLK、PCLK、HSYNC、VSYNC)、以及电源与复位(AVDD、DOVDD、DVDD、PWDN、RESET)。驱动代码里所有“读不到ID、出图花屏、帧率不对”的问题,最终都要回到这几条线上去定位。

一、三种图像数据接口的定位差异

MIPI CSI-2是当前主流。它用差分对传输,包含1对时钟lane和1~4对数据lane,数据以包(Packet)形式组织:短包承载帧起始FS、帧结束FE、行起始LS、行结束LE等同步信息,长包承载图像行数据。每条lane速率可达数百Mbps到Gbps级,因此走线必须严格等长、阻抗100Ω差分、远离电源和MCLK。驱动侧需要配置的核心参数是lane数、每lane速率、虚拟通道VC、数据类型DT(RAW8/RAW10/RAW12/YUV422)以及连续时钟模式。

DVP是并口,靠PCLK采样,配合HSYNC/VSYNC区分行场,数据位宽8/10/12bit。它的优点是时序直观、无需SerDes,缺点是引脚多、速率受限,一般用于低分辨率或低成本模组。DVP最容易出问题的是极性:PCLK上升沿还是下降沿采样、HSYNC/VSYNC高有效还是低有效,必须与Sensor规格书一致,否则会出现整帧偏移或左右镜像。

LVDS介于两者之间,用低压差分串行传输,常见于车载和工业Sensor,多为1对时钟加若干对数据,配合特定的帧同步码。它比DVP抗干扰强,但协议不像CSI-2那样标准化,往往需要按厂商的串行格式解析。

Sensor 与联咏平台接口连接关系 Sensor 模组 像素阵列 + ISP MIPI TX / DVP / LVDS I2C Slave (0x36) MCLK 输入 24MHz PWDN / RESET AVDD/DOVDD/DVDD 联咏 SoC MIPI CSI-2 RX DVP 并口 / LVDS RX I2C Master CLK 输出 GPIO 控制 PMIC 供电 差分对 · 1~4 lane · 包同步 PCLK/HSYNC/VSYNC 或 LVDS 串行 SCL / SDA 双向 · 400kHz MCLK 24MHz 主时钟 PWDN / RESET 电平控制 多路电源轨供电 数据流方向:Sensor → SoC;控制流方向:SoC → Sensor

二、I2C控制总线:驱动真正“动手”的地方

图像接口负责搬运像素,I2C负责让驱动能读写Sensor内部寄存器。典型Sensor的7位从地址是0x36(写0x6C、读0x6D),部分模组可通过SID引脚切换为0x37等。上电后驱动第一件事就是读ID寄存器,例如OV系列常见0x300A/0x300B,返回0x56/0x40即识别为OV5640。读不到ID时,按顺序排查:I2C地址是否正确、上拉电阻是否4.7kΩ、供电是否到位、RESET是否已释放。

寄存器写入通常采用16位地址+8位数据的格式,例如把0x0103写0x01执行软复位:

i2c_write(0x36, 0x0103, 0x01);   // 软复位
mdelay(5);
i2c_write(0x36, 0x0301, 0x0a);   // PLL 预分频
i2c_write(0x36, 0x0303, 0x01);   // PLL 倍频
i2c_write(0x36, 0x0305, 0x40);   // PLL 倍频
i2c_write(0x36, 0x3503, 0x00);   // 关闭自动曝光手动模式

注意I2C速率:标准100kHz、快速400kHz,联咏平台多数Sensor初始化用400kHz即可,但部分模组在低电压下需要降到100kHz。另外,写寄存器之间要留足延时,尤其是软复位、PLL切换、模式切换这三类操作,规格书里通常给出ms级等待要求,忽略它就会出现“写进去了但没生效”。

三、上电时序与复位:最容易被忽视的失败点

Sensor规格书里有一张Power-On Sequence图,它规定了各路电源、MCLK、PWDN、RESET、I2C之间的先后顺序。典型要求是:先供AVDD(模拟,2.8V),再供DOVDD(I/O,1.8V),最后供DVDD(数字核心,1.2V);每路之间间隔至少1ms;MCLK必须在RESET释放前稳定;RESET低电平保持至少1ms后再拉高,拉高后等待20ms以上才能访问I2C。

如果顺序颠倒,比如DVDD先于AVDD上电,可能出现内部ESD二极管导通、漏电流增大,表现为ID能读到但出图异常,或者干脆识别失败。联咏平台的驱动通常把上电动作放在sensor_power_on()里,用GPIO控制PWDN和RESET,用regulator框架控制各路电源,顺序必须严格按规格书来。

常见误区:把RESET和PWDN接反,或者RESET一直拉低。RESET低有效时,Sensor处于复位状态,I2C不响应;PWDN拉高进入掉电模式,同样不响应。两者极性务必对照规格书确认。

四、规格书解读:驱动工程师该看哪几页

拿到一份Sensor规格书,不需要从头读到尾,重点抓五块内容:

  • Pin Description:确认每个引脚功能、方向、电平,尤其是PWDN/RESET的有效极性。
  • Power-On Sequence:拿到各路电源的电压值、上电顺序、延时要求。
  • I2C Timing:确认从地址、最大SCL频率、读写格式(8位还是16位寄存器地址)。
  • Register Map:重点看ID寄存器、软复位、PLL配置、输出格式(RAW/MIPI)、帧率相关寄存器。
  • MIPI/DVP Timing:确认lane数、数据速率、连续时钟、极性配置。

以一颗1080p@30fps的MIPI Sensor为例,规格书给出:2 lane、每lane 720Mbps、RAW10、MCLK 24MHz。驱动侧就要据此计算MIPI接收端配置:总带宽 = 2 × 720Mbps = 1440Mbps,1080p@30fps RAW10所需带宽 ≈ 1920×1080×30×10 ≈ 622Mbps,余量充足。如果lane数配错或速率配低,会出现丢帧、花屏甚至无法出图。

实操建议:调试新Sensor时,先用示波器或逻辑分析仪抓MCLK、RESET、I2C三路信号,确认上电时序和ID读取正常,再去调MIPI参数。顺序反了,会在图像链路上浪费大量时间。