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.确认下发的分辨率与接入的摄像头是否对应得上
相关文章:
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…...
C++基础2:C++基本数据类型和控制结构
此专栏为移动机器人知识体系下的编程语言中的 C {\rm C} C从入门到深入的专栏,参考书籍:《深入浅出 C {\rm C} C》(马晓锐)和《从 C {\rm C} C到 C {\rm C} C精通面向对象编程》(曾凡锋等)。 2.C基本数据类型和控制结构 2.1 C基本数据类型 程序是由算法…...
HFSS仿真双频微带天线学习笔记
HFSS仿真双频微带天线 文章目录 HFSS仿真双频微带天线1、 求解器设置2、 建模3、 激励方式设置4、 边界条件设置5、 扫频设置6、 设计检查,仿真分析7、 数据后处理 这里重点关注HFSS软件的操作,关于理论知识将在后面的文章中进行更新。 设计要求…...
【十一】【SQL】外连接(左外连接,右外连接)
数据库中的外连接(Outer Join)用于连接两个表,并包括两个表中的匹配行以及左表(LEFT JOIN)或右表(RIGHT JOIN)中未匹配的行。外连接分为两种主要类型: 左外连接(LEFT OU…...
敏捷开发模型:一种灵活、协作和持续的软件开发方法
敏捷开发模型:一种灵活、协作和持续的软件开发方法 引言 在软件开发领域,随着市场需求的不断变化和技术的迅速发展,传统的瀑布模型逐渐暴露出其局限性。为了应对这些挑战,敏捷开发模型应运而生。敏捷开发模型强调灵活、协作和持…...
软件设计师10--计算机组成与体系结构章节回顾
软件设计师10--计算机组成与体系结构章节回顾 章节重要内容考情分析 章节重要内容 考情分析...
数据库分库分表中间件选择
目前分库分表的中间件有三种设计思路,分别是: 采用分散式架构,适用于用Java开发的高性能轻量级OLTP应用程序,以Sharding-JDBC为代表。采用中间层Proxy架构,提供了静态输入和所有语言支持,适用于OLAP应用程…...
代码随想录算法训练营第22天|235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
目录 一、力扣235.二叉搜索树的最近公共祖先1.1 题目1.2 思路1.3 代码 二、力扣701.二叉搜索树中的插入操作2.1 题目2.2 思路2.3 代码 三、力扣450.删除二叉搜索树中的节点3.1 题目3.2 思路3.3 代码3.4 总结 一、力扣235.二叉搜索树的最近公共祖先 1.1 题目 1.2 思路 利用二叉…...
基于SpringBoot的医护人员排班系统详细开题报告(源码)
项目源码:https://gitee.com/oklongmm/biye2 引言 医护人员排班系统是医疗机构中的重点管理工作之一。借助现代化的计算机技术,可以大大提升排班的效率和精准度。因此,本研究旨在使用SpringBoot框架设计和实现一个功能完善的医护人员排班…...
CDH6.3.1离线安装
一、从官方文档整体认识CDH 官方文档地址如下: CDH Overview | 6.3.x | Cloudera Documentation CDH是Apache Hadoop和相关项目中最完整、测试最全面、最受欢迎的发行版。CDH提供Hadoop的核心元素、可扩展存储和分布式计算,以及基于Web的用户界面和重…...
Pytorch之卷积操作
卷积是一种基本的数学操作,常用于信号处理和图像处理领域。在计算机视觉中,卷积操作是一种重要的技术,用于提取图像的特征并进行图像处理。 卷积操作基于一个卷积核(也称为滤波器或权重),它是一个小的矩阵…...
2024年春招小红书前端实习面试题分享
文章目录 导文面试重点一、方便介绍一下,你之前实习都做了什么嘛?二、 可以讲一下封装组件相关逻辑嘛?1. 为什么要封装组件?2. 封装组件的步骤3. 封装组件的原则4. 组件的复用和扩展5. 组件的维护和文档 三、项目的性能优化你有什…...
软件测试--性能测试工具JMeter
软件测试--性能测试工具JMeter 主流性能测试工具1.主流性能测试工具Loadrunner和Jmeter对比 —— 相同点2.主流性能测试工具Loadrunner和Jmeter对比 —— 不同点JMeter基本使用JMeter环境搭建1.安装JDK:2.安装Jmeter:3.注意点:JMeter功能概要1. JMeter文件目录介绍1.1 bin目…...
c++/c图的邻近矩阵表示
#include<iostream> using namespace std;#define MaxVerterNum 100 typedef char VerterType; typedef int EdgeType; typedef struct {VerterType vexs[MaxVerterNum]; // 存储顶点EdgeType edges[MaxVerterNum][MaxVerterNum]; // 存储邻接矩阵int n, e; // 顶点数和边…...
cocos-lua定时器用法
本文介绍cocos-lua(非Quick-cocos)的定时器用法 定时器按是否会随节点销毁,可分为节点调度器和全局调度器 一.节点调度器 frameworks\cocos2d-x\cocos\scripting\lua-bindings\script\cocos2d\deprecated.lua中实现了了schedule和 performWithDelay 1.1.schedul…...
激活函数Swish(ICLR 2018)
paper:Searching for Activation Functions 背景 深度网络中激活函数的选择对训练和任务表现有显著的影响。目前,最成功和最广泛使用的激活函数是校正线性单元(ReLU)。虽然各种手工设计的ReLU替代方案被提出,但由于在…...
【C++ 标准流,文件流】
C 标准流,文件流 ■ 标准输入,输出流,■ 文件流(ofstream写入,ifstream读取,fstream创建-写入-读取)■ open()■ ofstream■ ifstream■ 流插入<<■ 文件位置指针 ■ 标准输入,…...
【排序】详解冒泡排序
一、思想 冒泡排序的基本思想是利用两两比较相邻记录的方式,通过一系列的比较和交换操作,使得较大或较小的元素逐渐移动到数列的一端。在每一轮的排序过程中,都会从数列的起始位置开始,对相邻的元素进行比较,如果它们…...
什么是Docker容器?
Docker是一种轻量级的虚拟化技术,同时是一个开源的应用容器运行环境搭建平台,可以让开发者以便捷方式打包应用到一个可移植的容器中,然后安装至任何运行Linux或Windows等系统的服务器上。相较于传统虚拟机,Docker容器提供轻量化的…...
(C++练习)选择题+编程题
个人主页:Lei宝啊 愿所有美好如期而遇 选择题 以下程序输出结果是什么() class A{public:virtual void func(int val 1){ std::cout<<"A->"<< val <<std::endl;}virtual void test(){ func();}};class B…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
