Linux MIPI 调试中常见的问题

一、概述

做嵌入式工作的小伙伴知道,有时候程序编写没有调试过程中费时,之间笔记里有 MIPI 摄像头驱动开发的过程,有需要的小伙伴可以参考:Linux RN6752 驱动编写。而我也是第一次琢磨 MIPI 协议,其中有很多不明白的地方,在调试的时候折腾了很久,特此将我遇到的问题记录下来,希望多其他小伙伴有用。

二、测试环境

开发板:RV1126ARM Linux 版本:4.19.111MIPI 设备:RN6752V1摄像头:AHD 摄像头

三、调试中的问题

在调试需要先确定摄像头驱动是否已经正常加载,可以使用命令 media-ctl -p -d /dev/mediaX 进行查看,如下图所示:

其次明白怎么获取自己的图片,如果直接编写应用程序进行测试的,那无意增加了调试的难度,所以在测试之前需要只要抓图的命令,如果多抓图和链路关系还不了解的小伙伴,可以看我之前的笔记:Linux Media 子系统链路分析

注意: 这里我使用的测试模块是 RN6752V1,它从米皮出来的数据已经是 YUV422 格式的图像,所以我抓取的节点可以有不一样的地方。

1. 抓图时出现 select timeout 错误

现象:出现这样错误的可能原因是因为,MIPI 设备没有正常工作,错误如下图所示

解决办法:

  • 比如在驱动用没有正常调用留控制函,并通过 I2C 对设备进行配置

  • 确定芯片的睡眠引脚电平是否正常

  • 可以使用示波器观察 MIPI 通道时候存在数据,如下图所示

注意 如果将图像缩小,可以看到每帧数据之间有一定的间隔时间,如果芯片正常工作后,便可以抓取到图像。

2. 帧错误

现象:抓图中会出现 rockchip-mipi-csi2: ERR1: error matching frame start with frame end, reg: 0x10,cnt:2 提示。解决办法:这一般都是硬件不稳定导致的,需要检查硬件上的问题

3. 帧格式错误

现象:抓图时,有时能正常抓取成功,但是偶尔会提现是 rkcif_mipi_lvds: ERROR: csi bandwidth lack, intstat:0x80002!! 错误,出现此错误后,变无法获取图像。

解决办法:出现这个问题多数情况是帧格式不匹配导致的,比如我在驱动中使用的是 MEDIA_BUS_FMT_UYVY8_2X8,而抓图是却用的 NV12,也有人说是瑞芯微中使用 NV12 的问题,只需改为 NV16 即可,这类我抓图时更改为 uyvy422 就没有这个错误了。

4. 干扰错误

现象:当数据通道被干扰后,会提示 rockchip-mipi-csi2: ERR1: crc errors, reg: 0x1000000, cnt:1 错误

解决办法:这个是有硬件不稳定导致的,不过一般出现这个错误也是能正常抓取图片的。

5. 瑞芯微 VI 模块使用

现象:由于 RN9752V1 模块接入 MIPI 同到的信号是 YUV422 格式的图像,所以不需要经过 ISP 模块,只需要在 CIF 节点获取即可,但是使用 VI 模块从 video0 节点获取图像是失败。

解决办法:失败的原因是因为 VI 模块默认从 DMA 中获取数据,而 CIF 是从内存中转存的,所以需要将 VI 模块的数据源改为从内存中获取,如下图所示:

6. 图像分屏问题

现象:当 MIPI 通道受到干扰时,便会出现分屏问题,复现也很简单,只需要对 MIPI 通道的数据线或时钟线进行干扰即可分屏,并且每次分屏的位置都不同,如下图所示

解决办法:这里存在两种情况

  • 启动时分屏,当设备启动时分屏,这样的情况是因为获取图片之前没有对设备进行复位(可能软复位和硬复位都要执行),RN6725V1 的复位如下图所示:

  • 运行时分屏,当图像正常运行后,收到硬件部分的干扰也会导致分屏,这样的现象只需要增加 CIF 通道的异常检测功能即可,添加方法如下图所示,具体的操作见VICAP 异常复位部分的分析,

注意: 以上是我遇到的一些错误,更多的问题处理见 Rockchip Linux4.4 Camera Trouble Shooting 文档,路径在RV1126参考资料\Linux\Camera 目录下

四、VICAP 异常复位

