4. 摄像头初始化与I2C控制链路

在R-Car环视系统中,摄像头链路并不是“插上就能出图”的即插即用设备。每一路摄像头背后都包含串行器(Serializer,如TI DS90UB953)、同轴线缆、解串器(Deserializer,如DS90UB954)以及R-Car端的CSI-2接收通路。R-Car要真正拿到图像,必须先在控制层面完成一条完整的I2C初始化链路:R-Car通过I2C访问解串器,解串器再通过其内部I2C透传通道访问远端串行器,最终由串行器配置图像传感器。这条链路中任何一环的时序、地址或寄存器配置出错,都会表现为“无图、黑屏、花屏或间歇性丢流”。

一、上电时序:先供电、后复位、再I2C

摄像头模组的典型上电顺序是:先建立各路电源(如1.8V、1.2V、2.8V或3.3V),待电源稳定后再释放串行器的PWDN(掉电)引脚,最后才允许I2C通信。以DS90UB953为例,其PWDN为低有效,通常要求电源稳定后至少延时1ms再拉高PWDN,并在PWDN释放后等待约1.5ms才可进行I2C访问。若R-Car在串行器尚未就绪时就发起I2C读写,会得到NACK或读到全0/全1的无效数据。

解串器侧同样有上电要求。DS90UB954的PDB(Power Down Bar)需在电源稳定后拉高,且其内部PLL锁定需要一定时间。工程上常见的做法是:R-Car先通过GPIO控制解串器PDB,延时约10ms后再访问解串器寄存器;确认解串器ID可读后,再通过解串器的BACK_CHANNEL或I2C透传去访问串行器。整个上电时序可以用下面的信号链关系图来理解。

R-Car 摄像头 I2C 控制链路与上电时序关系 R-Car I2C Master GPIO / CSI-2 RX 解串器 DS90UB954 I2C 地址 0x30 (示例) I2C 透传 / BACK_CHANNEL 串行器 DS90UB953 I2C 地址 0x18 (示例) PWDN 低有效 图像传感器 I2C 地址 0x36 (示例) I2C 直连 I2C 透传 I2C 配置 同轴线缆 上电时序(示例延时) 电源稳定 PDB 拉高 延时 ≥10ms 读解串器 ID 透传配置串行器/传感器 时间 → 过早 I2C → NACK / 无效数据 PLL 未锁定 → 透传失败 地址冲突 → 读写异常

二、寄存器配置:从解串器到传感器的逐级写入

上电时序满足后,R-Car开始按“解串器→串行器→传感器”的顺序写寄存器。以DS90UB954+DS90UB953+某200万像素传感器为例,典型配置流程如下:

  1. 配置解串器基础参数:写入0x01寄存器设置复位与使能,写入0x02设置I2C透传速率,写入0x4C~0x4F配置CSI-2输出通道与虚拟通道映射。
  2. 建立反向通道与透传:通过解串器的0x58~0x5F寄存器设置串行器别名和透传地址,使R-Car可以用“解串器地址+透传偏移”的方式访问串行器。
  3. 配置串行器:写入0x01设置PLL使能,写入0x02设置时钟模式,写入0x0C~0x0F配置GPIO和传感器时钟输出。
  4. 配置传感器:通过串行器透传,写入传感器的曝光、增益、输出格式、分辨率等寄存器,最后写入启动流寄存器。

每一步写入后都应回读校验。例如,配置完解串器后读取0x00寄存器,正常应返回器件ID(DS90UB954为0x60左右,具体以数据手册为准)。若回读值与写入值不一致,说明I2C链路存在异常,需先排查硬件再继续。

三、解串器与串行器的协同关系

解串器与串行器之间通过同轴线缆建立正向视频通道和反向控制通道。正向通道传输图像数据,反向通道传输I2C控制命令和中断信号。R-Car并不直接与串行器通信,而是通过解串器的I2C透传机制“借道”访问。因此,解串器的透传配置必须与串行器的地址、速率匹配。常见协同参数包括:

参数解串器侧串行器侧说明
I2C地址0x30(示例)0x18(示例)7位地址,需与驱动一致
透传速率0x02寄存器—通常100kHz或400kHz
反向通道速率0x58~0x5F0x02需双方匹配
PLL锁定0x1C bit00x1C bit0锁定后方可透传

四、常见I2C通信故障排查

当摄像头无图时,I2C故障是最常见的原因之一。排查应遵循“先本地、后远端;先电气、后协议”的顺序。

1. 解串器本身无法访问。用i2cdetect扫描R-Car的I2C总线,若解串器地址不出现,检查:PDB是否已拉高、I2C上拉电阻是否正常(通常4.7kΩ)、SDA/SCL是否短路或反接、解串器供电是否达到数据手册要求。

2. 解串器可访问但串行器不可访问。读取解串器的0x1C寄存器,确认PLL锁定位是否为1;检查透传地址是否与串行器实际地址一致;用示波器观察同轴线缆上的反向通道信号是否有畸变。若PLL未锁定,通常是线缆质量差、连接器接触不良或串行器未正常上电。

3. 串行器可访问但传感器不可访问。确认串行器的GPIO是否已配置为传感器I2C透传模式;检查传感器供电和复位时序;用i2cget逐级读取传感器ID寄存器。若传感器ID为0x00或0xFF,说明传感器未就绪或地址错误。

4. 间歇性通信失败。常见于线缆屏蔽不良、电源纹波过大或I2C总线电容超标。可将I2C速率从400kHz降至100kHz测试;检查电源纹波是否超过数据手册限值;确认总线电容不超过400pF。

排查时建议准备一份“I2C链路检查表”:①解串器ID可读;②PLL锁定位为1;③串行器ID可读;④传感器ID可读;⑤关键寄存器回读一致;⑥CSI-2有数据输出。逐项确认,可快速定位故障层级。

最后需要强调,I2C初始化只是摄像头链路的第一步。寄存器配置完成后,还需确认CSI-2接收端已正确配置虚拟通道和数据类型,否则即使I2C全部正常,R-Car仍然无法收到有效图像。实际调试中,建议先用i2cget/i2cset手动验证关键寄存器,再将确认无误的配置序列固化到驱动中,避免反复上电试错。