瑞芯微RK3588 camera驱动总结三调试

2024-09-01 19:44

本文主要是介绍瑞芯微RK3588 camera驱动总结三调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、指令

先介绍一些很有用的指令

  1. 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

  1. 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驱动总结三调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127874

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000