RK DVP NVP6158配置 学习

NVP6158简介

       NVP6158C是一款4通道通用RX,提供高质量图像的芯片。它接受来自摄像机和其他视频信号的独立4通道通用输入来源。它将4通道通用1M至8M 7.5P视频格式数字化并解码为代表8位ITU-R BT.656/1120 4:2:2格式的数字分量视频,并将单独的BT.601格式与27/36/37.125MHz同步,54/72/74.25MHz和108/144/148.5/297MHz多路复用。54/72/74.25/108/144/148.5/297MHz复用功能可用,因为它在时钟范围内锁相环NVP6158C包括4通道模拟处理电路,包括抗混叠滤波器、ADC、钳位和均衡器滤波器。采用自适应高性能梳状滤波器和垂直峰值滤波器,获得了最佳的图像质量。它还支持可编程的饱和度、色调、亮度、对比度以及CTI、可编程峰值滤波器和各种补偿滤波器等多种功能。

RK DVP简介:

     


DVP(Digital Video Port) 是传统的sensor输出接口,采用并行输出方式,d数据位宽有8bit、10bit、12bit、16bit,是CMOS电平信号(重点是非差分信号),PCLK最大速率为96MHz,接口如下图:

PCLK:pixel clock ,像素时钟,每个时钟对应一个像素数据;
HSYNC:horizonal synchronization,行同步信号
VSYNC:vertical synchronization,帧同步信号;
DATA:像素数据,视频数据,具体位宽要看ISP是否支持;
XCLK:或者MCLK,ISP芯片输出给驱动sensor的时钟;
SCL,SDA:IIC用来读写sensor的寄存器,配置sensor。

NVP6158 与 RK3568 DVP连接相关原理图:

设备树配置:

&rkcif { 
	status = "okay"; 
	memory-region = <&cif_reserved>; 
 
};
&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>; 
			}; 
			}; 
		}; 
};	
nvp6158: nvp6158@30 { 
		compatible = "nvp6158-v4l2"; 
		status = "okay";
		reg = <0x30>; 
		clocks = <&cru CLK_CIF_OUT>; 
		clock-names = "xvclk"; 
		power-domains = <&power RK3568_PD_VI>; 
		pinctrl-names = "default"; 
		pinctrl-0 = <&cif_clk &cif_dvp_clk &cif_dvp_bus16>; 
		//pinctrl-0 = <&cif_dvp_clk &cif_dvp_bus8 &cif_dvp_bus16>;
		pwr-gpios = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>; 
		//pwr2-gpios = <&gpio4 RK_PC7 GPIO_ACTIVE_HIGH>;/* 360 camera */ 
		rst-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>; 
		/*rst2-gpios = <&gpio2 RK_PC5 GPIO_ACTIVE_HIGH>;*/ 
		/*pwdn-gpios = <&gpio4 RK_PA6 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 = <0>; // pclk dual edge, 0/1 
		rockchip,default_rect= <1920 1080>; // default resolution 
		port {
			nvp6158_out: endpoint { 
			remote-endpoint = <&dvp_in_bcam1>; 
		}; 
		}; 
	};

clocks = <&cru CLK_CIF_OUT>; //走GPIO CIF时钟 配置为是27M

 clock-names = "xvclk";

	nvp6158->xvclk = devm_clk_get(dev, "xvclk");
	if (IS_ERR(nvp6158->xvclk)) {
		dev_err(dev, "Failed to get xvclk\n");
		return -EINVAL;
	}
	if (ret < 0) {
	#define NVP6158_XVCLK_FREQ			27000000
	ret = clk_set_rate(nvp6158->xvclk, NVP6158_XVCLK_FREQ);
		dev_err(dev, "Failed to set xvclk rate (24MHz)\n");
		return ret;
	}

rockchip,dvp_mode = "BT1120" :走BT1120模式

rockchip,channel_nums = <4>;//并口的数据lane ,只有一条lane 可配置1 参数:1/2/4

rockchip,default_rect= <1280 720>;摄像头分辨率。 rkcif会从nvp6158驱动里获取

rockchip,dual_edge :pclk的边沿有效 一般用于配置分辨率 720p:0 1080P:1 如下

rkcif 会获取对应的pclk dual_edge 
static int nvp6158_g_mbus_config(struct v4l2_subdev *sd,
				 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关注的代码:

初始化热拔插工作队列:

INIT_DELAYED_WORK(&nvp6158->plug_state_check.d_work, nvp6158_plug_state_check_work);
        nvp6158->plug_state_check.state_check_wq =
                create_singlethread_workqueue("nvp6158_work_queue");
        if (nvp6158->plug_state_check.state_check_wq == NULL) {
                dev_err(dev, "%s(%d): %s create failed.\n", __func__, __LINE__,
                          "nvp6158_work_queue");
        }

热拔插队列:打开DVP摄像头后 nvp6158_no_signal 读取nvp6158 0xa8地址,判断摄像头有无接入


#ifdef WORK_QUEUE
static void nvp6158_plug_state_check_work(struct work_struct *work)
{
        struct sensor_state_check_work *params_check =
                container_of(work, struct sensor_state_check_work, d_work.work);
        struct nvp6158 *nvp6158 =
                container_of(params_check, struct nvp6158, plug_state_check);
        struct i2c_client *client = nvp6158->client;
        struct v4l2_subdev *sd = &nvp6158->subdev;
        u8 novid_status = 0x00;
        u8 sync_status = 0x00;

        nvp6158_no_signal(sd, &novid_status);
        nvp6158_sync(sd, &sync_status);
        nvp6158->cur_detect_status = novid_status;

        /* detect state change to determine is there has plug motion */
        novid_status = nvp6158->cur_detect_status ^ nvp6158->last_detect_status;
        if (novid_status)
                nvp6158->hot_plug = true;
        else
                nvp6158->hot_plug = false;
        nvp6158->last_detect_status = nvp6158->cur_detect_status;

        dev_info(&client->dev, "%s has plug motion? (%s)", __func__,
                         nvp6158->hot_plug ? "true" : "false");
        if (nvp6158->hot_plug) {
                dev_info(&client->dev, "queue_delayed_work 1500ms, if has hot plug motion.");
                queue_delayed_work(nvp6158->plug_state_check.state_check_wq,
                                   &nvp6158->plug_state_check.d_work, msecs_to_jiffies(1500));
                nvp6158_write(client, 0xFF, 0x20);
                nvp6158_write(client, 0x00, (sync_status << 4) | sync_status);
                usleep_range(3000, 5000);
                nvp6158_write(client, 0x00, 0xFF);
        } else {
                dev_info(&client->dev, "queue_delayed_work 100ms, if no hot plug motion.");
                queue_delayed_work(nvp6158->plug_state_check.state_check_wq,
                                   &nvp6158->plug_state_check.d_work, msecs_to_jiffies(100));
        }
}
#endif

