STM32F1之OV7725摄像头·像素数据输出时序、FIFO 读写时序以及摄像头的驱动原理详解

STM32F1之OV7725摄像头-CSDN博客

STM32F1之I2C通信-CSDN博客

目录

1.  像素数据输出时序

2.  FIFO 读写时序

2.1  写时序

2.2  读时序

3.  摄像头的驱动原理


1.  像素数据输出时序

        主控器控制 OV7725 时采用 SCCB 协议读写其寄存器,而它输出图像时则使用 VGA 或QVGA 时序,其中 VGA 在输出图像分辨率为 480*640 时采用,QVGA 是 Quarter VGA,其输出分辨率为 240*320,这些时序跟控制液晶屏输出图像数据时十分类似。OV7725 传感器输出图像时,一帧帧地输出,在帧内的数据一般从左到右,从上到下,一个像素一个像素地输出(也可通过寄存器修改方向)。

        若我们使用 D2-D9 数据线,图像格式设置为 RGB565,进行数据输出时,D2-D9 数据线在 PCLK 在上升沿阶段维持稳定,并且会在 1 个像素同步时钟 PCLK 的驱动下发送 1 字节的数据信号,所以 2 个 PCLK 时钟可发送 1 个 RGB565 格式的像素数据。当 HREF 为高电平时,像素数据依次传输,每传输完一行数据时,行同步信号HREF 会输出一个电平跳变信号间隔开当前行和下一行的数据;一帧的图像由 N 行数据组成,当 VSYNC 为低电平时,各行的像素数据依次传输,每传输完一帧图像时,VSYNC 会输出一个电平跳变信号。

2.  FIFO 读写时序

        STM32F4 系列的控制器主频高、一般会扩展外部 SRAM、SDRAM 等存储器,且具有DCMI 外设,可以直接根据 VGA 时序接收并存储摄像头输出的图像数据;而 STM32F1 系列的控制器一般主频较低、为节省成本可能不扩展 SRAM 存储器,而且不具 DCMI 外设,难以直接接收和存储 OV7725 图像传感器输出的数据。OV7725 摄像头在图像传感器之外还添加了一个型号为 AL422B 的 FIFO,用于缓冲数据。AL422B 的本质是一种 RAM 存储器,它的容量大小为 393216 字节,支持同时写入和读出数据。

管脚名称
管脚类型
管脚描述
DI[0:7]
输入
数据输入引脚
WCK
输入
数据输入同步时钟
/WE
输入
写使能信号,低电平有效
/WRST
输入
写指针复位信号,低电平有效
DO[0:7]
输出
数据输出引脚
RCK
输入
数据输出同步时钟
/RE
输入
读使能信号,低电平有效
/RRST
输入
读指针复位信号,低电平有效
/OE
输入
数据输出使能,低电平有效
TST
输入
测试引脚,实际使用时设置为低电平

        由于 AL422B 支持同时写入和读出数据,所以它的输入和输出的控制信号线都是互相独立的。写入和读出数据的时序类似,跟 VGA 的像素输出时序一致,读写时序介绍如下:

2.1  写时序

        在写时序中,当 WE 管脚为低电平时,FIFO 写入处于使能状态,随着读时钟 WCK 的运转, DI[0:7]表示的数据将会就会按地址递增的方式存入 FIFO;当 WE 管脚为高电平时,关闭输入,DI[0:7]的数据不会被写入 FIFO。

        在控制写入数据时,一般会先控制写指针作一个复位操作:把 WRST 设置为低电平,写指针会复位到 FIFO 的 0 地址,然后 FIFO 接收到的数据会从该地址开始按自增的方式写入。

2.2  读时序

        FIFO 的读时序类似,不过读使能由两个引脚共同控制,即 OE 和 RE 引脚均为低电平时,输出处于使能状态,随着读时钟 RCK 的运转,在数据输出管脚 DO[0:7]就会按地址递增的方式输出数据。

        类似地,在控制读出数据时,一般会先控制读指针作一个复位操作:把 RRST 设置为低电平,读指针会复位到 FIFO 的 0 地址,然后 FIFO 数据从该地址开始按自增的方式输出。

