Skip to content

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 全 0xFF1. 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 侧的配置目标只有一个:带宽够。三组参数必须闭合:

txt
每条 lane 数据率 = link_freq × 2                    (DDR 双沿)
pixel_rate       = link_freq × 2 × lanes ÷ 位宽
帧率             = pixel_rate ÷ (HTS × VTS)         HTS = width + HBLANK,VTS = height + VBLANK

判据只有一条:

txt
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 为例:

bash
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 拓扑。

前三步都是纯测量与只读操作,从第四步才开始改配置;多数问题在前三步就能定位,不必等到动寄存器。

五、 参考资料 ​


本文档由 markdowncli 技能辅助生成