最近整理全志平台 ISP 相关问题,发现很多“摄像头没图/花屏/颜色不对”的问题,不能只盯 ISP 本身。全志这套链路一般是 sensor → MIPI CSI/并口 → VIN/CSI → ISP → scaler/video node,任何一环没对上,最后表现都可能是黑屏或者采集失败。这里做个排查小结。
调 ISP 前,建议先确认这几层:
sensor 上电/复位/时钟
↓
I2C/SCCB 读写 sensor 寄存器
↓
MIPI CSI 或 DVP 数据进来
↓
VIN/CSI 节点 probe
↓
ISP pipeline 建立
↓
/dev/videoX 输出图像很多问题其实卡在 sensor 上电或 I2C 阶段,还没到 ISP。
MCLK 是否正确
常见是 24MHz,也有 sensor 需要别的频率。MCLK 不对,I2C 可能能通,但 sensor 不出数据。
reset/pwdn 时序
reset、pwdn、avdd/dvdd/iovdd 顺序不对,表现会很玄学:有时能读 ID,有时不能出图。
sensor ID 是否读对
先别急着跑应用,驱动 probe 阶段能稳定读到 ID 才算第一关过了。
如果 ID 都读不到,先查电源、MCLK、reset、I2C 地址,不要直接改 ISP 参数。
sensor 初始化里配置的输出格式,必须和 DTS/驱动里写的一致:
lane 数:1 lane / 2 lane / 4 lane;
data rate;
RAW8/RAW10/RAW12/YUV422;
分辨率和帧率;
virtual channel;
MIPI clock settle 等参数。
如果 sensor 实际输出 RAW10,但驱动按 YUV422 或 RAW8 接,后面不是没图就是颜色/行同步乱。
DVP 并口也类似,要核对 PCLK、HSYNC/VSYNC 极性、数据位宽、BT656/BT601 模式。
在 V4L2/media controller 方案下,建议先看:
media-ctl -p
v4l2-ctl --list-devices
v4l2-ctl -d /dev/videoX --all重点看:
sensor subdev 是否存在;
csi/vin/isp subdev 是否存在;
pad format 是否一致;
link 是否 enable;
video node 对应的是 raw、isp 后还是 scaler 后。
有时候 /dev/video0 存在不代表 pipeline 配好了,只是节点创建出来了。
如果是 RAW sensor,建议先确认 raw 数据能稳定采到,再调 ISP。否则画质参数再怎么改都没意义。
排查顺序可以是:
sensor ID 正常;
MIPI/DVP 有数据;
能 dump raw;
ISP 出图;
再调 AE/AWB/LSC/CCM/NR/sharpness。
如果 raw 都不稳定,优先查 sensor 输出、lane、时钟、同步信号。
全黑:sensor 没出数据、曝光太低、pipeline 没连、video node 选错;
花屏/斜纹:lane 数、格式、bit width、stride、同步极性不对;
颜色偏紫/偏绿:Bayer 顺序错,RGGB/GRBG/GBRG/BGGR 没对上;
亮暗跳动:AE 参数或 flicker 设置不合适;
白平衡怪:AWB、CCM、色温参数要重新调;
边缘发糊/噪点大:NR/sharpness/曝光增益需要一起看。
不同 sensor、镜头、模组、IR cut、光学结构都不一样。即使用同一颗 sensor,不同模组的 LSC、CCM、AWB 参数也可能差很多。
可以先用 SDK 默认参数跑通,但量产要重新标定:
黑电平 BLC;
LSC 镜头阴影校正;
AWB 白平衡;
CCM 色彩矩阵;
Gamma;
降噪和锐化;
AE 曝光策略。
默认 IQ 参数只能算“能看”,不一定能算“好看”。
我一般会这样排:
量 sensor 电源、MCLK、reset/pwdn;
I2C 读 sensor ID;
确认 sensor 输出格式和 DTS/驱动一致;
用 media-ctl/v4l2-ctl 看 pipeline;
先低分辨率低帧率出图;
能出 raw 后再开 ISP;
最后再调 IQ 参数。
简单说,ISP 问题不要一开始就调画质。先确认 sensor 真在出数据、CSI/VIN 真收到了、media pipeline 真连上了,再谈 AE/AWB/CCM。这样定位会快很多,也不容易把硬件/驱动问题误判成 ISP 参数问题。
离线