瑞芯微已经在驱动中增加了异常复位功能,只需要开启异常检测功能即可,需要注意的是,不同板子的开启方式不同,比如 RK3588 是在配置信息中开启,在 drivers\media\platform\rockchip\cif 目录下的Kconfig文件中定义相应的信息,如下图所示:

由于我使用的是 RV1126 开发板,所以这里重点介绍 RV1126 中的配置,而 RV1126/RV1109 都是通过设备树进行配置的,配置信息如下所示:

rockchip,cif-monitor = <index0 index1 index2 index3 index4>;

  1. index0index0

表示的是复位模式,目前主要有四种模式

  • 无监测(idle):默认开启,若无 rockchip,cif-monitor 节点配置时,默认为无检测模式,VICAP 不进行图像异常监测

  • 连续模式(continue): 用于实时监测 vicap 是否 mipi 出错及断流,当发生出错及断流时进行 vicap 复位。

  • 检测方式是定时器在 index1 设定的帧数达到时,在帧位进行初始化并开始监测,若出现错误达到相应的帧数后触发复位。

  • 定时器以 index2 设定的周期数进行检测

  • 触发模式(trigger):只有在 csi2 协议层出现了错误时才会触发,当 index4 设定的次数达到时,在图像的帧尾初始化触发器,并在 index2 设定的周期数达到后进行一次 vicap 复位

  • 热插拔模式(hotplug):主要针对车机转接芯片,用于解决设备插拔是图像隔离或断流的问题,此模式具备“连续模式”的功能,与 continue 的差别在于,在 mipi 不报错和不断流的情况下,若是 vicap 所采集的 sensor 通过RKMODULE_SET_VICAP_RST_INFO 命令置位复位使能,那么 vicap 在通过RKMODULE_GET_VICAP_RST_INFO 获取到该信息后会触发复位操作。

  1. index1

对 continue 或者 hotplug 而言,在采集到 index1 帧数据后,触发监测定时器

  1. index2

监测定时器的周期,以一帧为单位,监测周期为 index2 帧;

  1. index3

延时复位的时间参数,在发现 vicap csi2 报错后,在该定义时间内,持续对监测,当检测到错误不再增加,进行复位,超过该定义时间,不管是否还在增加错误,都立即进行复位操作,时间单位ms

  1. index4

用于设定 mipi csi err 的出现次数,在达到该次数后,触发复位

注意: 在 VICAP 模块中产生复位后,是不能解决分屏的问题,它的主要目的是监测图像是否错误,并触发复位信号,复位信号产生后,会在驱动程序的控制函数中产生 RKMODULE_SET_QUICK_STREAM 控制信号。然后利用这个复位信号对设备进行复位便可解决分屏的问题,如下图所示:

五、CSI 数据流模块

  1. CSI 同时采集在 RV1126 和 RV1106 中,存在两个独立而完备的标准物理mipi csi2 dphy,对应于dts上的csi_dphy0和csi_dphy1,所以我们可以实现两个摄像头同步进行图像采集。但是 RV1126 中只有一个 14M 的 ISP 模块,所以想实现两个同时采集只能通过下面两条路径才能实现,但是两张图像不能超过 14M。

imx335-----csi_dphy0------csi2----cif----isp0------ispp0
imx335----csi_dphy1----isp1---ispp1

注意: 在 RV1126 中,ISP只能达到 30fps

  1. cif 模块

在 RV1126/RV1109 中,VICAP存在两个IP核,其中一个称之VICAP FULL,一个称之VICAP LITE,

  • VICAP FULL:拥有dvp/mipi/lvds三种接口,dvp可与mipi或者lvds接口同时工作,而mipi和lvds则不能同时工作,VICAP LITE 仅拥有lvds接口,可与VICAP FULL的接口同时工作。

  • VICAP LITE: 仅拥有lvds接口,可与VICAP FULL的接口同时工作。

注意: VICAP FULL dvp接口对应一个rkvicap_dvp节点,VICAP FULL mipi/lvds接口对应一个rkvicap_mipi_lvds节点,VICAP LITE 对应一个rkvicap_lite_mipi_lvds节点。各节点可独立采集。

  1. YUV 数据双通道采集问题

