RK3568 android11 调试mipi摄像头 gc2093

一,摄像头简介

GC2093是一个高质量的1080P CMOS图像传感器,用于安全相机产品、数码相机产品和手机相机应用程序。包含了一个1920H x 1080V像素阵列、片上10位ADC和图像信号处理器。高性能和低功耗功能的全面集成使GC2093最适合设计,减少了实现过程,并延长了运动相机、汽车DVR和各种移动应用的电池寿命。它提供了RAW10和RAW8数据格式。它有一个主机常用的双线串行接口来控制整个传感器的运行。

技术规格:
在这里插入图片描述


二,驱动文件配置

1.源程序

~/RK3568_Android11/kernel/drivers/media/i2c/gc2093.c

2.修改i2c目录下的 Makefile以及Kconfig

kernel/drivers/media/i2c/Makefile中添加:
obj-$(CONFIG_VIDEO_GC2093)  += gc2093.o------------------------------------------------------------------------
kernel/drivers/media/i2c/Kconfig中添加:
config VIDEO_GC2093tristate "GalaxyCore GC2093 sensor support"depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_APIdepends on MEDIA_CAMERA_SUPPORTselect V4L2_FWNODEhelpSupport for the GalaxyCore GC2093 sensor.To compile this driver as a module, choose M here: themodule will be called gc2093.

3.内核中加载驱动

kernel/arch/arm64/configs/rockchip_defconfig中添加:
CONFIG_VIDEO_GC2093=y

三,DTS配置

1.摄像头链接示意图

在这里插入图片描述
GC系列摄像头与SOC连接的主要的引脚有: i2c、rst、pwdn、mclk、MIPI Clk、MIPI DATA。

2. 硬件原理图

在这里插入图片描述
在这里插入图片描述
从电路图可看出关键引脚关系:

reset信号:GPIO3 D4
power down信号:GPIO3 D5
电源信号:GPIO0 B0
clock:cif_clk

3.dts节点

对于RK3568平台而言,仅有一个标准物理mipi csi2 dphy,可以工作在两个模式:full mode 和split mode,拆分为csi2_dphy0/csi2_dphy1/csi2_dphy2三个逻辑dphy,特性如下:

Full mode:

  • 仅使用csi2_dphy0,csi2_dphy0与csi2_dphy1/csi2_dphy2互斥,不可同时使用;
  • data lane最大4 lanes;
  • 最大速率2.5Gbps/lane;

Split mode:

  • 仅使用csi2_dphy1和csi2_dphy2, 与csi2_dphy0互斥,不可同时使用;
  • csi2_dphy1和csi2_dphy2可同时使用;
  • csi2_dphy1和csi2_dphy2各自的data lane最大是2 lanes;
  • csi2_dphy1对应物理dphy的lane0/lane1;
  • csi2_dphy2对应物理dphy的lane2/lane3;
  • 最大速率2.5Gbps/lane
