RK3588camera: AHD摄像头转MIPI转接芯片调试

news2024/11/21 1:29:23

我们常见的摄像头接口一般有MIPI、USB、DVP等等,但是MIPI摄像头受限于高速信号的传输距离问题,导致走线不能太长,这样在安防监控领域、车载等领域,使用就很受限,因此会引入一些技术延长摄像头的数据传输距离,例如之前文章所提到的serdes,本文主要介绍一下AHD摄像头对接RK3588的调试。

目录

(1)AHD摄像头

(2)转接芯片

(3)AHD转MIPI调试

①nvp6188_g_mbus_config接口

②bus fmt配置

③DTS配置

(4)AHD转BT1120

①驱动nvp6158_g_mbus_config配置

②nvp6158_querystd接口配置

③DTS配置

④pinctrl的配置

(5)APK预览

(6)抓图指令调试


(1)AHD摄像头

网上有很多关于AHD摄像头的介绍,这里不再赘述,这里提一下,AHD摄像头跟我前文介绍的serdes有一点类似,有一个目的是提高了传输的距离。常用于车载、安防等领域。

AHD是模拟摄像头,因此需要AD转换芯片来转换,输出数字信号给到主控进行接收。

(2)转接芯片

上述AHD摄像头需要转接芯片转成数字信号输出,一般是AHD转MIPI或者AHD转BT656/BT1120并口输出。前级摄像头有的厂家也会兼容TVI、CVBS等信号。

CVBS可以参考前一篇文章的介绍。

这篇文章主要给大家分享一下,AHD摄像头转MIPI或者BT1120转接芯片的调试。

常见的转接芯片有:NVP系列的NVP6188/NVP6324/NVP6158C

TP系列的:TP2815/TP9950/TP9930/TP2825等

RN系列的:RN6854/RN6752等等

这里我们以介绍调试N6为例。

(3)AHD转MIPI调试

同样的转接芯片的驱动也是基于V4l2框架的,因为主要介绍一下相关接口的配置即可。

①nvp6188_g_mbus_config接口

该接口配置主要配置了MIPI接口,4lane模式,以及4路虚拟通道的类型。如果需要接多路摄像头的话,需要配置这个。

static int nvp6188_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad_id,
				 struct v4l2_mbus_config *cfg)
{
	cfg->type = V4L2_MBUS_CSI2_DPHY;
	cfg->flags = V4L2_MBUS_CSI2_4_LANE |
		     V4L2_MBUS_CSI2_CHANNELS;

	return 0;
}

②bus fmt配置

图像格式一般都是YUV422的类型。配置如下:

.bus_fmt = MEDIA_BUS_FMT_UYVY8_2X8,

其他的配置其他文章也都有描述,这里不再赘述。

③DTS配置

dts配置基本与camera配置相差无几,这里直接贴一下:

&csi2_dphy0_hw {
	status = "okay";
};

&csi2_dphy0 {
	status = "okay";

	ports {
		#address-cells = <1>;
		#size-cells = <0>;
		port@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			mipi_dphy0_in_nvp6188: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&nvp6188_out>;
				data-lanes = <1 2 3 4>;
			};
		};
		port@1 {
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;

			csidphy0_out: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&mipi2_csi2_input>;
			};
		};
	};
};

&i2c7 {
	status = "okay";


	nvp6188: nvp6188@31 {
		compatible = "nvp6188";
		status = "okay";
		reg = <0x31>;
		clocks = <&cru CLK_MIPI_CAMARAOUT_M2>;
		clock-names = "xvclk";
		power-domains = <&power RK3588_PD_VI>;
		pinctrl-names = "default";
		pinctrl-0 = <&mipim1_camera1_clk>;
		rockchip,grf = <&sys_grf>;
		/*power-gpios = <&gpio3 RK_PC6 GPIO_ACTIVE_HIGH>;*/
		reset-gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_HIGH>;
		rockchip,camera-module-index = <0>;
		rockchip,camera-module-facing = "back";
		rockchip,camera-module-name = "nvp6188";
		rockchip,camera-module-lens-name = "nvp6188";

		port {
			nvp6188_out: endpoint {
				remote-endpoint = <&mipi_dphy0_in_nvp6188>;
				data-lanes = <1 2 3 4>;
			};
		};
	};
};

&mipi2_csi2 {
	status = "okay";

	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			mipi2_csi2_input: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&csidphy0_out>;
			};
		};

		port@1 {
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;

			mipi2_csi2_output: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&cif_mipi2_in>;
			};
		};
	};
};

