LV011-点亮Sensor常见问题
Sensor 点亮(Bring-up)的排查顺序是固定的:从下往上、逐级收窄——先确认供电与 I2C 能通,再确认 MCLK 在跑,再确认初始化序列写对,最后查 MIPI 链路与 CSI-2 收包。每一级都有独立的判据,越级排查只会把问题搅在一起。
本文按这四级组织,现象与原因的对应关系以本板(RK3568 + OV8858)为准。器件接法与可测波形见《LV005-MIPI-Sensor接口原理图》,时钟与链路参数的换算见《LV001-Sensor时钟与MIPI接口配置》,HS/LP 状态序列见《LV015-HS与LP模式》。
一、 硬件连接与供电
1. I2C 通信失败
| 问题现象 | 可能原因 | 排查方法 |
|---|---|---|
扫描不到从机地址,读 ID 全 0xFF | 1. SDA/SCL 接错或虚焊 2. 上拉电阻缺失或阻值不当 3. 器件仍在复位或掉电态 4. 7 位从机地址写错(OV8858 为 0x36,8 位写地址 0x6C) 5. IO 电平不匹配 | 1. 对照原理图量通断 2. 上拉阻值按总线电平取 2.2 kΩ~4.7 kΩ 3. 确认复位已释放、掉电脚处于工作态 4. 用 i2cdetect -y -r 复核地址 |
| 地址能扫到,读写寄存器无应答或数据异常 | 1. 用 SMBus 字节操作去访问 16 位寄存器地址 2. SCCB(CCI)与标准 I2C 的时序差异 3. 总线速率过高 | 1. 改用 i2ctransfer 显式给出 2 字节寄存器地址 2. 把 SCL 降到 100 kHz 重试 3. 用示波器看第 9 个时钟是否有 ACK |
| 偶尔能通、偶尔超时 | 1. 上拉过弱叠加容性负载 2. 走线与其他信号串扰 3. 电源未稳就开始通信 | 1. 降低速率、减小上拉、缩短走线 2. 确认各路电源上电完成后再发第一条命令 |
2. 供电与上电顺序
(1)三路电源必须同时齐备且幅值正确:DOVDD 1.8 V(IO,决定 I2C 电平)、AVDD 2.8 V(模拟)、DVDD 1.2 V(数字内核)。DVDD 偏低会让 PLL 失锁,MIPI 直接没有突发。
(2)上电顺序与各路之间的延时以数据手册为准。常见有 DVDD → AVDD → DOVDD 的顺序,也有要求先起 AVDD 的器件,照抄别家顺序是常见错误。
(3)AVDD 的纹波会直接进图像。去耦不足表现为固定条纹或噪点,量电源时要用 AC 耦合看纹波,只看直流值看不出问题。
(4)MIPI 差分对的回流路径要完整,地不完整时 HS 段误码率上升,现象是零星错点而非整帧丢失。
3. 复位与掉电引脚的极性
| 引脚 | 常见语义 | 本项目 OV8858 的接法 | 判据 |
|---|---|---|---|
CAM_RSTn | 复位输入,低有效,数据手册引脚名为 XSHUTDN | 模组 J1 第 6 脚,由主板侧驱动 | 低电平期间保持复位;脉宽需大于 2 ms,一直为低则不会出图 |
CAM_PWDN | 掉电控制,极性随厂商、随模组走线而异 | 模组 J1 第 8 脚,接法待核对:模组与转接板原理图只显示该网络引出到主板,未显示上拉或接地 | 若被固定在掉电有效电平上,sensor 会一直没有输出 |
【注意】
“PWDN 为低”只是部分器件的约定,不能当通则,反过来“PWDN 恒为高”同样不能当通则。排查时先看原理图上该脚接了什么、再查手册的有效电平,否则会把正常态当成故障;本板这一脚需回底板原理图确认,见《LV005-MIPI-Sensor接口原理图》第 4 节。复位同理:不是“初始化前保持高”,而是先保持有效、再释放,释放后还需等不少于 8192 个 XVCLK 周期才能发第一条 SCCB 事务。复位释放的等待时间不足,是 bringup 阶段最高频的失败点。
二、 时钟与 MIPI 链路
1. MCLK(xvclk)
(1)频率必须与寄存器表的基准一致。本板为 24 MHz,寄存器表里的 PLL 系数全按它反推;驱动会主动校验,不一致时打印 xvclk mismatched, modes are based on 24MHz。
(2)在模组 MCLK 脚上量波形:需要连续 24 MHz 方波、幅值达到 IO 电平。停振或频率不符时内部 PLL 不锁,之后所有信号都不会出现。
(3)走线过长或串阻不匹配会出现过冲与振铃,表现为 PLL 偶发失锁、帧率抖动。
2. 链路带宽是否自洽
MIPI 侧的配置目标只有一个:带宽够。三组参数必须闭合:
每条 lane 数据率 = link_freq × 2 (DDR 双沿)
pixel_rate = link_freq × 2 × lanes ÷ 位宽
帧率 = pixel_rate ÷ (HTS × VTS) HTS = width + HBLANK,VTS = height + VBLANK判据只有一条:
link_freq × 2 × lanes ≥ width × height × fps × 位宽(1)左式是链路能力,右式是像素需求。不满足时依次表现为丢行、花屏、完全不出图。
(2)Pixel Clock = (Width + H_Blank) × (Height + V_Blank) × FPS 只给出像素率,是上面第三式的变形(pixel_rate = HTS × VTS × 帧率),不能替代带宽判据。只算它而漏掉位宽与 lane 数,就是“算得对却花屏”的典型原因。
(3)本板取值:link_freq 360 MHz、2 lane、RAW10,pixel_rate = 360 × 2 × 2 ÷ 10 = 144 Mpixel/s,与全分辨率模式的 3880 × 2474 × 15 ≈ 144e6 吻合。
3. MIPI 差分链路与 lane 配置
| 检查项 | 错误表现 | 处理方式 |
|---|---|---|
| 差分对 P/N 反接 | 完全无图或周期性错行 | 多数 SoC 的 D-PHY 支持极性反转,可在设备树或 PHY 配置中修正,不必改板 |
| lane 顺序与 SoC 映射不符 | 无图或数据错位 | 核对端点里的 data-lanes、clock-lanes 与原理图物理 lane 序号 |
| lane 数与寄存器表不匹配 | 出图异常或枚举不到器件 | OV8858 用 0x3018 声明 lane 数(2 lane 写 0x32),换 lane 数等于换整张寄存器表 |
| 超出 SoC D-PHY 能力 | 锁不住、没有突发 | RK3568 单通道上限 2.5 Gbps、最多 4 lane |
| 时钟连续与非连续设置不一致 | 首帧丢失或整帧偏移 | 两端必须一致,见《LV015-HS与LP模式》第四节 |
| Data Type 或位宽不匹配 | 花屏、颜色错乱、图像纵向错位 | RAW8/RAW10/RAW12 必须与寄存器表、ISP 期望同时对齐 |
4. CSI-2 层错误的归属
(1)物理层(D-PHY)的错误表现为:根本没有 HS 突发、SoT 匹配失败、多 lane 去斜失败。此时示波器上要么没有波形,要么各 lane 的突发起点明显错开。
(2)协议层(CSI-2)自带检错能力:包头有 6 位 ECC,图像长包尾部有 16 位 CRC。SoC 侧的 CSI2/ISP 一般有对应的错误计数,先读计数再看波形,比盲目接探头高效。
(3)按现象分层:整帧全黑查物理层与流控;周期性错行、花屏查带宽与位宽口径;零星错点查信号完整性与电源纹波。
三、 软件配置与驱动
1. 读得到 ID 但不出图
| 问题现象 | 可能原因 | 处理方法 |
|---|---|---|
| 黑屏、无帧输出 | 1. 初始化序列不全或版本不对 2. 流控没有打开(0x0100 未置 1) 3. 输出格式与 CSI 接收端期望不匹配 | 1. 使用原厂针对本平台与本分辨率的寄存器表,在本项目 BSP 里它是一组 regval 数组,不是 .cpp 文件 2. 确认 stream on 已下发 3. 对齐 Data Type、位宽与虚拟通道 |
| SoC 侧枚举不到模式 | 1. 设备树端点缺 data-lanes 或 link-frequencies 2. 驱动上报的 link_freq 与实际不符 | 用 v4l2-ctl --list-formats-ext 确认 SoC 认到的模式,用 media-ctl -p -d /dev/media0 看 pipeline 是否连通 |
| 寄存器写不进去 | 未退出 standby 就直接改配置 | 按 stream off → 写配置 → stream on 的顺序操作 |
2. 出图异常
| 问题现象 | 可能原因 | 排查方法 |
|---|---|---|
| 花屏、错行、撕裂 | 1. link_freq 或位宽口径与寄存器表不匹配 2. lane 数与寄存器表不一致 3. 带宽不足,接收侧 FIFO 溢出 | 按第二节第 2 小节逐项核算,参数推帧率与帧率推参数两个方向必须同时成立 |
| 颜色失真、偏色 | 1. Bayer 顺序与 ISP 配置不一致 2. 抽点与镜像寄存器(0x3820、0x3821)配置错误 3. RAW 位宽口径错 | 先开测试图案排除镜头与光照,再比对 Bayer 顺序与镜像设置 |
| 周期性条纹、噪点 | 1. HBLANK 不足,行内复位与读出时间不够 2. AVDD 纹波、去耦不足 3. 模拟增益过高 | 先量 AVDD 纹波,再核对只读 HBLANK 是否等于 hts_def − width |
| 亮度异常、工频闪烁 | 曝光时间与增益设置不合理 | 曝光取工频周期整数倍(50 Hz 取 1/100 s 的整数倍);曝光与增益只影响亮度与噪声,不会造成花屏,当成花屏原因会走错方向 |
| 帧率不达标 | VTS 过大,或 pixel_rate 上报偏低 | 算 pixel_rate ÷ (HTS × VTS) 与实测对比;注意调小 VTS 会压低曝光上限,低光条件下画面会变暗 |
3. Probe 未执行
| 问题现象 | 可能原因 | 处理方法 |
|---|---|---|
| 驱动未加载 | 内核配置未启用该驱动或其依赖 | 在 make menuconfig 中确认已编译为模块或内置,再用 lsmod 复核 |
| probe 未执行 | 1. 设备树 compatible 与驱动 of_device_id、i2c_device_id 不一致 2. 节点或 reg 地址缺失 | 逐字比对字符串与地址,dmesg 中查匹配失败记录 |
probe 返回 -EPROBE_DEFER | 设备树未描述 regulator、clock、GPIO,依赖资源未就绪 | 补齐 vdd-supply、clocks、reset-gpios 等属性 |
| probe 成功但注册不上 | remote-endpoint 未接到 D-PHY,异步子设备注册失败 | 用 media-ctl -p 确认子设备是否出现在 pipeline 中 |
四、 调试方法与工具
1. 日志
(1)内核日志先看三件事:I2C 是否探测成功、probe 是否执行、V4L2 子设备是否注册。可用 dmesg | grep -i -E "ov8858|csi|dphy" 快速过滤。
(2)驱动主动打印的运行参数(lane 数、pixel_rate、所选模式、xvclk 告警)是最省事的入手点,比直接接探头快。
2. I2C 与 v4l2 工具
(1)扫描总线用 i2cdetect -y -r <bus>。-r 走读字节而不是 SMBus quick write,sensor 不一定响应后者,否则会出现“器件明明在线却全灰”的误判。
(2)读写寄存器用 i2ctransfer,显式给出 2 字节寄存器地址。以读 OV8858 的 ID 为例:
i2ctransfer -f -y 1 w2@0x36 0x30 0x0a r2(3)i2cset / i2cget 只适用于 SMBus 的字节或字操作,对 16 位寄存器地址的 sensor 基本不可用,应避免。
(4)SoC 侧用 v4l2-ctl --list-formats-ext 看支持的模式,用 --list-ctrls 读 LINK_FREQ、PIXEL_RATE、HBLANK、VBLANK 的上报值,用 media-ctl -p -d /dev/media0 看 pipeline 拓扑。
3. 示波器与逻辑分析仪
(1)测差分对要两个通道分别接 P、N 并共地。只接一根分不清 LP-01 与 LP-10,也就看不出进入序列。
(2)LP 段是 0~1.2 V 单端,用 DC 耦合;HS 段摆幅只有 200 mV 左右,用 100 mV/div 档并关闭带宽限制。
(3)采样率取数据率的 5 倍以上,探头带宽 1 GHz 以上,无源探头务必用 10×。有源差分探头优先;条件不足时单端方案只能看包络与 LP 序列,不适合评估 HS 眼图。
(4)探头分配按用途分:排查“为什么不出图”先接 MCLK、RSTn、I2C;判断“有没有出图、帧行节奏对不对”接时钟对与数据对的包络。两件事不要混在同一对引脚上测。
4. 分步验证
(1)电源:三路电压、上电顺序、纹波。
(2)I2C:能否扫到地址、能否读到 ID。
(3)时钟:MCLK 的频率与幅值。
(4)配置:初始化序列是否写全、流控是否打开。
(5)链路:link_freq、lane 数、位宽是否自洽,示波器上有没有 HS 突发。
(6)收包:CSI2/ISP 错误计数与 pipeline 拓扑。
前三步都是纯测量与只读操作,从第四步才开始改配置;多数问题在前三步就能定位,不必等到动寄存器。
五、 参考资料
《LV005-MIPI-Sensor接口原理图》:本板引脚定义、可测波形与上电复位时序
《LV001-Sensor时钟与MIPI接口配置》:xvclk、HTS/VTS、link_freq 与 lane 数的换算式与配置落地
《LV010-波形实测》:帧间隔、行间隔与 LP 进 HS 的实测波形
《LV015-HS与LP模式》:HS/LP 状态序列、Escape 与时钟通道行为
Specification_for_DPHY_v3.0.pdf:D-PHY 的电气参数与状态定义
Specification_for_Camera_Serial_Interface_v4.0.1.pdf:CSI-2 的包头 ECC、长包 CRC 与 Data Type 定义
本文档由 markdowncli 技能辅助生成