从上面信息可以可知,对于 MIPI 通道中的数据是 RAW 格式的,便可以实现两个通道同时采集,但是对于 MIPI 通道中的数据是 YUV 格式时,我只实现一个摄像头的数据采集,分析如下

  • 因为 CIF 模块和ISP通道之间是通过虚拟连接的,也就是数据是通过内存块进行交换的,所以可以直接通过这个内存控件直接抓取图像,也就是 vide0 ~ vido3 这几个节点,但是 CIF 模块只有一个,不能用这样的思想进行双通道采集。

  • 想直接从 CSI 模块位置直接获取数据,但是我尝试后,无法获取,如下图所示:

注意: 因为无法在 ISP 模块之前获取 MIPI 通道的数据,所以我没能实现 RV1126 同时采集两个 RN6752V1 的图像数据,但是理论上应该是可以实现的,但是我没找到合适的方式,望有知道的大佬指点一下,如果后期我发现解决办法后,也会补充上的。

参考资料

  1. 介绍rk平台针对cif链路出现的mipi错误以及断流的复位操作:介绍rk平台针对cif链路出现的mipi错误以及断流的复位操作-CSDN博客

  2. camera调试:serdes camera调试:camera调试:serdes camera调试_人生苦短,我想躺平的博客-CSDN博客

  3. camera调试:RK3588 MIPI/DVP camera关键配置:camera调试:RK3588 MIPI/DVP camera关键配置-CSDN博客

  4. Rockchip Linux4.4 Camera Trouble Shooting 文档

文章转载自:浇筑菜鸟

原文链接:https://www.cnblogs.com/jzcn/p/17866409.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/210352.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

本科毕业生个人简历23篇

刚毕业的本科生如何制作一份令招聘方印象深刻的简历&#xff1f;可以参考以下这23篇精选的本科毕业生应聘简历案例&#xff01;无论您的专业是什么&#xff0c;都能从中汲取灵感&#xff0c;提升简历质量&#xff0c;轻松斩获心仪职位&#xff01;小伙伴们快来看看吧&#xff0…

LeetCode刷题---合并两个有序链表

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏&#xff1a;http://t.csdnimg.cn/ZxuNL http://t.csdnimg.cn/c9twt 前言&#xff1a;这个专栏主要讲述递归递归、搜索与回溯算法&#xff0c;所以下面题目主要也是这些算法做的 我讲述…

3D模型材质编辑

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 如今&#xff0c;3D 纹理、打印和建模都非常流行。使用可用的高级工具&#xff0c;创建 3D 模型…

24双非硕的秋招总结

24 双非硕的秋招总结 结果&#xff1a; 运气捡漏去了腾讯 想想自己整个研究生学习过程&#xff0c;还是挺坎坷的&#xff0c;记录一下&#xff0c;也给未来的同学提供一些参考。 研一 我是研一上开始学前端的&#xff0c;应该是21年10月份左右&#xff0c;我们实验室是专门…

Nacos多数据源插件

Nacos从2.2.0版本开始,可通过SPI机制注入多数据源实现插件,并在引入对应数据源实现后,便可在Nacos启动时通过读取application.properties配置文件中spring.datasource.platform配置项选择加载对应多数据源插件.本文档详细介绍一个多数据源插件如何实现以及如何使其生效。 注意:…

DOM 事件的传播机制

前端面试大全DOM 事件的传播机制 &#x1f31f;经典真题 &#x1f31f;事件与事件流 事件流 事件冒泡流 事件捕获流 标准 DOM 事件流 &#x1f31f;事件委托 &#x1f31f;真题解答 &#x1f31f;总结 &#x1f31f;经典真题 谈一谈事件委托以及冒泡原理 &#x1f3…

134. 加油站(贪心算法)

根据题解 这道题使用贪心算法&#xff0c;找到当前可解决问题的状态即可 「贪心算法」的问题需要满足的条件&#xff1a; 最优子结构&#xff1a;规模较大的问题的解由规模较小的子问题的解组成&#xff0c;规模较大的问题的解只由其中一个规模较小的子问题的解决定&#xff…

蓝桥第一期模拟总结

文章目录 1.动态的 Tab 栏2.地球漫游3.迷惑的this4.燃烧卡路里5.魔法失灵了6.年龄统计 所有题目链接 1.动态的 Tab 栏 本题要实现一个tab栏固定效果&#xff0c;看见题目就想到css中的 position: fixed; 尝试了很久都没能实现效果&#xff0c;后来又想到了粘性定位 position: …

【深度学习】深度学习框架的环境配置