//mipi camera
&i2c2 {gc2093: gc2093@37 {compatible = "galaxycore,gc2093";reg = <0x37>;status = "okay";clocks = <&cru CLK_CIF_OUT>;clock-names = "xvclk";power-domains = <&power RK3568_PD_VI>;pinctrl-names = "default";pinctrl-0 = <&cif_clk>;avdd-supply = <&vcc_camera>; //power电源脚,需要默认拉高reset-gpios = <&gpio3 RK_PD4 GPIO_ACTIVE_LOW>;pwdn-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;rockchip,grf = <&grf>;rockchip,camera-module-index = <0>;rockchip,camera-module-facing = "front"; //模组朝向,有"back"和"front"rockchip,camera-module-name = "YT-RV1109-2-V1"; rockchip,camera-module-lens-name = "40IR-2MP-F20"; //module与lens命令要与设备/etc/iqfiles中对应sensor的json文件名后面相同port {gc2093_out: endpoint {remote-endpoint = <&dphy0_in>;data-lanes = <1 2 3 4>;};};};
};&csi2_dphy_hw {status = "okay";
};&csi2_dphy0 {status = "okay";ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;dphy0_in: endpoint@1 {reg = <1>;remote-endpoint = <&gc2093_out>;data-lanes = <1 2 3 4>;};};port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;dphy0_out: endpoint@1 {reg = <0>;remote-endpoint = <&isp0_in>;};};};
};&rkisp {status = "okay";
};&rkisp_mmu {status = "okay";
};&rkisp_vir0 {status = "okay";port {#address-cells = <1>;#size-cells = <0>;isp0_in: endpoint@0 {reg = <0>;remote-endpoint = <&dphy0_out>;};};
};&cif_clk {rockchip,pins =/* cif_clkout */<4 RK_PC0 1 &pcfg_pull_none>;
};==================================================================================
vcc_camera: vcc-camera-regulator {compatible = "regulator-fixed";gpio = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>;pinctrl-names = "default";pinctrl-0 = <&camera_pwr>;regulator-name = "vcc_camera";enable-active-high;regulator-always-on;regulator-boot-on;};&pinctrl {cam {camera_pwr: camera-pwr {rockchip,pins =/* camera power en */<0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;};};
};

四,调试

1.开机log打印

rk3568:/ # dmesg | grep gc
[    0.000000] Linux version 4.19.232 (fy@001) (gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05), GNU ld (Linaro_Binutils-2017.05) 2.27.0.20161019) #19
7 SMP PREEMPT Mon Dec 11 11:20:47 CST 2023
[    6.409370] gc2093 2-007e: driver version: 00.01.03
[    6.409504] gc2093 2-007e: 2-007e supply dovdd not found, using dummy regulator
[    6.409555] gc2093 2-007e: Linked as a consumer to regulator.0
[    6.409599] gc2093 2-007e: Linked as a consumer to regulator.13
[    6.409622] gc2093 2-007e: 2-007e supply dvdd not found, using dummy regulator
[    6.431373] gc2093 2-007e: Detected GC2093 sensor
[    6.431422] rockchip-csi2-dphy csi2-dphy0: dphy0 matches m00_f_gc2093 2-007e:bus type 4
[   51.782028] gc2093 2-007e: gc2093_s_stream: on: 1, 1920x1080@30
[  109.871508] gc2093 2-007e: gc2093_s_stream: on: 0, 1920x1080@30
[  109.905541] gc2093 2-007e: gc2093_s_stream: on: 0, sleep(33333us)

日志可以看到已经成功读到sensor id = GC2093。

2. 查看gpio的使用情况

rk3568:/ # cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-31, parent: platform/fdd60000.gpio, gpio0:
gpio-5   (                    |usb-port0-power-ctl ) out lo
gpio-6   (                    |usb-port1-power-ctl ) out hi
gpio-8   (                    |vcc_camera          ) out hi
gpio-15  (                    |breath-led          ) out hi
gpio-16  (                    |work                ) out lo
gpio-21  (                    |enable              ) out hi
gpio-29  (                    |reset               ) out higpiochip1: GPIOs 32-63, parent: platform/fe740000.gpio, gpio1:gpiochip2: GPIOs 64-95, parent: platform/fe750000.gpio, gpio2:
gpio-73  (                    |reset               ) out hi
gpio-77  (                    |bt_default_rts      ) in  hi
gpio-79  (                    |bt_default_reset    ) out lo
gpio-80  (                    |bt_default_wake_host) in  hi
gpio-81  (                    |bt_default_wake     ) in  lo
gpio-88  (                    |io1                 ) out lo
gpio-89  (                    |io2                 ) out lo
gpio-90  (                    |io3                 ) out hi
gpio-91  (                    |io4                 ) out hi
gpio-93  (                    |usb-port2-power-ctl ) out hi
gpio-94  (                    |usb-port3-power-ctl ) out higpiochip3: GPIOs 96-127, parent: platform/fe760000.gpio, gpio3:
gpio-104 (                    |mdio-reset          ) out hi
gpio-109 (                    |rs485-ctrl          ) out lo
gpio-114 (                    |headset_gpio        ) in  lo
gpio-115 (                    |spk-ctl             ) out hi
gpio-118 (                    |enable              ) out hi
gpio-119 (                    |enable              ) out lo
gpio-122 (                    |red-led             ) out hi
gpio-123 (                    |blue-led            ) out lo
gpio-124 (                    |reset               ) out lo
gpio-125 (                    |pwdn                ) out lo

