简要讲解OV7725摄像头

本文主要包含以下几部分内容:

  1. 通过OV7725分析模块原理图。

  2. 讲解部分寄存器的含义、RGB565格式图像输出时序、帧率计算。

  3. 讲解SCCB协议与I2C协议的区别。

1、OV7725功能

  OV7725是一款1/4英寸单芯片图像传感器,其感光阵列达到640*480,能实现最快 60fps 分辨率的图像采集。传感器内部集成了图像处理功能,包括自动曝光控制(AEC)、自动增益控制(AGC)和自动白平衡(AWB)等。同时传感器具有较高的感光灵敏度,适合低照度的应用,下图为OV7725的功能框图。

在这里插入图片描述

图1 OV7725 功能框图

  感光阵列(image array)在XCLK时钟的驱动下进行图像采样,输出640*480阵列的模拟数据;接着模拟信号处理器在时序发生器(video timing generator)的控制下对模拟数据进行算法处理(analog processing)。

  模拟数据处理完成后分成 G(绿色)、 R(红色)、B(蓝色)三路通道经过AD转换器后转换成数字信号,并且通过DSP进行相关图像处理,最终输出所配置格式的10位视频数据流,如果需要使用RGB565格式输出,那么只有高8位的数据有效。

  其中测试模块(test pattern generator)是用来进行彩条测试之类的,可以通过配置寄存器来启用这个模式,测试数据通路。

  模拟信号处理以及DSP等都可以通过寄存器(registers)来配置,配置寄存器的接口就是SCCB接口,该接口协议是阉割版的I2C协议。

  下表是OV7725的管脚含义的介绍,没有列出电源和接地相关引脚。

表1 OV7725引脚含义
管脚I/O含义
PWDNI掉电模式,0:正常模式,1:掉电模式。
RSTBI系统复位,低电平有效。
VREFHI参考电压,通过0.1uF电容接地。
VREFNI参考电压,通过0.1uF电容接地。
FSINI帧同步输入。
VSYNCO场同步输出。
HREFO像素有效指示信号。
XCLKI系统时钟输入。
PCLKO像素时钟输出。
SCLISCCB接口时钟输入。
SDAI/OSCCB接口双向数据线。
D0~D9O十位像素数据输出,D[9:2]用于8位YUV或RGB 565/RGB 555格式。

  下图是OV7725模块的原理图,其中RESET引脚通过4.3K电阻上拉到VCC,并且通过一个0.1uF电容降低抖动。而PWDN引脚通过4.3K电阻下拉到地。也就是说该模块没有掉电模式和复位操作。

  其余的XCLK、PCLK、VSYNC、HREF、D9~D0均引出,XCLK是需要外部提供给OV7725的系统时钟,该时钟输入OV7725之后,可以经过内部锁相环和寄存器配置生成PCLK,然后像素数据D9~D0在PCLK的下降沿输出数据,FPGA就可以在PCLK上升沿采集D9~D0的数据。场同步VSYNC的高电平表示传输一帧数据,HREF位高电平时表示D9~D0的数据有效。

  而OV7725内部锁相环的倍频系数、输出像素的大小、自动曝光、自动增益等都可以通过SCCB接口进行配置。

在这里插入图片描述

图2 OV7725原理图

  最终多数模块引出的引脚如下所示,由于大多使用RGB565格式输出数据,因此像素信号只需要输出D9~D28位即可。CMOS_CTL这些保留信号暂时不考虑。

在这里插入图片描述

图3 OV7725引出引脚

2、寄存器

  OV7725内部包含171个寄存器,每个寄存器有8位数据,寄存器的数目还是比较多的。而且很多寄存器与图像有关,对于我们不是专业研究图像的人来说,并不能很好的理解这些参数。本文只简单分析几个会经常用到的寄存器,如果需要其余寄存器可以通过数据手册自己查看。

  地址为0x12寄存器,该寄存器的bit7为1时,复位所有寄存器,发出该命令后,需要至少延迟1ms才能配置其余寄存器。