3.  摄像头的驱动原理

        这里我使用的是野火的OV7725摄像头,其接线如下对于排母部分:

管脚名称
管脚关系
管脚描述
OE
FIFO OE 引脚
数据输出使能,低电平有效
RRST
FIFO RRST 引脚
读指针复位信号,低电平有效
RCLK
FIFO RCK 引脚
数据输出同步时钟
VSYNC
OV7725 VSYNC 引脚
场同步信号
WRST
FIFO WRST 引脚
写指针复位信号,低电平有效
WEN
与下面的 HREF 共同组成与非门的输入
HREF 共同控制 FIFO WE 引脚, WEN 与HREF 同时为高电平时, WE 为低电平, OV7725可以向 FIFO 写入数据
HREF
OV7725 HREF 引脚
行同步信号
DO[0:7]
FIFO DO[0:7] 引脚
数据输出引脚
SIO_C
OV7725 SCL 引脚
SCCB 总线的时钟线
SIO_D
OV7725 SDA 引脚
SCCB 总线的数据线

        通过下图我们可以了解到,与 OV7725 传感器像素输出相关的PCLK 和 D[0:7]并没有引出,因为这些引脚被连接到了 FIFO 的输入部分,OV7725 的像素输出时序与 FIFO 的写入数据时序是一致的,所以在 OV7725 时钟 PCLK 的驱动下,它输出的数据会一个字节一个字节地被 FIFO 接收并存储起来。

        其中最为特殊的是 WEN 引脚,它与 OV7725 的 HREF 连接到一个与非门的输入,与非门的输出连接到 FIFO 的 WE 引脚,因此,当 WEN 与 HREF 均为高电平时,FIFO 的 WE 为低电平,此时允许 OV7725 向 FIFO 写入数据。

        外部控制器通过控制 WEN 引脚,可防止 OV7725 覆盖了还未被控制器读出的旧 FIFO数据。另外,在 OV7725 输出时序中,只有当 HREF 为高电平时,PCLK 驱动下 D[0:7]线表示的才是有效像素数据,因此,利用 HREF 控制 FIFO 的 WE 可以确保只有有效数据才被写入到 FIFO 中。

摄像头采集数据的过程如下:

(1) 利用 SIO_C、SIO_D 引脚通过 SCCB 协议向 OV7725 的寄存器写入初始化配置;

(2) 初始化完成后,OV7725 传感器会使用 VGA 时序输出图像数据,它的 VSYNC 会首先输出帧有效信号(低电平跳变),当外部的控制器(如 STM32)检测到该信号时,把 WEN 引脚设置为高电平,并且使用 WRST 引脚复位 FIFO 的写指针到 0 地址;

(3) 随着 OV7725 继续按 VGA 时序输出图像数据,它在传输每行有效数据时, HREF引脚都会持续输出高电平,由于 WEN 和 HREF 同时为高电平输入至与非门,使得其连接到 FIFO WE 引脚的输出为低电平,允许向 FIFO 写入数据,所以在这期间,OV7725 通过它的 PCLK 和 D[0:7]信号线把图像数据存储到 FIFO 中,由于前面复位了写指针,所以图像数据是从 FIFO 的 0 地址开始记录的;

(4) 各行图像数据持续传输至 FIFO,受 HREF 控制的 WE 引脚确保了写入到 FIFO 中的都是有效的图像数据,OV7725 输出完一帧数据时,VSYNC 会再次输出帧有效信号,表示一帧图像已输出完成;

(5) 控制器检测到上述 VSYNC 信号后,可知 FIFO 中已存储好一帧图像数据,这时控制 WEN 引脚为低电平,使得 FIFO 禁止写入,防止 OV7725 持续输出的下一帧数据覆盖当前 FIFO 数据;

