当前位置: 首页 > news >正文

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

相关文章:

Linux MIPI 调试中常见的问题

一、概述 做嵌入式工作的小伙伴知道&#xff0c;有时候程序编写没有调试过程中费时&#xff0c;之间笔记里有 MIPI 摄像头驱动开发的过程&#xff0c;有需要的小伙伴可以参考&#xff1a;Linux RN6752 驱动编写。而我也是第一次琢磨 MIPI 协议&#xff0c;其中有很多不明白的地…...

使用极限网关助力 ES 集群无缝升级、迁移上/下云

在工作中大家可能会遇到以下这些场景&#xff1a; 自建 ES 集群需要平滑迁移到 XX 云&#xff1b;从 XX 云将 ES 集群迁移到自建机房&#xff1b;ES 集群进行跨版本升级&#xff0c;同时保留回退能力&#xff1b; 这些场景往往都还有个共同的需求&#xff1a;迁移过程要保证业…...

RedisTemplate的配置和讲解以及和StringRedisTemplate的区别

本文主要讲redisTempalte的几种常用的序列化方式 string&#xff0c;我们大部分情况下都希望存入redis的数据可读性强一些&#xff0c;并且value也不总是一个规则的类型&#xff0c;所以这里也是不用json序列化的原因&#xff0c;可以更自由方便&#xff0c;下边提供配置方法 …...

在oracle中的scn技术

SCN可以说是Oracle中一个很基础的部分&#xff0c;但同时它也是一个很重要的。它是系统中维持数据的一致性和顺序恢复的重要标志&#xff0c;是数据库非常重要的一种数据结构。 转载&#xff1a;深入剖析 - Oracle SCN机制详细解读 - 知乎 (zhihu.com)https://zhuanlan.zhihu.…...

LINUX 嵌入式C编程--信号编程

基本概念 信号是事件发生时对进程的通知机制&#xff0c;也可以把它称为软件中断。信号与硬件中断的相似之处在于能够打断程序当前执行的正常流程&#xff0c;其实是在软件层次上对中断机制的一种模拟。信号提供了一种处理异步事件的方法。 信号目的 **信号的目的是用来通信…...

Linux:优化原则

web系统的优化原则&#xff1a; 从单机到集群 对Linux系统自身的优化原则&#xff1a;...

HarmonyOs 4 (一) 认识HarmonyOs

目录 一 HarmonyOs 背景1.1 发展时间线1.2 背景分析1.2.1 新场景1.2.2 新挑战1.2.3 鸿蒙生态迎接挑战 二 HarmonyOS简介2.1 OpenHarmony2.2 HarmonyOS Connect2.3 HarmonyOS Next**2.4 ArkTS &#xff08;重点掌握&#xff09;****2.5 ArkUI** 三 鸿蒙生态应用核心技术理念**3.…...

System.out.println隐藏字符串

昨天开发的时候遇到一个坑&#xff0c;这个坑几乎浪费了我一整天时间&#xff0c;我甚至现在都不知道其原因。 开发环境 macOS Ventura 13.4 IntelliJ IDEA 2023.1.2 现象 我用java的各种httpclient获取网络上的一个文本文件&#xff0c;获取的文本文件的内容使用System.ou…...

Java中的线程池你了解多少?

&#x1f308;&#x1f308;&#x1f308;今天给大家分享的是Java标准库中的线程池&#xff0c;以及线程池的自定义实现。 清风的CSDN博客 &#x1f6e9;️&#x1f6e9;️&#x1f6e9;️希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;…...

leetCode 131.分割回文串 + 动态规划 + 回溯算法 + 优化 + 图解 + 笔记

我的往期文章&#xff1a; leetCode 647.回文子串 动态规划 优化空间 / 中心扩展法 双指针-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/133883091?spm1001.2014.3001.5501leetCode 131.分割回文串 回溯算法 图解 笔记-CSDN博客https://blog.csdn.n…...

