OV9281 调试记录

一、基本概念

HTS = width_number_of_effective_cloumns+H_Blank,图像宽度+行消隐

VTS = height_number_of_effective_rows + V_Blank,图像高度+场消隐

OV9281 sensor array layout如下:

二、帧率配置 

1、clock diagram

2、PLL configuration

XCLK:24MHz

PLL1 clock

0x030A[0]:0(default value),/1                                               24MHz

0x0300[2:0]:001(default value),/1.5                                     16MHz

0x0301[1:0],0x0302[7:0]:0x32(default value)                      16MHzx50=800MHz

0x0303[3:0]:0000,/(1+0x0303[3:0])                                      800MHz                          

0x0304[1:0]:11(default value),/8                                          100MHz

0x0305[1:0]:10(default value),/5                                          160Mhz                                                 

0x0306[0]:1(default value),/2                                               80MHz

MIPI_CLK=800MHz

PLL1 pix clk=100MHz

PLL1 pix clk=400MHz

PLL2 clock

0x0314[0]:0(default value),/1                                                24MHz

0x030B[2:0]:100(default value),/3                                        8MHz

0x030C[1:0],0x030D[7:0]:0x50(default value)                     8MHzx80=640MHz

0x0313[3:0]:0001,/(1+0x0313[3:0])                                     640MHz/2=320MHz

0x0312[3:0]:0111,/(1+0x0312[3:0])                                      640MHz/8=80MHz

0x030F[3:0]:0011, /(1+0x030F[3:0])                                    640MHz/4=160MHz

0x030E[2:0]:010,/2                                                              160MHz/2=80MHz

PLL2 ADC clk=320MHz

PLL2 analog clk=80MHz

PLL2 sys clk=80MHz

datasheet配置参考:

3、HTS、VTS配置

HTS寄存器0x380C、0x380D,默认值0x02D8,实际值需要大于图像宽度+行消隐

VTS寄存器0x380E、0x380F,默认值0x038E,实际宽度需要大于图像高度+场消隐

4、FPS计算

计算公式:fps=sys_clk/(VTS*HTS),PLL2 sys_clk为sys_clk

以sys_clk=80MHz,VTS=0x038E(910),HTS=0x02D8(728)计算fps,fps=80000000/(910*728)=120.75

以sys_clk=80MHz,VTS=0x0E38(3640),HTS=0x02D8(728)计算fps,fps=80000000/(3640*728)=30.18

4、改变帧率

一般是通过改变vts的值改变帧率,以下为君正sdk中ov9281驱动中改变帧率的函数,参数fps的值为运算之后的值,如帧率为30,fps=30<<16 | 1;

static int ov9281_set_fps(int fps)
{
    struct sensor_info *sensor_info = &ov9281_sensor_attr.sensor_info;
    unsigned int sclk = 0;
    unsigned short vts = 0;
    unsigned short hts = 0;
    unsigned int max_fps = 0;
    unsigned char tmp;
    unsigned int newformat = 0;
	unsigned short expo = 0;
    int ret = 0;

    sclk = OV9281_SCLK;
    max_fps = SENSOR_OUTPUT_MAX_FPS;

     /* the format of fps is 16/16. for example 25 << 16 | 2, the value is 25/2 fps. */
    newformat = (((fps >> 16) / (fps & 0xffff)) << 8) + ((((fps >> 16) % (fps & 0xffff)) << 8) / (fps & 0xffff));
    if(newformat > (max_fps << 8) || newformat < (SENSOR_OUTPUT_MIN_FPS << 8)){
        printf("ov9281 set fps warn: fps(%x) no in range\n", fps);
        return -1;
    }

    /* hts */
    ret = ov9281_read(sensor_i2c_dev, 0x380c, &tmp);
    hts = tmp << 8;
    ret += ov9281_read(sensor_i2c_dev, 0x380d, &tmp);
    if (ret < 0)
        return -1;

    hts |= tmp;

    /* vts */
    vts = sclk * (fps & 0xffff) / hts / ((fps & 0xffff0000) >> 16);
    ret = ov9281_write(sensor_i2c_dev, 0x380e, (unsigned char)(vts >> 8));
    ret += ov9281_write(sensor_i2c_dev, 0x380f, (unsigned char)(vts & 0xff));
    if (ret < 0)
        return -1;
	
    sensor_info->fps = fps;
    sensor_info->total_height = vts;
    sensor_info->max_integration_time = vts - 25;

    return 0;
}