&rkcif_mipi_lvds2 {
	status = "okay";
	/* parameters for do cif reset detecting:
	 * index0: monitor mode,
		   0 for idle,
		   1 for continue,
		   2 for trigger,
		   3 for hotplug (for nextchip)
	 * index1: the frame id to start timer,
		   min is 2
	 * index2: frame num of monitoring cycle
	 * index3: err time for keep monitoring
		   after finding out err (ms)
	 * index4: csi2 err reference val for resetting
	 */
	rockchip,cif-monitor = <3 2 1 1000 5>;

	port {
		cif_mipi2_in: endpoint {
			remote-endpoint = <&mipi2_csi2_output>;
		};
	};
};

&rkcif {
	status = "okay";
	rockchip,android-usb-camerahal-enable;
	// memory-region = <&cif_reserved>;
};

&rkcif_mmu {
	status = "okay";
};

需要注意的只有rockchip,android-usb-camerahal-enable;这个配置,该配置是在多路摄像头的时候使用,可以让应用注册4路摄像头,从而apk可以同时预览4路。如果是自行开发应用,使用v4l2从video节点直接取数据流的话,那么可以不用。

(4)AHD转BT1120

AHD 转BT1120的调试,这里介绍一下NVP6158C的调试

①驱动nvp6158_g_mbus_config配置

这个配置与MIPI的配置略有不同,需要注意区分,其中极性一定需要配置。

static int nvp6158_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad,
				 struct v4l2_mbus_config *cfg)
{
	struct nvp6158 *nvp6158 = to_nvp6158(sd);

	cfg->type = V4L2_MBUS_BT656;
	if (nvp6158->dual_edge == 1) {
		cfg->flags = RKMODULE_CAMERA_BT656_CHANNELS |
			V4L2_MBUS_PCLK_SAMPLE_RISING |
			V4L2_MBUS_PCLK_SAMPLE_FALLING;
	} else {
		cfg->flags = RKMODULE_CAMERA_BT656_CHANNELS |
			V4L2_MBUS_PCLK_SAMPLE_RISING;
	}
	return 0;
}

②nvp6158_querystd接口配置

该接口一定需要配置,其中BT1120需要声明为V4L2_STD_ATSC

static int nvp6158_querystd(struct v4l2_subdev *sd, v4l2_std_id *std)
{
	struct nvp6158 *nvp6158 = to_nvp6158(sd);

	if ((nvp6158->mode > BT656I_TEST_MODES) &&
		(nvp6158->mode < NVP6158_DVP_MODES_END)) {
		/* for vicap detect bt1120 */
		*std = V4L2_STD_ATSC;
	} else {
		*std = V4L2_STD_PAL;
	}
	return 0;
}

③DTS配置

dts配置参考如下:

&i2c2 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&i2c2m4_xfer>;

	nvp6158: nvp6158@30 {
		compatible = "nvp6158-v4l2";
		status = "okay";
		reg = <0x30>;
		clocks = <&cru CLK_CIFOUT_OUT>;
		clock-names = "xvclk";
		power-domains = <&power RK3588_PD_VI>;
		pinctrl-names = "default";
		pinctrl-0 = <&cif_clk &cif_dvp_clk &cif_dvp_bus8 &cif_dvp_bus16>;
		// pwr-gpios = <&gpio1 RK_PA6 GPIO_ACTIVE_HIGH>;
		pwr2-gpios = <&gpio1 RK_PA5 GPIO_ACTIVE_HIGH>;
		rst-gpios = <&gpio1 RK_PA3 GPIO_ACTIVE_HIGH>;
		// rst2-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>;
		// pwdn-gpios = <&gpio1 RK_PA4 GPIO_ACTIVE_HIGH>;
		// pwdn2-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;
		rockchip,camera-module-index = <0>;
		rockchip,camera-module-facing = "back";
		rockchip,camera-module-name = "default";
		rockchip,camera-module-lens-name = "default";
		rockchip,dvp_mode = "BT1120"; //BT656 or BT1120 or BT656_TEST
		rockchip,channel_nums = <4>; //channel nums, 1/2/4
		rockchip,dual_edge = <1>; // pclk dual edge, 0/1
		rockchip,default_rect= <1920 1080>; // default resolution
		port {
			nvp6158_out: endpoint {
				remote-endpoint = <&dvp_in_bcam1>;
			};
		};
	};
};

&rkcif {
	status = "okay";
};

