瑞芯微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

相关文章

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

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)只包含了头文件,不依