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			27000000ret = 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;elsenvp6158->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.确认下发的分辨率与接入的摄像头是否对应得上

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

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

相关文章

40个Python字符串实例

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

如何找回删除的文件?5个数据恢复方法

电脑已经成为我们生活和工作不可或缺的一部分。然而随着电脑使用频率的增加&#xff0c;误删文件的情况也时有发生。一旦重要的文件被误删&#xff0c;很多人会感到惊慌失措。实际上只要掌握了一些有效的数据恢复方法&#xff0c;就有可能找回那些被误删的文件。本文将为你介绍…

指针中的回调函数与qsort的深度理解与模拟

今天给大家在更新一下指针类型的知识&#xff0c;这里讲到了一个库函数sqort&#xff0c;以及回调函数的理解。 望喜欢 目录 回调函数 qsort函数 qsort模拟实现 回调函数 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数…

Mac清理电脑垃圾工具CleanMyMac X4.15中文免费版下载

嘿&#xff0c;亲爱的Mac用户们&#xff0c;你们是否曾经想象过你的电脑是一座美丽的城市&#xff0c;而垃圾文件则是那些不速之客&#xff0c;悄悄堆积&#xff0c;影响着城市的整体美观。今天&#xff0c;我们就来聊聊Mac为什么会产生垃圾文件&#xff0c;这些垃圾文件会对你…

【科研基础】插图摘录

FedSL: Federated Split Learning for Collaborative Healthcare Analytics on Resource-Constrained Wearable IoMT Devices Blockchain-Based Trustworthy and Efficient Hierarchical Federated Learning for UAV-Enabled IoT Networks

机械五要素手持气象站的应用

TH-SQ5在数字化和智能化的时代背景下&#xff0c;气象监测技术正日益成为众多行业不可或缺的利器。其中&#xff0c;机械五要素手持气象站以其便携性、实时性和多功能性受到了广泛关注。下面讲解一下手持气象站是什么以及应用&#xff1a; 一、机械五要素手持气象站概述 机械五…

白酒:制曲工艺的环境因素与微生物生态关系

在豪迈白酒的酿造过程中&#xff0c;制曲工艺是非常关键的一环。而环境因素与微生物生态关系对于制曲工艺的成功与否起着决定性的作用。云仓酒庄深谙此道&#xff0c;在制曲过程中注重环境因素的调控&#xff0c;并深入研究微生物生态关系&#xff0c;以提升豪迈白酒的品质和风…

【Java EE 】认识文件与Java文件操作

目录 &#x1f340;认识文件&#x1f338;树型结构组织 和 目录&#x1f338;文件路径&#xff08;Path&#xff09;&#x1f338;其他知识 &#x1f333;Java 中操作文件&#x1f338;File 概述&#x1f33b;属性&#x1f33b;构造方法&#x1f33b;方法 &#x1f338;代码示例…

【论文精读】I-JEPA

摘要 计算机视觉中&#xff0c;常采用基于不变性和基于生成的方法进行自监督学习。对比学习&#xff08;CL&#xff09;是典型的基于不变性的方法&#xff0c;通过预训练方法优化编码器&#xff0c;使其能生成同一图像的两个或多个视图的相似嵌入&#xff0c;其中图像视图通常由…

【Linux实践室】Linux常用命令

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux文件操作2.1.1 &#x1f47b;创建文件2…

【vue.js】文档解读【day 1】 | 模板语法2

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 本人会很热心的阐述自己的想法&#xff01;谢谢&#xff01;&#xff01;&#xff01; 文章目录 模板语法JavaScript表达式仅支持表达式调用函数&#xff1f;受限的全局访问 指令参数动态参数动态参数中…

面试题HTML+CSS+网络+浏览器篇

文章目录 Css预处理sass less是什么&#xff1f;为什么使用他们怎么转换 less 为 css&#xff1f;重绘和回流是什么http 是什么&#xff1f;有什么特点HTTP 协议和 HTTPS 区别什么是 CSRF 攻击HTML5 新增的内容有哪些Css3 新增的特性flex VS grid清除浮动的方式有哪些&#xff…

Yolov8改进交流

YOLO v8改进 YOLOv8的改进&#xff0c;我接触的主要分为网络改进和代码改进&#xff0c;网络改进就是以注意力、主干为主&#xff0c;代码改进就是类似于Iou&#xff0c;类别权重等修改。 以下是yolov8的原始模型。 # Ultralytics YOLO &#x1f680;, AGPL-3.0 license # YO…

Tensorflow2.0+部署(tensorflow/serving)过程备忘记录Windows

Tensorflow2.0部署&#xff08;tensorflow/serving&#xff09;过程备忘记录 部署思路&#xff1a;采用Tensorflow自带的serving进模型部署&#xff0c;采用容器docker 1.首先安装docker 下载地址&#xff08;下载windows版本&#xff09;&#xff1a;https://desktop.docke…

[译]BNF 表示法:深入了解 Python 的语法

[译]BNF 表示法&#xff1a;深入了解 Python 的语法 原文&#xff1a;《BNF Notation: Dive Deeper Into Python’s Grammar》 https://realpython.com/python-bnf-notation/ 在阅读Python文档的时候&#xff0c;你可能已经遇到过BNF(Backus–Naur form)表示法&#xff1a; 下…

自动化测试摸索:python+selenium+pytest(持续更新.....)

一、环境搭建 1、python 安装 下载链接&#xff1a;Python Releases for Windows | Python.org 自己选择合适的版本下载 当下载完毕时&#xff0c;找到该安装程序&#xff1a;python-3.12.2-amd64.exe文件&#xff0c;双击启动安装向导。 为了防止C:盘文件因系统故障或者无…

鸿蒙 Stage模型-AbilityStage、Context、Want

前提&#xff1a;基于官网3.1/4.0文档。参考官网文档 基于Android开发体系来进行比较和思考。&#xff08;或有偏颇&#xff0c;自行斟酌&#xff09; 一、 AbilityStage 1.概念 AbilityStage是一个Module级别的组件容器&#xff0c;应用的HAP在首次加载时会创建一个AbilitySt…

融资项目——nacos注册中心

1.在分布式微服务架构中&#xff0c;注册中心是核心的基础服务之一。 2.服务治理的实现主要依靠的就是注册中心&#xff0c;用来进行服务的发现与注册。 一、服务注册 就是将提供某个服务的模块信息(通常是这个服务的ip和端口)注册到注册中心上去。例如B服务在某些服务器上线…

租房招聘平台新篇章:Java+SpringBoot技术革新

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

k8s-prometheus应用监控 23

使用prometheus监控&#xff0c;结合prometheus传递的指标&#xff0c;从而实现业务监控的自动化弹缩。 注&#xff1a;部署集群需要消耗较大的内存&#xff0c;需要提前扩容各节点的内存量至少达到4g 部署一个用于被监控的应用 上传所需镜像 修改yaml文件 部署完成 没有就绪是…