&rkcif_dvp {
	status = "okay";
	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
			#address-cells = <1>;
			#size-cells = <0>;
			/* Parallel bus endpoint */
			dvp_in_bcam1: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&nvp6158_out>;
				bus-width = <16>;
			};
		};
	};
};

&rkcif_mmu {
	status = "okay";
};

④pinctrl的配置

这里需要特别注意的是,pinctrl的引用一定需要正确。这里引用的是并口的16条总线以及相关的clk。

pinctrl-0 = <&cif_clk &cif_dvp_clk &cif_dvp_bus8 &cif_dvp_bus16>;

(5)APK预览

如果是走官方的USBCAMERAHAL的话,可以打开上述DTS的配置:rockchip,android-usb-camerahal-enable就会注册4路,之后就可以使用多摄的APK进行预览。

(6)抓图指令调试

开数据流

v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='NV12' --stream-mmap=4

抓图:

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='NV12' --stream-mmap=3 --stream-skip=4 --stream-to=/data/1920x1080p60_nv12.yuv --stream-count=5 --stream-poll

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

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

相关文章

Pytorch之SwinTransformer图像分类

文章目录 前言一、Swin Transformer1.Swin Transformer概览2.Patch Partition3.Patch Merging4.W-MSA5.SW-MSA(滑动窗口多头注意力机制)6.Relative Position bias(相对位置偏移)7.网络结构&#x1f947;Swin Transformer Block&#x1f948;Architecture 二、网络实现1.构建Eff…

【docker】Docker--harbor私有仓库部署与管理——重点

一、理论 1、本地私有仓库 只能在当前机器上做 #首先下载 registry 镜像 docker pull registry #在 daemon.json 文件中添加私有镜像仓库地址 vim /etc/docker/daemon.json { "insecure-registries": ["192.168.10.23:5000"], …

阿里云r8i内存型服务器ECS实例介绍_CPU性能_网络存储测评

阿里云服务器ECS内存型r8i实例CPU采用第四代Intel Xeon可扩展处理器&#xff08;Sapphire Rapids&#xff09;&#xff0c;基频2.7 GHz&#xff0c;全核睿频3.2 GHz&#xff0c;计算性能稳定&#xff0c;CPU内存比1:8&#xff0c;采用阿里云全新CIPU架构&#xff0c;CPU核心2核…

vue elementui的select组件实现滑到底部分页请求后端接口

vue elementui的select组件实现滑到底部分页请求后端接口 1.实现效果2.实现原理 1.实现效果 老规矩&#xff0c;直接上最后的实现效果 2.实现原理 直接上代码 <el-form-item class"diagmosisItem" label"诊断" v-scroll"handleScroll">…

Spring实战 | Spring IOC不能说的秘密?

国庆中秋特辑系列文章&#xff1a; 国庆中秋特辑&#xff08;八&#xff09;Spring Boot项目如何使用JPA 国庆中秋特辑&#xff08;七&#xff09;Java软件工程师常见20道编程面试题 国庆中秋特辑&#xff08;六&#xff09;大学生常见30道宝藏编程面试题 国庆中秋特辑&…

巧用h2-database.jar连接数据库

文章目录 一 、概述二、实践三、解决办法 一 、概述 H2 Database是一个开源的嵌入式数据库引擎&#xff0c;采用java语言编写&#xff0c;不受平台的限制&#xff0c;同时H2 Database提供了一个十分方便的web控制台用于操作和管理数据库内容。H2 Database还提供兼容模式&#…

hive数据表创建

目录 分隔符 分区表 二级分区 分桶表 外部表 分隔符 CREATE TABLE emp( userid bigint, emp_name array<string>, emp_date map<string,date>, other_info struct<deptname:string, gender:string>) ROW FORMAT DELIMITED FIELDS TERMINATED BY \t COL…

BN体系理解——类封装复现

from pathlib import Path from typing import Optionalimport torch import torch.nn as nn from torch import Tensorclass BN(nn.Module):def __init__(self,num_features,momentum0.1,eps1e-8):##num_features是通道数"""初始化方法:param num_features:特征…

工业读写器如何选型?

随着工业自动化的迅速发展&#xff0c;库存管理、生产流程、质量管理等传统工作人工工作也逐渐由各种智能设备来替代管理。RFID技术作为非接触式数据传输的通信方式&#xff0c;也常常应用在工业场合之中。具体工业RFID读写器如何选型&#xff0c;有哪些选择要点呢?ANDEAWELL国…

复杂环境下人形机器人自动导航项目复盘