调试:

  I2C无法读取写入:

             1.确认电源电压

            2.确认时钟脚有无27M CLK信号

            3.排查是否其他器件影响

无图像:1.确认时钟脚有无27M CLK信号

              2.确认下发的分辨率与接入的摄像头是否对应得上

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

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

相关文章

基于ERNIR3.0文本分类的开发实践

参考&#xff1a; https://zhuanlan.zhihu.com/p/574666812?utm_id0 遇到的问题&#xff1a;如下 采用paddleNLP下文本分类实例进行分类训练后发现 生成的模型分类不准。打算自己开发脚本进行分类计算再进行服务化部署。

指针数组的理解

指针数组的概念&#xff1a;即用于存放指针变量的数组 代码如下&#xff1a;使用指针数组来模拟二维数组 int main() {//创建三个整型数组int arr1[] { 1,2,3,4,5 };int arr2[] { 2,3,4,5,6 };int arr3[] { 3,4,5,6,7 };int* p_arr[3] { arr1,arr2,arr3 };for (int i 0;…

WiFi|硬体:茶凳浅谈-高通802.11be WLAN AP Chipsets 参考设计与boardData之间的映射

前言: WiFi|硬体:茶凳浅谈-高通Wi-Fi 7立项前的选型 博文中提到一些选型的组合&#xff0c;比如: 主芯片的搭配IPQ9554 QCN9274 (2x2 2.4G, 2x2 5G) QCN9272 (2x2 6G) 主芯片的搭配IPQ9574 QCN9274 (2x2 2.4G, 2x2 5GL) QCN9274 (2x2 5GH, 2x2 6G) 红色标示出差异的部分…

电脑硬件变化报警|2024完整珍藏版

公司中常常会有一种泄密事情发生&#xff0c;是这样的&#xff1a; 使用移动硬盘、外部硬盘驱动器或其他外部存储设备&#xff0c;将文件复制到这些设备上&#xff0c;然后将设备连接到另一台电脑&#xff0c;即可将文件拷贝出去。 还有人这样说&#xff1a;“我人都在面前了…

CV论文--2024.3.4

1、Deep Networks Always Grok and Here is Why 中文标题&#xff1a;深度网络总是让人摸不着头脑&#xff0c;原因如下 简介&#xff1a;本文探讨了深度神经网络&#xff08;DNN&#xff09;中一种称为"延迟泛化"或"Grokking"的现象。在接近零的训练误差…

如何在服务器上建立国外私有云存储

随着数字化时代的到来&#xff0c;数据备份和存储成为了我们生活与工作中不可或缺的一部分。私有云存储&#xff0c;以其灵活性、安全性和便捷性&#xff0c;受到了越来越多用户的青睐。特别是对于需要在国外服务器上建立私有云存储的用户来说&#xff0c;这一需求更加迫切。下…

信钰证券|飞行汽车概念走势活跃,金盾股份“20cm”涨停