在这里插入图片描述

图4 复位寄存器

  而bit1~0用于选择图像输出格式,为2’b00时输出YUV格式,为2’b01时输出Processed Bayer RAW格式,为2’b10时输出RGB格式,为2’b11时输出Bayer RAW格式。

  当输出RGB格式时,需要通过bit3~2确定具体的RGB格式,2’b00输出RGB422,2‘b01输出RGB565,2’b10输出RGB555,2’b11输出RGB444格式的图像数据。

  OV7725的XCLK生成PCLK的频率公式为:finternal clock = finput clock × PLL multiplier / [(CLKRC[5:0] + 1) × 2]。其中finternal clock为PCLK频率,finput clock为XCLK的频率。

在这里插入图片描述

图5 锁相环倍频设置

  PLL multiplier由地址为0x0D寄存器的bit7和bit6决定。如果为2’b00则PLL multiplier为1,如果为2’b01则PLL multiplier为4,如果为2’b10则PLL multiplier为6,如果为2’b11则PLL multiplier为8。

  CLKRC[5:0]是地址为0x11寄存器的低6位数据,如果输入XCLK为12MHz,PLL 倍频设为4倍,CLKRC[5:0]设置为0,则可以得到PCLK为24MHz。

在这里插入图片描述

图6 分频系数设置

  如何设置输出图像尺寸呢?

  首先可以通过地址为0x18的bit7~0和0x32的bit1~0设置输出图像数据的水平像素个数。由于OV7725水平像素最大支持640,所以需要10位二进制数据才能表示,一个寄存器只有8位数据,需要两个寄存器才能存储10位数据。

在这里插入图片描述

图7 输出图像分辨率设置

  地址为0x1A的bit7~0和0x32的bit2设置输出图像数据的垂直像素点个数,OV7725垂直像素最大支持480,需要9位二进制数据才能表示,因此需要两个寄存器进行存储。

  其余寄存器还有很多,这里就简要介绍这几个重要的,其余的可以通过官方通过的初始化参数进行设置。

3、RGB565格式

  OV7725输出RGB565格式的图像数据时序如下图所示,由于数据线只有8位,而每个像素点包含16位数据,因此需要两个PCLK时钟才能输出1个像素数据。

  第一PCLK时钟下降沿输出5位红色像素和3位绿色像素数据,第二个PCLK时钟下降沿输出3位绿色像素和5位蓝色像素数据,两个时钟传输的数据拼接为一个像素点的数据。

  由于OV7725在PCLK下降沿输出数据,那么FPGA就可以在PCLK的上升沿采集数据线D[9:2]上的数据。

在这里插入图片描述

图8 RGB565时序

  下图是VGA输出640*480像素的时序图,本次使用的是HREF信号,没有使用HSYNC信号。注意下图中tp表示传输1个像素数据的时钟,经过上述分析可知,在传输RGB565格式的数据时tp=2*PCLK。

在这里插入图片描述

图9 VGA格式

  HREF信号为高电平表示D[9:2]传输的数据是有效的,每次连续输出1行像素数据,因此上图中HREF信号每次拉高时间为640tp。由于显示前沿、后沿等东西的存在,每次传输完一行图像数据之后,需要拉低144tp才能在次传输下一行图像数据。因此传输一行数据的时间为640tp+144tp=784tp,将传输一行数据消耗的时间称为tLINE,因此tLINE=784tp。

  场同步信号VSYNC拉高表示一帧数据传输的开始,因为显示前沿、后沿这些东西的存在,需要等一段时间HREF才会拉高输出有效像素数据。传输一帧图像数据需要510tLINE。

因此可以计算出传输一帧图像数据所需要的时钟个数为510tLINE=510*784tp=510*784*2*tpclk=799680*tpclk。

  当PCLK时钟频率为24MHz时,则帧率为24M/799680≈30.012Hz,所以说当PCLK为24MHz时,每秒可以输出30张图片。PCLK为48MHz时,可以输出60帧的图像数据。

  下图是时钟和复位的一些说明,PCLK最小为10MHz,最大为48MHz,即最大支持60帧640*480的图像输出。当复位后,需要等待1ms,配置寄存器之后,需要等待10帧数据输出的时间,输出的图像数据才会稳定。