(6) 控制器使用RRST复位读指针到FIFO的0地址,然后通过FIFO的RCLK和DO[0:7]引脚,从 0 地址开始把 FIFO 缓存的整帧图像数据读取出来。在这期间,OV7725是持续输出它采集到的图像数据的,但由于禁止写入 FIFO,这些数据被丢弃了;

(7) 控制器使用 WRST 复位写指针到 FIFO 的 0 地址,然后等待新的 VSYNC 有效信号到来,检测到后把 WEN 引脚设置为高电平,恢复 OV7725 向 FIFO 的写入权限,OV7725 输出的新一帧图像数据会被写入到 FIFO 的 0 地址中,重复上述过程。

        把 OV7725 配置为 240*320 分辨率(QVGA),RGB565 格式,那么 OV7725 输出一帧的图像大小为 240*320*2=153600 字节,而本摄像头采用的 FIFO 型号 AL422B 容量为 393216 字节,最多可以缓存 2 帧这样的图像,通过这样的方式,STM32 无需直接处理 OV7725 高速输出的数据。但是,如果配置 OV7725为 480*640 分辨率时,其一帧图像大小为 480*640*2=614400 字节,FIFO 的容量不足以直接存储一帧这样的图像,因此,当 OV7725 往 FIFO 写数据的时候,STM32 端要同时读取数据,确保在 OV7725 覆盖旧数据的之前,STM32 端已经把这部分数据读取出来了。

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

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

相关文章

无线技术整合到主动噪声控制(ANC)增强噪声降低性能

主动噪声控制(ANC)已成为一种广泛使用的降噪技术。基本原理是通过产生与外界噪音相等的反向声波,将噪音中和,从而达到降噪的效果。ANC系统通常包括以下几个部分:参考麦克风、处理芯片、扬声器和误差麦克风。参考麦克风…

设计循环队列(C语言)怎会如此简单!!!

目录 题目题目分析 解答结构体初始化判空判满插入删除去队头数据取队尾数据队列的销毁 题目 链接: 题目 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它…

对于高速信号完整性,一块聊聊啊(12)

常见的无源电子器件 电子系统中的无源器件可以按照所担当的电路功能分为电路类器件、连接类器件。 A、电路类器件: (1)二极管(diode) (2)电阻器(resistor) &#xf…

CAD二次开发(4)-编辑图形

工具类:EditEntityTool.cs using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Th…

✨✨使用jq+layui-tab+echarts+swiper实现选项卡轮播联动图表展示功能✨✨

使用jqlayui-tabechartsswiper实现选项卡轮播联动图表展示功能 ✨一、实现功能 🌟技术框架 使用layui-tab实现tabs切换使用swiper.js实现轮播效果使用echarts.js实现图表展示 🌟功能详情 布局为上中下:tab选项上,内容区为中&…

大作业爬取手机数据,实现手机推荐系统以及朋友圈手机论坛

