本文主要是介绍瑞芯微RK3588 camera驱动总结三调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、指令
先介绍一些很有用的指令
- 1.media-ctl -p -d /dev/media0
用于打印 /dev/media0
设备的媒体管道拓扑结构。媒体管道拓扑结构描述了多媒体设备内部各组件之间的连接关系,包括视频输入、视频输出、编码器、解码器、ISP(图像信号处理器)等组件之间的连接。
media-ctl -d /dev/media1 -e "rkisp_selfpath"
media-ctl -d /dev/media1 -e "rkisp_mainpath"
这二个子指令可以查看具体的rkisp_mainpath和rkisp_selfpath
- 2.grep -H '' /sys/class/video4linux/video*/name
查找并显示 /sys/class/video4linux/
目录下所有 video*
子目录中的 name
文件内容的命令。这个命令可以帮助你快速了解系统中有哪些视频设备,并且每个设备的名称是什么。
3.这几个v4l2的指令也很有用
v4l2-ctl --list-devices
列出系统中所有可用的视频设备及其相关信息。
v4l2-ctl -d /dev/video0 -l
列出指定视频设备支持的控制项(controls)的命令。
v4l2-ctl --list-formats-ext -d /dev/video0
列出指定视频设备支持的所有视频格式及其扩展信息的命令。
更详细的在media-ctl和v4l2-ctl这二个工具找。
4.查看proc信息
cat /proc/rkcif-dvp
cat /proc/rkrkisp*
二、调试
下面再看看在视频输入调试问题
-
1.Sensor ID识别不到, I2C通讯失败
Sensor ID如果未识别到,这与RKISP或RKCIF没有任何关系,仅仅是Sensor上电时序未满足要求。请按以下顺序排查:
a. Sensor 的7-bits i2c slave id 是否正确, 是否误写成8-bits
b. 24M mclk是否有输出, 电压幅度是否正确
c. Sensor的上电时序是否满足要求,主要包括avdd, dovdd, dvdd, power down, reset等
2.exp_def 、 hts_def 、 vts_def值
如果有Sensor原厂的联系方式,请联系原厂获取。否则,请从datasheet中查找到对应的寄存器,并从寄存器列表中找到初始化时配置的值即可。
如果不期望应用程序去调节曝光、帧率时,可以不必要用到exp, hts, vts。一般RAW格式的Sensor需要这三个参数。
3.link_freq 与 pixel_rate 值
link_freq 指的是MIPI clk的实际频率。注意不是24M的mclk,而是MIPI dn/dp clk。优先通过原厂查问,或查找datasheet是否有相关的参数。
一般情况下, link_freq 实际值不会小于如下公式的计算结果,单位是(Hz)
link_freq = width * height * fps * bits_per_pixel / lanes / 2
如果实在不知道link_freq的实际值,可以用示波器测量。pixel_rate 指的是每秒传输的像素个数,link_freq 确定下之后,可用以下公式计算:
pixel_rate = link_freq * 2 * lanes / bits_per_pixel
4.怎么才算点亮Sensor
- 首先需要能认到Sensor id,即i2c的读写不能有异常。这时用 media-ctl -p -d /dev/media0 应该能够看到Sensor的具体信息如名称、分辨率等。 其次,上层抓图时,MIPI要能输出数据,且不报MIPI/ISP相关错误,应用层能接收到帧。
5.MIPI需要设置哪些参数
在Sensor与ISP之间MIPI通讯需要设置4个参数,请务必确认4个MIPI参数的正确性。
- Sensor输出的分辨率大小
- Sensor输出的图像格式,是YUV或RGB RAW,8-bits、10-bits、或12-bits
- Sensor的MIPI实际输出 link_freq
- Sensor使用了几个MIPI lane,这需要在dts中2个位置都配置正确
6.没有收到帧数据,也没有看到ISP/MIPI有报错
- a.确认kernel log中有没有关于MIPI的报错,比如用 dmesg | grep MIPI 看看有没有出错信息。
b. 确认kernel log中有没有出现Sensor 的i2c读写失败,如果Sensor 在配置寄存器时失败了,Sensor也可能没有正确初始化并使能输出。
c. 实际量测下MIPI的clk及data线上有没有信息输出。如果没有,建议从Sensor初始化及硬件方面分析。
d.实际量测有MIPI信号输出,但没报错也收不到数据
请确认I2C通讯没有错,Sensor的寄存器初始化列表有全部写到Sensor中,在Sensor驱动中,最后使能MIPI输出的是 s_stream() ,请确认在这个函数前,特别是s_power() ,不要让MIPI信号输出。这是因为在s_stream()前,MIPI控制器还未实际准备好接收数据,如果在 s_stream() 前输出数据,可能导致MIPI协议头SOT信号丢失,也可以将 Camera Sensor 端 clock lane 由 continue 模式切换到 no continues。
7.能正常收帧,但偶现MIPI错误
如果是MIPI错误,参考前面的错误描述。与信号相关建议从硬件信号上分析。
特别地,如果MIPI错误只在刚开始抓图时有,有可能是Sensor在上电的过程中MIPI信号有输出但并不符合协议,从而报错。 这种情况下,可以尝试按如下流程修改:
将完整的Sensor寄存器的初始化放到 s_power() 中。 因为此时MIPI接收端尚未开始接收数据,会忽略所有数据。在 s_power() 函数的最后,关闭sensor的输出,即相当于调用了 stop_stream()在 start_stream() 与 stop_stream() 中,仅打开或关闭MIPI的输出。
8.抓到的图颜色不对,亮度也明显偏暗或偏亮,或者是白图
需要根据Sensor分情况:
a. Sensor是RAW RGB的输出,如RGGB、BGGR等,需要3A正常跑起来。可以参考4 3A相关 3A 确认正常在跑时,请再次检查解析/显示图像时使用的格式是否正确,uv分量有没有弄反。
b. Sensor是yuv输出,或RGB如RGB565、RGB888,此时ISP处于bypass状态,如果颜色不对,请确认sensor的输出格式有没有配置错误,uv分量有没有弄反。确认无误时,建议联系Sensor原厂如果亮度明显不对,请联系Sensor原厂
c. Sensor输出是白图,可能是isp没有或者没有加载
这篇关于瑞芯微RK3588 camera驱动总结三调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!