在这里插入图片描述

图10 频率限制

  一般最常用的就是RGB565格式,关于RGB565格式本文就介绍这么多,该接口常被称为DVP接口,后文直接使用FPGA实现数据采集。

4、SCCB时序

  最后在讲解一下SCCB(Serial Camera Control Bus)协议的相关内容,该协议是OmniVision公司参考I2C协议为自家的图像传感器提出的接口协议。可以通过百度直接获取手册,据说厂家这么做是为了规避 I2C 总线的版权,手册里关于协议的描述采用三相写、两相写来对读写时序进行描述,搞得反而不好理解。

  一般有三线和两线的两种连接方式,一般的传感器为了节省引脚,都将SCCB_E直接拉高处理了,只引出了SIO_C和SIO_D两个引脚。

在这里插入图片描述

图11 三线制应用模式

在这里插入图片描述

图12 两线制应用模式

  下面是SCCB的写时序,与I2C的写时序基本一致,首先发送器件地址,然后发送寄存器地址,最后发送写入数据,OV7725的器件地址为7’h21

  需要注意SCCB的应答位为X,表示不应答,含义就是从机可能不会对主机的指令做出应答,但是这段时间主机依旧要释放总线。即主机不需要检测从机是否应答,只需要传输对应的数据即可。

在这里插入图片描述

图13 SCCB写时序

  因此SCCB的写时序可以直接使用I2C的写时序,不用关心输出的应答信号即可。

  下图是SCCB的读时序,区别在于虚写完成时,由于SCCB没有重复起始位的功能,必须先发送停止位,之后才能发送起始位进行读操作。

在这里插入图片描述

图14 SCCB读时序

  因此I2C和SCCB协议有两个区别,第一SCCB的从机可能不会应答主机,主机也不需要去检测从机的应答位。第二就是SCCB在读操作时,发送完虚写之后,需要发送停止位,才能发送起始位读出数据。第三SCCB不支持连续地址读、写操作。

  对于OV7725来说,一般只会通过写操作来配置其寄存器,不会使用读操作。因此在初始化OV7725寄存器时,完全可以使用I2C协议代替SCCB协议,因为不会使用读操作,所以不需要修改I2C读时序。

  其余起始位、停止位均与I2C时序一致,可以查看前文I2C协议的详解。

  最后注意有的原理图上SDA数据线上可能会串接电阻,这是为了在主机和从机争夺总线时,减小总线电流。

  如下图所示,当主机输出高电平,从机输出低电平时,电流会从主机的VCC通过电阻直接到从机的GND,如果没有电阻,由于MOS管导通电阻一般很小,可能导致电流很大,烧毁器件吧。

在这里插入图片描述

图15 串接电阻

  下图是SCCB接口时序,为了了解相关时序参数,需要查看该图。

在这里插入图片描述

图16 SCCB时序

  上图配合下表即可得知OV7725对SCCB协议相关要求,首先得知SCL最大频率为400KHz,没有最低频率的要求。

  由于SCL频率较低,且数据均在SCL低电平的时候传输,所以数据相关的建立时间和保持时间一般是不会出现问题的。

  由于使用FPGA,两次读、写操作的间隔时间可以达到系统时钟周期的(10ns)级别,所以需要关注一些OV7725对于两次SCCB操作的间隔时间要求。tBUF在上图可以看出是停止位和起始位之间的间隔,下表规定该时间必须大于1.3us。

在这里插入图片描述