可以看出vcc_camera,reset和pwdn 都是有状态,证明摄像头是加载成功了的。

3. 内核会为摄像头在目录/sys/class/video4linux下分配设备信息描述文件

rk3568:/ # grep "" /sys/class/video4linux/v*/name | grep mainpath
/sys/class/video4linux/video0/name:rkisp_mainpath

4.显示摄像头参数

rk3568:/ # v4l2-ctl -d /dev/video0 -l
User Controlsexposure 0x00980911 (int)    : min=1 max=1121 step=1 default=1120 value=338horizontal_flip 0x00980914 (bool)   : default=0 value=0vertical_flip 0x00980915 (bool)   : default=0 value=0Image Source Controlsvertical_blanking 0x009e0901 (int)    : min=45 max=15303 step=1 default=45 value=45horizontal_blanking 0x009e0902 (int)    : min=280 max=280 step=1 default=280 value=280 flags=read-onlyanalogue_gain 0x009e0903 (int)    : min=64 max=8192 step=1 default=64 value=111Image Processing Controlslink_frequency 0x009f0901 (intmenu): min=0 max=1 default=0 value=0pixel_rate 0x009f0902 (int64)  : min=0 max=316800000 step=1 default=237600000 value=237600000 flags=read-only

输出将包括不同类别的控制参数,如“User Controls”和“Image Processing Controls”。
每个控制参数通常包含以下信息:

  • 控制名称:如 horizontal_flip 或 test_pattern。
  • 参数类型:如 (bool) 表示布尔类型,(menu) 表示有固定选项的菜单。
  • 控制标识符:如 0x00980914,这是内部用于识别控制的唯一标识。 取值范围:例如 min=0 max=1 表示取值范围从0到1。
  • 默认值:如 default=0 表示控制的默认设置。 当前值:如 value=0 表示当前设置的值。

5.修改摄像头时钟频率(mclk)以及帧率(fps)

1>. gc2093.c文件中打开MCLK_27M宏定义,时钟频率为27M;注释掉则默认为24M。
2>. 帧率对应关系:
30fps:0x04,0xe2
25fps:0x05,0xdc
20fps:0x07,0x53