百度飞浆企业赛&#xff1a; 乐聚机器人提供动作工程文件&#xff0c;aelos软件中可修改动作的每个舵机的数值。 Aelos Smart零点设置 MobXterm上通过ssh远程连接树莓派。 1、上下开横杆 横杆一开始是关闭的&#xff0c;横杆打开的那个瞬间&#xff0c;机器人以最快速度通过。…

spring:详解控制反转IOC

文章目录 IOC工厂模式实例基于xml管理Bean基于注解管理Bean常用注解&#xff1a;用于创建对象的常用注解&#xff1a;用于注入数据的常用注解&#xff1a;和生命周期相关的(了解)常用注解&#xff1a;新注解 IOC IOC (Inversion of Control)是Spring的核心概念之一。它是指控制…

智能电表消磁复位怎么回事

随着科技的发展的不断进步&#xff0c;智能电表已经成了家家户户用电管理的左膀右臂。相对于传统电表&#xff0c;智能电表具备远程控制读值、实时监控系统、自动控制系统等服务&#xff0c;不但能有效提高电气安全&#xff0c;还有助于客户节约能源。但是&#xff0c;智能电表…

从零开始探索C语言(十一)----共用体和位域

文章目录 1. 共用体1.1 定义共用体1.2 访问共用体成员 2. 位域2.1 位域声明2.2 位域的定义和位域变量的说明2.3 位域的使用2.4 位域小结 1. 共用体 共用体是一种特殊的数据类型&#xff0c;允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体&#…

Vuex基础使用存取值+异步请求后台

目录 一、Vuex简介 1.1 定义 1.2 Vuex关键概念 1.3 使用Vuex的优势 1.4 Vuex中各个js文件的用途 1.5 Vuex各组件 1.5.1 图解 1.5.2 详解 1.6 变量传值的演变形式 二、Vuex获取值 2.1 安装 2.2 菜单栏 2.3 模块 2.4 引用 三、Vuex改变值 四、Vuex异步&请求后台…

Jmeter性能测试之生成测试报告详解

结构 测试计划 测试计划是顶级的层级⽬录的结构&#xff0c; 那么在这样的⽬录结构中&#xff0c;⾥⾯可以包含很多线程组 线程组 线程组我们可以简单的理解为postman测试⼯具⾥⾯的collection&#xff0c;那么在整体线程组⾥⾯&#xff0c;可以添加很多的测试 ⽤例 简单控…

北京股票开户的佣金手续费是多少?北京股票开户选择哪家券商?

北京股票开户的佣金手续费是多少?北京股票开户选择哪家券商? 股票注册开户是非常简单的&#xff0c;在2015年前也就是互联网还不发达的时候&#xff0c;投资者只能去券商的营业部柜台办理&#xff0c;而自从各大券商都可以网上开户后&#xff0c;更多的投资者会选择网上开户…

红队专题-从零开始VC++远程控制软件RAT-C/S-[1]远控介绍及界面编写

红队专题 招募六边形战士队员[1]---远控介绍及界面编写1.远程控制软件演示及教程简要说明主程序可执行程序 服务端生成器主机上线服务端程序 和 服务文件管理CMD进程服务自启动主程序主对话框操作菜单列表框配置信息 多线程操作非模式对话框 2.环境&#xff1a;3.界面编程新建项…

2023年中国滑雪设备行业分析:随着滑雪运动人数增加,产品需求不断提升[图]

滑雪设备行业是指生产各种滑雪设备的行业。这些设备包括滑雪板、雪杖、雪鞋、滑雪杆、滑雪头盔、滑雪镜等。这些设备广泛应用于滑雪运动和相关活动&#xff0c;为滑雪者提供安全、舒适和高效的体验。 滑雪设备行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&am…

ITSS云能力评估是什么?

一、ITSS云服务能力评估是什么为了提升云计算产品&#xff08;系统&#xff09;的服务能力&#xff0c;保证云计算服务质量&#xff0c;以GB/T 36326-2018《信息技术云计算云服务运营通用要求》等系列国家标准为依托&#xff0c;由中国电子工业标准化技术协会信息技术分会&…

HashMap(2)正文源码分析

序、慢慢来才是最快的方法。 1.简介 HashMap的底层结构是基于分离链表发解决散列冲突的动态散列表。 在Java7中使用数组链表&#xff0c;发生散列冲突的键值对会使用头插法添加到单链表中&#xff1b;在Java8中使用数组链表红黑树&#xff0c;发生散列冲突的键值对会用尾插发…