图17 SCCB时序参数

  前文写I2C时序代码时,起始位和停止位间隔时间大致是半个SCL周期,如果SCL为200KHz,那么半个SCL周期时间为2.5us,大于1.3us,不需要额外增加延时,当模块空闲即可开始下一次读写操作。

  如果SCL频率为400KHz,半个SCL周期时间为1.25us,小于1.3us,可能需要增加额外延时。此处是针对我前文写的I2C模块进行分析的,如果不使用该模块可以忽略。

  本文相关内容到此结束了,需要SCCB手册或者OV7725手册的在后台恢复“OV7725手册“(不包括引号)即可。建议看I2C手册,描述比SCCB简单多了,SCCB手册绕了一大圈,还是讲的相同问题。


  如果对文章内容理解有疑惑或者对代码不理解,可以在评论区或者后台留言,看到后均会回复!

  如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!您的支持是我更新的最大动力!将持续更新工程!

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

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

相关文章

【MySQL 系列】在 Windows 上安装 MySQL

在 Windows 平台上安装 MySQL 很简单,并不需要太复杂的步骤。按照本文的步骤操练起来就可以了。 文章目录 1、下载 MySQL 安装程序2、安装 MySQL 数据库2.1、选择安装类型2.2、检查所需组件2.3、安装所选产品组件2.4、产品配置2.5、配置高可用性2.6、配置服务器类型…

【leetcode】 剑指 Offer学习计划(java版本含注释)(下)

目录 前言第十六天(排序)剑指 Offer 45. 把数组排成最小的数(中等)剑指 Offer 61. 扑克牌中的顺子(简单) 第十七天(排序)剑指 Offer 40. 最小的k个数(简单) 第…

YOLO系列中的“data.yaml”详解!

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、data.yaml介绍 YOLO系列中的data.yaml文件包含了YOLO系列模型运行所需要的数据集路径、数据集中的类别数及标签。数据集路径可以用绝对路径也可以…

如何在飞书接入ChatGPT并结合内网穿透实现公网远程访问智能AI助手

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话,在下面操作步骤中…

GEE代码条带问题——sentinel-1接缝处理的问题

问题 我有兴趣确定 NDVI 损失最大的年份。我创建了一个函数来收集所有陆地卫星图像并应用预处理。当我导出结果以识别 NDVI 损失最大年份时,生成的数据产品与陆地卫星场景足迹有可怕的接缝线。造成这种情况的原因是什么以及如何调整代码? sentinel1数据…

flutter之终极报错

看到这个报错头都大了 一开始在网上各种搜搜,然后有人说是flutter版本的问题,改完版本之后还是不对,又是各种搜搜搜 有人说是环境变量的问题,后来改了环境变量,妈的,竟然还不行,想砸电脑的心都…

Xcode :Could not build module ‘WebKit‘ 已验证解决

问题&#xff1a;Could not build module WebKit 具体报错如下&#xff1a; error: type argument nw_proxy_config_t (aka struct nw_proxy_config *) is neither an Objective-C object nor a block type property (nullable, nonatomic, copy) NSArray<nw_proxy_config_…

C++学习笔记:set和map

set和map set什么是setset的使用 关联式容器键值对 map什么是mapmap的使用map的插入方式常用功能map[] 的灵活使用 set 什么是set set是STL中一个底层为二叉搜索树来实现的容器 若要使用set需要包含头文件 #include<set>set中的元素具有唯一性(因此可以用set去重)若用…

掌握未来技术:一站式深度学习学习平台体验!

介绍&#xff1a;深度学习是机器学习的一个子领域&#xff0c;它模仿人脑的分析和学习能力&#xff0c;通过构建和训练多层神经网络来学习数据的内在规律和表示层次。 深度学习的核心在于能够自动学习数据中的高层次特征&#xff0c;而无需人工进行复杂的特征工程。这种方法在图…

大模型笔记:RAG(Retrieval Augmented Generation,检索增强生成)

1 大模型知识更新的困境 大模型的知识更新是很困难的&#xff0c;主要原因在于&#xff1a; 训练数据集固定,一旦训练完成就很难再通过继续训练来更新其知识参数量巨大,随时进行fine-tuning需要消耗大量的资源&#xff0c;并且需要相当长的时间LLM的知识是编码在数百亿个参数中…