1、功能简介 (1)用户注册与用户登录 (2)手机搜索、手机比拼、手机个性化推荐 (3)点击搜索的手机图片会就用户行为,轮播展示用户行为,推荐点击次数靠前的手机 (4&#xf…

网络域名是什么意思

网络域名,顾名思义,就是网络上的名字,类似于现实中的地址或姓名一样,用来标识网络上的一个或一组计算机或服务器的位置,以及它们的相应服务资源。网络域名是互联网上最基础的基础设施之一,是网络通信的“标…

有一个3x4的矩阵,要求用函数编写程序求出其中值最大的那个元素,以及其所在的行号和列号

常量和变量可以用作函数实参,同样数组元素也可以作函数实参,其用法与变量相同。数组名也可以作实参和形参,传递的是数组的起始地址。 用数组元素作函数实参: 由于实参可以是表达式,而数组元素可以是表达式的组…

技术面试,项目实战,求职利器

之前找工作一直想找一个能真正系统性学开发的地方,之前毕业找工作的时候无意间碰到下面这个网站,感觉还挺不错的,用上面的技术实战内容应对技术面试,也算是求职利器了。有需要的可以自取: https://how2j.cn?p156336 实…

【运维】Linux 端口管理实用指南,扫描端口占用

在 Linux 系统中,你可以使用以下几种方法来查看当前被占用的端口,并检查 7860 到 7870 之间的端口: 推荐命令: sudo lsof -i :7860-7870方法一:使用 netstat 命令 sudo netstat -tuln | grep :78[6-7][0-9]这个命令…

从0开始学统计-卡方检验

1.什么是卡方检验? 卡方检验是一种用于检验观察频数与期望频数之间差异的统计方法。它通常用于分析分类变量之间的关联性或独立性。在卡方检验中,我们将观察到的频数与期望频数进行比较,从而确定它们之间的差异是否显著。 卡方检验的基本思…

深入理解与防御跨站脚本攻击(XSS):从搭建实验环境到实战演练的全面教程

跨站脚本攻击(XSS)是一种常见的网络攻击手段,它允许攻击者在受害者的浏览器中执行恶意脚本。以下是一个XSS攻击的实操教程,包括搭建实验环境、编写测试程序代码、挖掘和攻击XSS漏洞的步骤。 搭建实验环境 1. 安装DVWA&#xff…

手机相册的照片彻底删除了怎么恢复?删除照片恢复的5种方法

在数字化时代,手机相册里装满了我们的生活点滴和珍贵回忆。然而,一不小心就可能误删那些意义非凡的照片。别担心,今天小编就给大家介绍5种恢复误删照片的方法,让你的回忆不再丢失! 方法一:相册App的“最近删…

连公司WiFi后,无法访问外网,怎么回事,如何解决?

文章目录 封面问题描述问题探究什么是DNS?分布式,层次数据库如何理解分布式?如何理解层次? 本地DNS服务器迭代查询,递归查询DNS缓存参考资料 封面 问题描述 从甲方项目组返回公司后,我习惯性连上公司WiFi&…

eletron入门教程 -- 快速写一个electron demo程序

1、前言 由于工作需要,前段时间基于electron框架开发了一个桌面应用程序。由于我之前主要是做c后端开发,所以没有任何electron基础,也没有任何前端开发基础,但是没有办法,老板需要,那就得会,不会…

上位机开发--PyQt创建窗口

知不足而奋进 望远山而前行 目录 知不足而奋进 望远山而前行​ 文章目录 前言 1. 第一个PyQt窗口 2. PyQt模块简介 3. 窗口标题和图标 总结 前言 在PyQt的世界中,创建第一个窗口是踏入GUI开发的第一步。本文将引导您逐步学习如何使用PyQt创建简单的窗口&#xff0c…

基于开源二兄弟MediaPipe+Rerun实现人体姿势跟踪可视化

概述 本文中,我们将探索一个利用开源框架MediaPipe的功能以二维和三维方式跟踪人体姿势的使用情形。使这一探索更有趣味的是由开源可视化工具Rerun提供的可视化展示,该工具能够提供人类动作姿势的整体视图。 您将一步步跟随作者使用MediaPipe在2D和3D环…

上位机图像处理和嵌入式模块部署(f103 mcu定时器配置)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在mcu开发过程当中,有一种开发模式用的比较多,那就是中断while(1)。这里面的中断,又是以…

电机控制系列模块解析(22)—— 零矢量刹车

一、零矢量刹车 基本概念 逆变器通常采用三相桥式结构,包含六个功率开关元件(如IGBT或MOSFET),分为上桥臂和下桥臂。每个桥臂由两个反并联的开关元件组成,上桥臂和下桥臂对应于电机三相绕组的正负端。正常工作时&…

利用EAS自动生成数据模型和sql脚本

EAS适用于敏捷开发中小系统,这节主要讲解EAS对应的模型和数据库脚本输出应用。 在这个应用程序中,用户可自定义实体模型和枚举模型,只要选择相应的实体或者枚举进行右击添加即可。 解决方案参数设定,在解决方案的设定中可设置项目名称、通用语言,命名空间和输出位置。 连…