飞翔汽车概念5日盘中走势活泼&#xff0c;到发稿&#xff0c;金盾股份“20cm”涨停&#xff0c;万丰奥威涨超6%&#xff0c;光洋股份涨逾5%&#xff0c;商络电子、星源卓镁涨近4%。 金盾股份强势涨停&#xff0c;公司近来在出资者互动渠道表示&#xff0c;公司和清华大学联合研…

基于深度学习的人员指纹身份识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 指纹图像预处理与特征提取 4.2 卷积神经网络架构 4.3 特征编码与匹配 4.4 损失函数与训练 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程…

一键抠图怎么把物品抠出来?一键完成!物品抠图不再是难事!

在我们的日常生活和工作中&#xff0c;抠图已经成为了一个常见的需求。无论是为了制作一张精美的海报&#xff0c;还是为了在一篇文章中突出展示某个物品&#xff0c;抠图都能帮助我们更好地实现目标。然而&#xff0c;对于许多人来说&#xff0c;使用专业的抠图软件如Photosho…

2024年5个高性价比2C4G云服务器推荐,2核4G服务器优惠价格表

租用2核4G服务器费用价格&#xff0c;2核4G云服务器多少钱一年&#xff1f;1个月费用多少&#xff1f;阿里云2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年&#xff1b;腾讯云轻量2核4G服务器5M带宽165元一年、252元15个月、540元三…

5G智能制造食品工厂数字孪生可视化平台,推进食品行业数字化转型

5G智能制造食品工厂数字孪生可视化平台&#xff0c;推进食品行业数字化转型。随着科技的飞速发展&#xff0c;食品工业正迎来一场前所未有的数字化转型。在这场转型中&#xff0c;5G智能制造工厂数字孪生可视化平台发挥着至关重要的作用。它不仅提高了生产效率&#xff0c;降低…

深度学习算法的基本原理

深度学习是一种机器学习方法&#xff0c;其核心是通过构建深层神经网络来学习数据的表示和特征&#xff0c;以解决各种复杂的任务。以下是深度学习算法的基本原理&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎…

40个Python字符串实例

Python 字符串是 Python 编程语言中最常用的数据类型之一&#xff0c;它可以表示文本或一组字符。Python 中的字符串是不可变的序列&#xff0c;意味着一旦创建&#xff0c;其值就不能被修改。下面是一些关于 Python 字符串的介绍。 概述 创建字符串&#xff1a;可以使用单引…

MWC 2024丨美格智能CEO杜国彬出席中国联通创新成果发布会并发表主题演讲

2月26日&#xff0c;中国联通在MWC2024 巴塞罗那期间举办了以“算网为基&#xff0c;智领未来”为主题的创新成果发布会&#xff0c;集中展示最新的创新成果与最佳实践。 中国通信标准化协会理事长闻库、GSMA首席财务官Louise Easterbrook、中国联通副总经理梁宝俊、华为ICT销…

[C语言]——C语言常见概念(2)

目录 一.第⼀个C语言程序 二.main函数 三.print和库函数 1.print 2.库函数 四.关键字介绍 一.第⼀个C语言程序 #include <stdio.h> int main() {printf("hello C\n");return 0;//约定返回0&#xff0c;在c语言中&#xff0c;正常返回0&#xff0c;异常…

HI3516DV500 HI3516DRFCV500 HI3516DRBCV500 海思安防监控芯片 提供原厂开发包

总体介绍 Hi3516DV500是一颗面向视觉行业推出的高 清智能SoC。该芯片最高支持2路sensor输入&#xff0c;支持最高5M30fps的ISP图像处理能力&#xff0c;支持2F WDR、多级降噪、六轴防抖、多光谱融合等多种 传统图像增强和处理算法&#xff0c;支持通过AI算法对输 入图像进行实…

安装mysql this application requires visual studio 2019 x64报错

提示 this application requires visual studio 2019 x64 缺少依赖 安装依赖 选择对应版本 安装 依赖安装地址 成功进入安装界面

redis02 安装

官网下载 传送门https://redis.io/download/#redis-downloads 安装Redis mac m1安装 下载你需要版本的软件包放到指定的目录下进行解压 cd 到解压好的redis目录 运行下面的命令进行编译测试 sudo make test 中途可能会提示你安装make工具&#xff0c;按提示安装即可&…

生活干货知识:手机流量卡网速不佳的常见原因及解决办法

最近有很多的小伙伴后台留言给我&#xff0c;为什么有时候手机网路那么差呢&#xff1f;甚至连一个基本的网页都打不开&#xff0c;播放视频和电影更不用说了&#xff0c;这样严重影响了我们的使用体验&#xff0c;到底什么原因导致的呢&#xff1f;相信很多小伙伴至今仍然未清…

Processing一些基础程序

一、学会绘制窗口 (1)首先我们需要学会绘制一个窗口&#xff0c;size()函数有两个参数&#xff1a;第一个设定窗口的宽度&#xff0c;第二个设定窗口的高度&#xff0c;如果想要设置一个窗口为宽800像素&#xff0c;高为600像素的窗口&#xff0c;输入以下代码&#xff1a;size…