一些C语言知识

C语言的内置类型&#xff1a; char short int long float double C99中引入了bool类型&#xff0c;用来表示真假的变量类型&#xff0c;包含true&#xff0c;false。 这个代码的执行结果是什么&#xff1f;好好想想哦&#xff0c;坑挺多的。 #include <stdio.h>int mai…

STM32(5) GPIO(2)输出

1.点亮LED 1.1 推挽接法和开漏接法 要想点亮LED&#xff0c;有两种接法 推挽接法&#xff1a; 向寄存器写1&#xff0c;引脚输出高电平&#xff0c;LED点亮&#xff1b;向寄存器写0&#xff0c;引脚输出低电平&#xff0c;LED熄灭。 开漏接法&#xff1a; 向寄存器写0&…

《精益DevOps》:填补IT服务交付的认知差距,实现高效可靠的客户期望满足

写在前面 在当今的商业环境中&#xff0c;IT服务交付已经成为企业成功的关键因素之一。然而&#xff0c;实现高效、可靠、安全且符合客户期望的IT服务交付却是一项艰巨的任务。这要求服务提供商不仅具备先进的技术能力&#xff0c;还需要拥有出色的组织协作、流程管理和态势感…

UniApp项目处理小程序分包

目前 uniApp也成为一种 App端开发的大趋势 因为在目前跨端 uniApp可以说相当优秀 可以同时兼容 H5 PC 小程序 APP 的技术 目前市场屈指可数 那么 说到微信小程序 自然就要处理分包 因为微信小程序对应用大小限制非常铭感 限制在2MB 超过之后就会无法真机调试与打包 不过需要注…

vue项目中使用antvX6新手教程,附demo案例讲解(可拖拽流程图、网络拓扑图)

前言&#xff1a; 之前分别做了vue2和vue3项目里的网络拓扑图功能&#xff0c;发现对antv X6的讲解博客比较少&#xff0c;最近终于得闲码一篇了&#xff01; 需求&#xff1a; 用户可以自己拖拽节点&#xff0c;节点之间可以随意连线&#xff0c;保存拓扑图数据后传给后端&…

cPanel面板安装付费的SSL证书

前不久遇到购买Hostease服务器的客户反馈需要安装SSL证书。因为安装 SSL 证书不仅可以保护用户数据安全&#xff0c;增加用户信任度&#xff0c;提升搜索引擎排名&#xff0c;还有助于符合法规和标准&#xff0c;防止网络攻击。 安装SSL证书可以通过如下步骤: 1. 选择 SSL 证书…

数学建模【多元线性回归模型】

一、多元线性回归模型简介 回归分析是数据分析中最基础也是最重要的分析工具&#xff0c;绝大多数的数据分析问题&#xff0c;都可以使用回归的思想来解决。回归分析的任务就是&#xff0c;通过研究自变量X和因变量Y的相关关系&#xff0c;尝试去解释Y的形成机制&#xff0c;进…

Linux配置网卡功能

提示:工具下载链接在文章最后 目录 一.network功能介绍二.配置network功能2.1 network_ip配置检查 2.2 network_br配置2.2.1 配置的网桥原先不存在检查2.2.2 配置的网桥已存在-修改网桥IP检查2.2.3 配置的网桥已存在-只添加网卡到网桥里检查 2.3 network_bond配置检查 2.4 netw…

Access AR Foundation 5.1 in Unity 2022

如果已经下载安装了ARF但版本是5.0.7 可以通过下面的方式修改 修改后面的数字会自动更新 更新完成后查看版本 官方文档 Access AR Foundation 5.1 in Unity 2021 | AR Foundation | 5.1.2

【知识整理】Git 使用实践问题整理

问题1、fatal: refusing to merge unrelated histories 一、Git 的报错 fatal: refusing to merge unrelated histories 新建了一个仓库之后&#xff0c;把本地仓库进行关联提交、拉取的时候&#xff0c;出现了如下错误&#xff1a; fatal: master does not appear to be a g…