RK3588/RK3576/RK3562、T113/T527 MIPI CSI调试思路
调试思路
以RK3588调试ov13850摄像头为例。
第 1 步: 确认模组上电时序是否正常
能正常识别摄像头chip id,说明上电时序没有问题,模组与RK3588能正常进行 i2c 通信。
dmesg | grep 13850
读不到 chip ID 对比
如上电时序不正常,先解决i2c通信问题(嵌入式分享#19:《嵌入式外设调试思路》--I2C设备篇),再往下一步调试。
第 2 步:确认驱动是否注册成功
Sensor 已经注册成一个 entity,说明已经注册成功。
media-ctl -d /dev/media0 -p | grep 13850
第 3 步:确认是否生成 videoX
查看生成设备节点,如下。
v4l2-ctl --list-devices
查看支持格式
v4l2-ctl --list-formats-ext -d /dev/video0
第 4 步:抓图是否有输出
抓数据流,不保存图,仅刷出帧率(该方法常用来调试,确认是否有MIPI输出数据)。
v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='BG10' --stream-mmap=4
系统会不断刷数据,说明获取视频流正常。
如能正常抓取原始视频数据,则可以使用gst-launch-1.0命令获取图像数据从屏幕进行预览。
gst-launch-1.0 v4l2src device=/dev/video55 ! videoconvert ! video/x-raw,format=NV12,width=640,height=480,framerate=60/1 ! waylandsink
排查思路
(1)Sensor ID 无法识别,i2c 通信失败
请按以下顺序排查:
-
Sensor 的 7-bits i2c slave id 是否正确, 是否误写成8-bits。
-
mclk 是否有输出, 电压幅度是否正确。mclk 一般是 24Mhz,也有27Mhz。
-
Sensor 的上电时序是否满足要求,主要包括 avdd, dovdd, dvdd, power down, reset 等。
(2)没有收到帧数据,也没有看到 ISP/MIPI 有报错
-
确认 kernel log 中有没有关于 MIPI 的报错,比如用 dmesg | grep MIPI 看看有没有出错信息。
-
确认 kernel log 中有没有出现 Sensor 的 I2C 读写失败,如果 Sensor 在配置寄存器时失败了,Sensor也可能没有正确初始化并使能输出。
-
实际量测下 MIPI 的 clk 及 data 线上有没有信息输出。如果没有,建议从 Sensor 初始化及硬件方面分析。
-
实际量测有 MIPI 信号输出,但没报错也收不到数据,请再次检查MIPI 需要设置的参数(比如 sensor 分辨率、输出格式等)。
-
请确认 I2C 通讯没有错,Sensor 的寄存器初始化列表有全部写到 Sensor 中,在 Sensor 驱动中,最后使能 MIPI 输出的是 s_stream() ,请确认在这个函数前,特别是s_power() ,不要让 MIPI 信号输出。这是因为在 s_stream() 前,MIPI 控制器还未实际准备好接收数据,如果在 s_stream() 前输出数据,可能导致 MIPI 协议头 SOT 信号丢失,也可以将 Camera Sensor 端 clock lane 由 continue 模式切换到 no continues。(这点需要对驱动较为熟悉)
(3)经常会出现抓 Raw 数据没数据返回,串口也没报错,抓图的时候报 select timeout 的错误。
此现象可以按照如下排查:
-
查看DPHY的状态
根据TRM手册,查看dphy的stopstate 来判断是否有收到数,例如查看RK3588 CSI0:io -4 -l 0x100 0xfdd30000需要连续读取10次上述寄存器,正常有识别到 MIPI 信号的话,对应的stopstate会在0/1之间变化。 -
测量 MIPI 信号。使用示波器测量是否有 MIPI 通道信号的输出。
-
确认 sensor 寄存器
-
确认 sensor mipi ou t的寄存器是正常的,可以使用i2c工具读取,推荐使用 i2ctransfer。
-
确定芯片的睡眠和复位引脚电平是否正常。
欢迎关注“嵌入式分享”,持续更新!