4. 摄像头输入接口与协议

在Qualcomm车载平台(如SA8155P、SA8295P、SA8650等)上,摄像头接入的物理层与协议层是两件必须分开理解的事。MIPI CSI-2定义的是“数据包长什么样、怎么组织帧和行”,而D-PHY与C-PHY定义的是“这些比特用什么电气方式、几条线、什么时钟关系传出去”。同一颗Sensor可以输出CSI-2 over D-PHY,也可以输出CSI-2 over C-PHY,但两者的Lane数、时钟结构、带宽计算和寄存器配置完全不同。调试时如果混淆这两层,很容易把“链路没起来”误判成“Sensor没出图”。

一、CSI-2、D-PHY、C-PHY的职责边界

CSI-2是协议层,核心概念包括Virtual Channel(VC)、Data Type(DT)、Packet Header/Footer、ECC与CRC。一条CSI-2链路上可以交织多个VC,例如同一路CSI接收器同时接前视8MP和环视2MP,通过VC区分。D-PHY是传统方案,采用1对差分时钟Lane加1~4对差分数据Lane,数据在HS(高速)与LP(低功耗)之间切换,HS模式下靠DDR采样,因此“数据率”通常写成Gbps/lane,而实际时钟频率是其一半。C-PHY则没有独立时钟Lane,采用3线一组(Triple)的A/B/C三线,通过三线之间的电平跳变组合编码,每个符号携带约2.28 bit,因此同样物理线数下C-PHY的吞吐更高,且EMI特性不同。

在Qualcomm平台侧,Camera子系统通常由CSIPHY(物理层)、CSID(CSI解码器)、ISP与IFE组成。CSIPHY负责D-PHY/C-PHY的电气接收与Lane映射,CSID负责CSI-2包解析、VC/DT过滤、错误统计。设备树中需要分别描述CSIPHY的Lane配置、CSID的VC映射,以及Sensor端的输出模式。三者必须一致,否则会出现“有clock但无帧”“帧头ECC错误”“行数不对”等典型现象。

Qualcomm平台摄像头输入链路:Sensor → CSIPHY → CSID → ISP/IFE Sensor 输出模式选择 CSI-2 over D-PHY CSI-2 over C-PHY VC / DT / 分辨率 / 帧率 CSIPHY(物理层) Lane映射 / 速率 / 时序 D-PHY:CLK + 1~4 Data C-PHY:3线一组 Triple HS/LP切换、Settle、Term CSID(解码) VC/DT过滤 ECC / CRC 校验 帧/行同步 错误计数 输出到ISP/IFE ISP / IFE RDI / PIX RAW处理 统计输出 关键调试观察点与常见问题定位 CSIPHY层 • Lane极性/顺序是否匹配 • 数据率是否超出PHY能力 • D-PHY/C-PHY模式是否选对 • 时钟是否连续/非连续 CSID层 • VC映射是否与Sensor一致 • DT是否被正确过滤 • ECC/CRC错误计数是否增长 • 帧长/行长是否匹配 系统级 • 供电/复位/时钟是否就绪 • I2C配置是否成功 • 带宽是否满足多路并发 • 温度/EMI是否导致误码

二、D-PHY与C-PHY的配置差异

以一颗8MP Sensor、30fps、RAW10输出为例。若采用D-PHY 4-lane,总数据率约为 3840×2160×10×30 ≈ 2.49 Gbps,加上消隐开销按1.15倍估算约2.86 Gbps,分摊到4条Lane约715 Mbps/lane,对应HS时钟约357 MHz。若改用C-PHY,同样带宽下通常只需3条Triple(即9根线),每Triple约953 Msps,符号率与D-PHY的“时钟频率”不是同一概念,不能直接套用。设备树中D-PHY需要配置clock-lanes与data-lanes,C-PHY则配置为三线组,且CSIPHY的settle参数、去加重、均衡设置不同。

在Qualcomm平台常见的设备树片段中,D-PHY模式大致如下:

csiphy0: qcom,csiphy@... {
    compatible = "qcom,csiphy-v2.0";
    reg = <...>;
    clocks = <...>;
    clock-names = "csiphy_clk";
    qcom,csiphy-vdd-supply = <...>;
    qcom,csiphy-csiv2-combo-mode = <0>; /* 0: D-PHY, 1: C-PHY */
    qcom,csiphy-lane-assign = <0 1 2 3>;
    qcom,csiphy-lane-polarity = <0 0 0 0>;
};

port {
    csiphy0_ep: endpoint {
        data-lanes = <1 2 3 4>;
        clock-lanes = <0>;
        link-frequencies = /bits/ 64 <357000000>;
    };
};

若切换为C-PHY,则combo-mode置1,data-lanes改为三线组描述,link-frequencies按符号率填写,同时Sensor寄存器中要切换到C-PHY输出模式。两者不一致时,CSIPHY可能完全收不到有效符号,表现为CSID无帧中断。

三、调试顺序与常见问题

建议按“供电与复位 → I2C通信 → Sensor输出模式 → CSIPHY链路 → CSID解析 → ISP出图”的顺序排查。第一步先确认Sensor的AVDD/DVDD/DOVDD、MCLK、PWDN、RESET时序符合手册;第二步用i2c-tools读取Sensor ID,确认地址与寄存器写入成功;第三步读取Sensor的0x0100等流开启寄存器,确认已进入输出状态;第四步通过Qualcomm的camss调试节点或内核日志查看CSIPHY是否锁定、CSID是否有帧中断和错误计数。

常见问题中,最典型的是“CSID有帧中断但图像花屏或全绿”。这通常不是链路没起来,而是VC/DT映射错误、行长度不匹配或RAW位宽配置错误。例如Sensor输出RAW10,但CSID按RAW8解析,就会导致每行像素错位。另一种是“帧率只有一半”,往往是因为D-PHY时钟连续/非连续模式配置与Sensor不一致,或MIPI速率被降档。C-PHY场景下还常见“换线后完全无数据”,多数是Triple内A/B/C三线顺序接错,C-PHY对线序比D-PHY更敏感。

调试时优先看CSID的ECC/CRC错误计数和帧中断计数,而不是只看ISP是否出图。链路层错误会先于图像异常暴露。

四、多路摄像头并发时的带宽与VC规划

车载环视通常需要4路2MP@30fps同时输入。若每路RAW10,单路约 1920×1080×10×30 ≈ 622 Mbps,四路合计约2.49 Gbps。Qualcomm平台的CSIPHY与CSID资源有限,需要确认每路是否独占PHY、还是通过VC复用到同一PHY。若复用,必须保证各Sensor的VC编号不冲突,且CSID的VC过滤表正确配置。带宽不足时,表现为丢帧、帧中断间隔抖动或CSID FIFO溢出。此时应优先降低单路分辨率或帧率,而不是盲目提高MIPI速率,因为PHY速率受限于PCB走线、连接器与EMI余量。

最后,D-PHY与C-PHY的选择不只是带宽问题,还涉及线束数量、连接器成本、EMI与走线难度。D-PHY生态成熟、调试工具多;C-PHY线少、带宽高,但对线序、阻抗和共模噪声更敏感。在Qualcomm平台上,两者都通过CSIPHY统一接入,但寄存器配置、设备树属性和调试观察点不同,必须成对理解、成对验证。