目录 1. 配置cuda环境 1.1. 安装cuda和cudnn 1.1.1. 显卡驱动配置 1.1.2. 下载安装cuda 1.1.3. 下载cudnn&#xff0c;将解压后文件复制到cuda目录下 1.2. 验证是否安装成功 2. 配置conda环境 2.1. 安装anaconda 2.2. conda换源 2.3. 创建conda环境 2.4. pip换源 3…

封装员工头像组件

创建image-upload组件 <template><el-uploadclass"avatar-uploader"action"":show-file-list"false":before-upload"beforeAvatarUpload"><!-- (自动上传)action是上传地址 --><img v-if"value" :s…

第二次量子化

专栏目录: 高质量文章导航-持续更新中 前置复盘: 玻色子和费米子: 首先,我们希望把描述单粒子态的量子力学推广到全同多粒子体系。我们的做法是从单粒子态的希尔伯特空间(Hilbert Space)出发,构造全同多粒子态的态空间——福克空间(Fock Space),它实际上就是无穷个…

20231202 VCSA 7.0 日志清理及空间扩容

日志清理 ssh 到 VCSA 上&#xff0c;输入 shell 进入控制台 df -lh 查看空间大小&#xff0c;发现 /storage/archive 占据空间比较大&#xff0c;这里应该是备份日志的地方&#xff0c;里边文件不大但很多&#xff0c;查找并删除 30 天以前的日志 cd /storage/archive/vpostgr…

对于Windows就是找不到 环境变量 的解决

我认为将“我的电脑”从桌面上隐藏掉纯粹是傻逼行为 说下解决办法&#xff1a; 1. 找到文件资源管理器&#xff0c; 2. 右键点击“此电脑” -- 选择属性&#xff1a; 3. 进入属性界面&#xff0c;应该进入的是“关于”界面&#xff1a;选择“高级系统设置”&#xff1a; 4. 终…

更有效的问卷发布方法与必备问卷工具推荐

问卷怎么发&#xff1f;通过哪些渠道发&#xff1f;怎么发收集的数量更多&#xff1f;怎么获得有效数据&#xff1f;这些是做问卷的调查人员经常会遇到的问题。的确&#xff0c;问卷的发放是否有效不仅会影响到收集数据的体量&#xff0c;更会影响到最终结论的真实性。所以&…

ssm+vue的罪犯信息管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的罪犯信息管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

12月02日每日信息差

_灵感 &#x1f396; 六国入境免签首日2029人次享便利 &#x1f384; 国内首个超大规模“光伏气膜”项目在江苏投运 &#x1f30d; 东京将推出氢气交易市场 &#x1f30b; 中国疾控中心&#xff1a;建议尽早接种流感疫苗&#xff0c;尤其是老年人和儿童 &#x1f381; 偏高1.…

CCC联盟数字车钥匙(七)——BLE连接流程

本文接上一篇CCC数字钥匙BLE概述&#xff0c;介绍BLE中相关连接流程的实现。 2、BLE流程 2.1 所有者配对连接建立 CCC中使用Bluetooth OOB&#xff08;Out of Band, 带外&#xff09;配对完成所有者配对、连接建立的流程。BLE设置分为以下两个子部分&#xff1a; BLE链路层连…

根目录/ 空间不够,扩容,导致web页面无法加载问题

现象就是&#xff1a;搭建的web页面无反应&#xff0c;也没报错&#xff0c;怀疑是内存空间不够导致的。/ 扩容步骤如下&#xff1a; 虚拟机为关机状态添加虚拟磁盘 #查看磁盘&#xff0c;并创建新分区 fdisk -l fdisk /dev/sdb p       查看已分区数量&#xff08;我看…

C# 将CSV文件内容装配成对象列表

写在前面 CSV文件采用纯文本的存储形式&#xff0c;字段间以分隔符进行区分&#xff0c;行之间以换行符进行切换&#xff0c;既可以用文本编辑器打开也可以用Excel编辑&#xff0c;可读性非常好&#xff0c;在游戏开发领域经常将其作为数值配置文件使用。文本编辑器推荐EmEdit…

msvcp140_codecvt_ids.dll丢失解决方案,验证有效

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140_codecvt_ids.dll丢失”。这些动态链接库文件是程序运行所必需的&#xff0c;它们包含了许多函数和资源。丢失或者损坏通常会导致某些应用程序无法正常运行。 首先&#xff0c;我们…