【傻瓜级JS-DLL-WINCC-PLC交互】3.JS-DLL进行交互

思路 JS-DLL-WINCC-PLC之间进行交互&#xff0c;思路&#xff0c;先用Visual Studio创建一个C#的DLL控件&#xff0c;然后这个控件里面嵌入浏览器组件&#xff0c;实现JS与DLL通信&#xff0c;然后DLL放入到WINCC里面的图形编辑器中&#xff0c;实现DLL与WINCC的通信。然后PLC与…...

深度学习手势识别算法实现 - opencv python 计算机竞赛

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习手势识别算法实现 - opencv python 该项目较为新颖…...

2023-12-01 AIGC-自动生成ppt的AI工具

摘要: 2023-12-01 AIGC-自动生成ppt-记录 自动生成ppt: BoardMix boardmix 一键生成ppt boardmix是一款基于云的ai设计软件&#xff0c;允许创建用于各种目的的自定义演示文稿、ai绘画&#xff0c;ai生成思维导图等。以下是它的一些功能&#xff1a; 可定制的模板 - 它有一个…...

NoSQL 数据建模错误会降低性能

数据建模错误是破坏性能的最简单方法之一。当您使用 NoSQL 时&#xff0c;特别容易搞砸&#xff0c;&#xff08;讽刺的是&#xff09;NoSQL 往往用于对性能最敏感的工作负载。NoSQL 数据建模最初可能看起来非常简单&#xff1a;只需对数据进行建模以适应应用程序的访问模式。但…...

在Android上搭建一个NDK项目

首先New Project&#xff0c;选择Native C&#xff0c;点击Next。 填入项目名称和包名&#xff0c;点击Next。 这里我们选择Cmake默认的C版本。 创建好的项目目录&#xff0c;里面比我们正常的Android项目多了一个cpp目录 打开MainActivity。里面定义了一个jni方法stringFromJN…...

TOP-K问题和向上调整算法和向下调整算法的时间复杂度问题的分析

TOP-K问题 TOP-K问题&#xff1a;即求数据结合中前K个最大的元素或者最小的元素&#xff0c;一般情况下数据量都比较大 比如&#xff1a;专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等 对于Top-K问题&#xff0c;能想到的最简单直接的方式就是排序&#xff0c;但是…...

3、服务器性能剖析

性能优化简介 **我们将性能定义为完成某件任务所需要的时间度量&#xff0c;换句话说&#xff0c;性能即响应时间&#xff0c;这是一个非常重要的原则。**我们通过任务和时间而不是资源来测量性能。数据库服务器的目的是执行sql语句&#xff0c;所以他关注的任务是查询或者语句…...

xxl-job 分布式任务调度框架

文章目录 分布式任务调度XXL-Job 简介XXL-Job 环境搭建XXL-Job (源码说明)配置部署调度中心docker安装 Bean模式任务(方法形式)-入门案例任务详解任务详解-执行器任务详解-基础配置任务详解-调度配置任务详解-基础配置任务详解-阻塞处理策略任务详解-路由策略 路由策略路由策略…...

软件使用-stm32入门

这节主要是介绍大家使用两个软件。这两个软件也是比较常用的&#xff0c;里面也有很多有意思的功能&#xff0c;可以给大家介绍一下。 1. FlyMcu 软件 这个软件可以通过串口给 STM32 下载程序&#xff0c;如果你没有 STLINK&#xff0c;就可以用这个软件通过串口下载程序。 …...

使用MAT分析内存泄漏(mac)

前言 今天主要简单分享下Eclipse的Memory Analyzer在mac下的使用。 一、Mat&#xff08;简称&#xff09;干什么的&#xff1f; 就是分析java内存泄漏的工具。 二、使用步骤 1.下载 mac版的现在也分芯片&#xff0c;别下错了。我这里是M2芯片的&#xff0c;下载的Arch64的。 …...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...