三、曝光配置

相关寄存器

EXPO单位是行周期,最小值是1个行周期,最大值是vts-25个行周期。 比如VTS=0x038E,那么EXPO MAX= 885。

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

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

相关文章

【每日OJ —— 20.有效的括号(栈)】

每日OJ —— 20.有效的括号&#xff08;栈&#xff09; 1.题目&#xff1a;20.有效的括号&#xff08;栈&#xff09;2.方法讲解2.1.解法2.1.1.算法讲解2.1.2.代码实现2.1.3.提交通过展示 1.题目&#xff1a;20.有效的括号&#xff08;栈&#xff09; 2.方法讲解 2.1.解法 利用…

Day40:139.单词拆分、背包问题总结

文章目录 139.单词拆分思路代码实现 背包问题总结背包类型递推公式 139.单词拆分 题目链接 思路 确定dp数组以及下标的含义 dp[i] : 从0开始长度为i的字符串是否可以拆分为一个或多个在字典中出现的单词确定递推公式 如果确定dp[j] 是true&#xff0c;且 [j, i] 这个区间的子…

webpack loader

1、分类 2、执行顺序 配置类型 执行顺序是 loader1>loader2>loader3 3、使用方式 自己的第一个loader 同步loader /*** loader 就是一个函数* 当webpack 解释资源时&#xff0c; 会调用相应的loader去处理* loader 接收到文件内容作为参数&#xff0c;返回文件内容* p…

【AGC】鸿蒙应用软件包上传问题解析

【问题背景】 近期收到了一些反馈&#xff0c;一些鸿蒙元服务开发者在发布应用市场的过程中&#xff0c;上传.app包时遇到了不同的报错&#xff0c;导致上传失败&#xff0c;下面来看一下这些报错的具体原因&#xff0c;如何正确打包上传。 【问题描述1】 HarmonyOS元服务软件…

刚刚!OpenAI官宣!Sam Altman回归OpenAI 担任CEO

大家好我是二狗&#xff0c;就在刚刚&#xff01; OpenAI宣布&#xff0c;Sam Altman将重新回到 OpenAI 担任CEO。 并组建由Bret Taylor&#xff08;主席&#xff09;、Larry Summers 和 Adam DAngelo 组成的新的初始董事会。 Sam Altman第一时间做了石锤回应&#xff1a; Sa…

上海亚商投顾:北证50指数持续大涨 短剧概念股再爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡调整&#xff0c;深成指跌超1.4%&#xff0c;创业板指跌超1.7%。北证50指数大涨超8%&#xff0c;…

Day37力扣打卡

打卡记录 美化数组的最少删除数&#xff08;贪心&#xff09; 链接 class Solution:def minDeletion(self, nums: List[int]) -> int:n, cnt len(nums), 0for i in range(n):if (i - cnt) % 2 0 and i 1 < n and nums[i] nums[i 1]:cnt 1return cnt 1 if (n - c…

红黑树java实现

红黑树的性质 红黑树是一课二叉搜索树&#xff0c;它在每个结点上增加了一个存储位来表示结点的颜色&#xff0c;可以使RED或BLACK。通过对任何一条从根到叶子的简单路径上各个结点的颜色进行约束&#xff0c;红黑树确保没有一条路径会比其他路径长出2倍&#xff0c;因而是近似…

ChatGPT规模化服务的经验与教训

2022年11月30日&#xff0c;OpenAI发布ChatGPT&#xff0c;以很多人未曾预料的速度迅速走红。与此同时&#xff0c;由于短时间内用户量的暴涨&#xff0c;导致服务器过载&#xff0c;迫使OpenAI停止新用户的注册。 ChatGPT发布这一年&#xff0c;同样的情景发生了好几次。在最近…

RT-Thread 线程间同步【信号量、互斥量、事件集】

线程间同步 一、信号量1. 创建信号量2. 获取信号量3. 释放信号量4. 删除信号量5. 代码示例 二、互斥量1. 创建互斥量2. 获取互斥量3. 释放互斥量4. 删除互斥量5. 代码示例 三、事件集1. 创建事件集2. 发送事件3. 接收事件4. 删除事件集5. 代码示例 简单来说&#xff0c;同步就是…

基于PCA算法的点云平面拟合

平面拟合 1、平面拟合2、参考文献3、相关代码 1、平面拟合 PCA 是一种数学变换的方法&#xff0c;利用降维的思想在变换中保持变量的总方差不变&#xff0c;将给定的一组变量线性变换为另一组不相关的变量&#xff0c;并且使变换后的第一变量的方差最大&#xff0c;即第一主成分…

2023亚太杯数学建模赛题人工精准翻译

大家好&#xff0c;亚太杯今天早上6点已经开赛啦&#xff0c;然后我在这里给大家带来赛题的精准人工翻译&#xff0c;防止大家直接用软件翻译导致某些地方乱码或者翻译不精准&#xff0c;这会导致后续做题过程出现很大偏差。 注意&#xff0c;以下翻译均免费发放word形式的哈&…

使用websocket获取thingsboard设备的实时数据

背景 有一个读者前来咨询,如何实时获取设备的遥测数据。 其实tb是有提供websocket接口来获取设备数据的。而且还支持js跨域调用。下面给大家演示一下。 websocket地址 完整代码 <!DOCTYPE HTML> <html><h

ImportError: cannot import name ‘contextfilter‘ from ‘jinja2‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

redis的主从复制,哨兵模式

1.主从复制 主从复制&#xff1a;主从复制是redis实现高可用的基础&#xff0c;哨兵模式和集群都是在主从复制的基础之上实现高可用 主从复制实现数据的多机备份&#xff0c;以及读写分离&#xff08;主服务器负责写&#xff0c;从服务器只能读&#xff09; 缺陷&#xff1a…

让SOME/IP运转起来——SOME/IP系统设计(下)之数据库开发

上一篇我们介绍了SOME/IP矩阵的设计流程&#xff0c;这一篇重点介绍如何把SOME/IP矩阵顺利的交给下游软件团队进行开发。 车载以太网通信矩阵开发完成后&#xff0c;下一步应该做什么&#xff1f; 当我们完成SOME/IP矩阵开发&#xff0c;下一步需要把开发完成的矩阵换成固定格…

10.docker的网络network-概述

1.docker的网络模式 docker共有四种网路模式&#xff0c;分别是bridge、host、none和container. 1.1 bridge bridge,也称为虚拟网桥。在bridge模式下&#xff0c;为每个容器分配、配置IP等&#xff0c;并将容器连接到一个docker0。使用–network bridge命令指定&#xff0c;…

【每日OJ —— 622. 设计循环队列】

每日OJ —— 622. 设计循环队列 1.题目&#xff1a;622. 设计循环队列2.解法2.1.解法讲解2.1.1.算法讲解2.1.2.代码实现2.1.3.提交通过展示 1.题目&#xff1a;622. 设计循环队列 2.解法 1.本题有很多解法&#xff1a;可以使用数组&#xff0c;单链表&#xff0c;双链表&#x…

控制论与科学方法论

《控制论与科学方法论》&#xff0c;真心推荐。 书籍原文电子版PDF&#xff1a;https://pan.quark.cn/s/aa40d59295df&#xff08;分类在学习目录下&#xff09; 备用链接&#xff1a;https://pan.xunlei.com/s/VNgj2vjW-Hf_543R2K8kbaifA1?pwd2sap# 控制论是一种让系统按照我…

【精选】CSS入门必看知识点大合集

CSS简介 CSS概念 CSS&#xff08;Cascading Style Sheets&#xff09;层叠样式表&#xff0c;又叫级联样式表&#xff0c;简称样式表 CSS文件后缀名为.css CSS用于HTML文档中元素样式的定义 为什么需要CSS 使用css的唯一目的就是让网页具有美观一致的页面 语法 CSS 规则…