diff --git a/kernel/drivers/media/i2c/gc2093.c b/kernel/drivers/media/i2c/gc2093.c
index 032c6cbb53..cdc57cf1d5 100644
--- a/kernel/drivers/media/i2c/gc2093.c
+++ b/kernel/drivers/media/i2c/gc2093.c
@@ -42,7 +42,7 @@#define MIPI_FREQ_396M         396000000/* 27M or 24M */
-//#define MCLK_27M
+#define MCLK_27M#ifdef MCLK_27M#define GC2093_XVCLK_FREQ      27000000
@@ -501,8 +501,8 @@ static const struct reg_sequence gc2093_1080p_hdr_settings[] = {{0x0010, 0x8c},{0x0013, 0x15},{0x0019, 0x0c},
-       {0x0041, 0x04}, //30fps: 0x4e2;   25FPS: 0x5dc:  20FPS: 0x753 
-       {0x0042, 0xe2},
+       {0x0041, 0x05}, //30fps: 0x4e2;   25FPS: 0x5dc:  20FPS: 0x753 
+       {0x0042, 0xdc},{0x0053, 0x60},{0x008d, 0x92},{0x0090, 0x00},

五,遇到的问题

1.摄像头加载失败,读不到sensor id

[6.874014] gc2093 2-007e: driver version: 00.01.03
[6.874127] gc2093 2-007e: Failed to get reset-gpios
[6.874201] gc2093 2-007e: 2-007e supply dovdd not found, using dummy regulator
[6.874270] gc2093 2-007e: Linked as a consumer to regulator.0
[6.874311] gc2093 2-007e: 2-007e supply avdd not found, using dummy regulator
[6.874408] gc2093 2-007e: 2-007e supply dvdd not found, using dummy regulator
[6.895219] gc2093 2-007e: i2c read failed at addr: 3f0
[6.895444] gc2093 2-007e: i2c read failed at addr: 3f1
[6.895471] gc2093 2-007e: Failed to read sensor id, (-6)

要确保reset和pwdn引脚没有被复用,且初始状态正确。

2. 显示异常拉伸

具体现象:系统横屏状态(0度,180度)下预览画面有拉伸;竖屏状态(90度,270度)下预览画面就是正常。

hardware/rockchip/camera/etc/camera/camera3_profiles_rk356x.xml

安卓配置文件中 xml中有模组方式配置,找到gc2093摄像头配置,修改sensor.orientation值(0,90,180,270)

<sensor.orientation value="0"/>

实测修改后显示正常。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全运营之安全加固和运维

安全运营是一个将技术、流程和人有机结合的复杂系统工程&#xff0c;通过对已有安全产品、工具和服务产出的数据进行有效的分析&#xff0c;持续输出价值&#xff0c;解决安全问题&#xff0c;以确保网络安全为最终目标。 安全加固和运维是网络安全运营中的两个重要方面。 安全…

【Proteus仿真】【Arduino单片机】视力保护仪

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使LCD1602液晶&#xff0c;DS18B20温度传感器、按键、蜂鸣器、继电器开关、HC05蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD16…

js键盘事件keydown事件,防止重复触发,组合键的配合使用

js键盘事件keydown事件&#xff0c;防止重复触发 键盘事件类型主要有三种&#xff1a; keydown 、keypress(不建议使用&#xff0c;部分浏览器已放弃)和 keyup 。 添加普通键盘keydown事件 // 监听键盘按下事件document.addEventListener(keydown, function(event) {// 输出按…

搭建动态网站之——基于Redhat8.6搭建Discuz论坛

目录 一、动态网站与静态网站区别 1、提供用户互动接口的动态网站 2、搭建动态网站的需求&#xff1a; 二、搭建步骤 第一步&#xff1a;www服务器配置 第二步;编辑网页文件 第三步&#xff1a;使用xftp 将Discuz包传到/discuz解压 1、将Discuz包移动到/discuz 2、解压…

ArkTS @Observed、@ObjectLink状态装饰器的使用

作用 Observed、ObjectLink装饰器用于在涉及嵌套对象或者数组元素为对象的场景中进行双向数据同步。 状态的使用 1.嵌套对象 我们将父类设置为Observed状态&#xff0c;这个时候&#xff0c;子应该设置ObjectLink才能完成数据的双向绑定&#xff0c;所以我们构建一个组件&…

C语言插入排序算法及代码

一、原理 在待排序的数组里&#xff0c;从数组的第二个数字开始&#xff0c;通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。 二、代码部分 #include<stdio.h> #include<stdlib.h> int ma…

Android的基础开发

基础开发 listView ListView就是列表条目&#xff0c;可以向下滚动&#xff0c;也可以点击。 首先设置两个视图布局 activity_main2.xml【充当容器{ListView}】 <ListViewandroid:layout_width"match_parent"android:layout_height"match_parent"a…

AWS向量数据库Amazon OpenSearch Service使用测评

前言 在大模型盛行的当今&#xff0c;选择适宜的数据库显得尤为重要。因为你需要面对海量训练数据&#xff0c;快速的检索至关紧要&#xff0c;以及对于存储的要求也是至关重要的。对于海量的数据查询和存储是需要巨大的算力支持。向量数据库常用在一些图像文本或者视频的生成…

【大数据存储与处理】实验二 HBase 过滤器操作

实验二 HBase 过滤器操作 【实验目的】&#xff1a; 1.掌握使用 HBase 过滤器进行全表扫描。 【实验内容与要求】&#xff1a; 在 HBase 中&#xff0c;Get 和 Scan 操作都可以使用过滤器来设置输出的范围&#xff0c;类似于 SQL 里面 的 Where 查询条件。使用 show_filte…

【VScode和Leecode的爱恨情仇】command ‘leetcode.signin‘ not found

文章目录 一、关于command ‘leetcode.signin‘ not found的问题二、解决方案第一&#xff0c;没有下载Nodejs&#xff1b;第二&#xff0c;有没有在VScode中配置Nodejs第三&#xff0c;力扣的默认在VScode请求地址中请求头错误首先搞定配置其次搞定登入登入方法一&#xff1a;…

obswebsocket+douyinAPI+python,教你如何三步搭建自己的AI美女直播间,24小时的永动机

一&#xff1a;什么是AI直播美女直播间 就是在直播的时候通过弹幕进行选择不同的ai人物进行跳舞的直播间大致就是 可以看到左边是有提示&#xff0c;根据观众刷礼物的不同进行选择某一个AI人物进行展示&#xff0c;怎么通过技术手段实现呢 二&#xff1a;你需要懂的 其实还…

vmware安装银河麒麟V10高级服务器操作系统

vmware安装银河麒麟V10高级服务器操作系统 1、下载银河麒麟V10镜像2、VMware安装银河麒麟V10高级服务器操作系统2.1、新建虚拟机2.2、安装虚拟机 3、配置银河麒麟V10高级服务器操作系统3.1、安装vmware tools3.2、配置静态IP地址 和 dns3.3、查看磁盘分区 1、下载银河麒麟V10镜…

AI工具网站汇总——学习的好帮手

一、聊天AI 1.ChatGPT 地表最强AI聊天机器人 网址&#xff1a;https://chat.openai.com 2.Anthropic Anthropic发布的与ChatGPT竞争的聊天机器人 网址&#xff1a;https://www.anthropic.com 3.文心一言 百度全新知识增强大语言模型&#xff01;国产聊天机器人 网址&…

so-vits-svc的使用

1. 启动工程 找到工程的路径&#xff0c;找到启动的bat文件&#xff0c;这里以 d:/so-vits-svc为例。 2. 启动过程 启动后会出现cmp的一个弹框&#xff0c;初始启动相对较慢&#xff0c;请耐心等待一会儿&#xff0c;启动完成后&#xff0c;会出现一个页面&#xff0c;如下…

JDK各个版本特性讲解-JDK14特性

JDK各个版本特性讲解-JDK14特性 一、Java14概述二、语法层面的变化1. instanceof2. switch表达式3. 文本块的改进4. Records记录类型 二、关于GC1.G1的NUMA内存分配优化2. 弃用SerialCMS,ParNewSerial Old3.删除CMS4.ZGC on macOS and Windows 三、其他变化1.友好的空指针异常提…

HAproxy做七层代理+keepalived高可用,实现动静分离,由nginx处理静态页面,tomcat处理动态页面

目录 一、三种软负载均衡器的区别 关于三种负载均衡器的性能对比&#xff1a; 关于三种负载均衡器的代理类型对比&#xff1a; 关于三种负载均衡器的健康检查对比&#xff1a; 二、haproxy的8中负载均衡调度算法 haproxy的会话保持的方式 haproxy的配置文件学习 三、实操…

(详解版)创建线程的四种方式

文章目录 Java中创建线程的四种方式1. 继承Thread类并重写 run 方法来创建线程2. 实现Runnable接口并实现 run 方法来创建线程。3. 使用Callable接口创建线程4. 使用Executor框架创建线程 Java中创建线程的四种方式 接下来我会详细解释这四种方式创建线程如何实现. 我们如果要…

【HarmonyOS开发】ArkTs关系型和非关系型数据库的存储封装

前面使用了首选项的存储方式&#xff0c;因此将其他的两种存储方式&#xff08;键值型数据库和关系型数据库&#xff09;也学习一下&#xff0c;简单记录一下&#xff0c;并进行封装&#xff0c;方便后续使用。 1、效果预览 2、使用条件 2.1 键值型数据库 键值型数据库实现数据…

RabbitMQ入门指南(三):Java入门示例

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、AMQP协议 1.AMQP 2.Spring AMQP 二、使用Spring AMQP实现对RabbitMQ的消息收发 1.案例准备阶段 2.入门案例&#xff08;无交换机&#xff09; 3.任务模型案例&#xff08;Work Queues&#xff0…

九.数据处理之增删改

数据处理之增删改 1.插入数据1.1实际问题1.2方式1&#xff1a;VALUES的方式添加1.3方式2&#xff1a;将查询结果插入到表中 2.更新数据3.删除数据4.MySQL8新特性&#xff1a;计算列5.综合案例 1.插入数据 1.1实际问题 解决方式&#xff1a;使用INSERT语句向表中插入数据 1.2方…