OV2640 DCMI

article/2025/9/20 15:30:44

OV2640

简介: 1/4寸CMOSUXGA (1632 * 1232)图像传感器。体积小、工作电压低,提供单片UXGA摄像头和影像处理器的所有功能。通过SCCB总线控制,可以输出整帧、子采样、缩放和取窗口等方式的各种分辨率8/10位影像数据。(此处一般选8位)UXGA最高15帧/秒(SVGA可达30帧,CIF可达60帧)。用户可以完全控制图像质量、数据格式和传输方式。所有图像处理功能辽程包括伽玛曲线、白平衡、对比度、色度等都可以通过SCCB接口编程。
特点
(1)高灵敏度、低电压适合嵌入式应用;
(2)标准的SCCB接口,兼容IIC接口;
(3)支持RawRGB、RGB (RGB565/RGB555)、GRB422、YUV(422/420) 和YCbCr(422)输出格式。(一般用RGB565);
(4)支持UXGA、SXGA、SVGA以及按比例缩小到从SXGA到40*30的任何尺寸(通过DSP);
(5)支持自动曝光控制、自动增益控制、自动白平衡、自动消除灯光条纹、自动黑电平校准等自动控制功能。同时支持色饱和度、色相、伽马、锐度等设置;
(6)支持图像缩放和闪光灯;
(7)支持图像压缩,即可输出JPEG图像数据。

相关名称:
UXGA,即分辨率位1600 * 1200的输出格式,类似的还有:
SXGA (1280 * 1024)、XVGA (1280 * 960)、WXGA (1280 * 800)、XGA (1024 * 768)、SVGA(800 * 600)、VGA(640 * 480)、CIF (352 * 288)和QQVGA (160 * 120)
PCLK:像素时钟,一个PCLK时钟,输出一个(RawRgb)或半个(一个像素要两个PCLK输出,是RGB565,其一个像素需要两个字节输出)像素。
VSYNC:帧同步信号。
HREF /HSYNC:行同步信号。

OV2640的图像输出(通过Y[9:0],但是实际只用8位数据)是在PCLK,VSYNC,HREF /HSYNC的控制下进行的。
行输出时序

OV2640行输出时序在这里插入图片描述
进行输出时,输出1200次数据(一次一行),每行有1600个数据
此输出是在PCLK的上升沿,HREF行有效信号的高电平期间(高电平有效),每个上升沿读一个像素或一个字节(RGB565)的数据。HREF低电平期间的数据直接忽略。每2个字节组成一个像素的颜色(低字节在前,高字节在后)。
每行输出共有1600 * 2个PCLK周期,输出1600 * 2个字节
行输出时序PCLK最大频率可达36Mhz。

帧输出时序

OV2640帧输出时序这里是引用

YSYNC第一个脉冲完成,表示帧输出开始。该时序电平有效性可以设置,此处为低电平有效。在经过27193t§后,HREF变高,行数开始有效,经过1600t§读取1600个像素的数据,在322t§后继续下一个数据的传输。总共进行1200次传输后,一帧数据传输完毕。
OV2640支持RGB565或JPEG输出。RGB565输出时,时序如图所示。JPEG输出时,PCLK大大减少,且HREF不连续,数据流以0XFF,0XD8开头,以0XFF,0XD9结束,将此间数据保存为.jpg即可在电脑打开查看。
上图左下角note:raw使用一个T(pclk),8位数据;YUV或RGB使用两个T(pclk),包含十六位数据。
传感器窗口设置(OV2640_Window_Set)
传感器窗口设置允许用户设置整个传感器区域(1632 * 1220)的感兴趣部分,也就是在传感器里面开窗,开窗范围从2 * 2~1632 * 1220都可以设置,要求这个窗口必须大于等于随后设置的图像尺寸。传感器窗口设置,通过0X03/0X19/0X1A/0X07/0X17/0X18等寄存器设置。
在这里插入图片描述
在这里插入图片描述
图像尺寸设置(OV2640_ImageSize_Set)
图像尺寸设置,也就是DSP输出(最终输出到LCD的)图像的最大尺寸,该尺寸要小于等于前面我们传感器窗口设置所设定的窗口尺寸。图像尺寸通过:0XC0/0XC1/0X8C等寄存器设置。
在这里插入图片描述
在这里插入图片描述

图像窗口设置(OV2640_ImageWin_Set)
图像窗口设置其实和前面的传感器窗口设置类似,只是这个窗口是在我们前面设置的图像尺寸里面,再一次设置窗口大小,该窗口必须小于等于前面设置的图像尺寸。该窗口设置后的图像范围,将用于输出到外部。图像窗口设置通过0X51/0X52/0X53/0X54/0X55/0X57等寄存器。
在这里插入图片描述
图像输出大小设置(OV2640_OutSize_Set)
图像输出大小设置,控制最终输出到外部的图像尺寸。该设置将图像窗口设置所决定的窗口大小,通过内部DSP处理,缩放成我们输出到外部的图像大小。该设置将会对图像进行缩放处理,如果设置的图像输出大小不等于图像窗口设置图像大小,那么图像就会被缩放处理,只有这两者设置一样大的时候,输出比例才是1:1的。图像输出大小通过0X5A/0X5B/0X5C等寄存器设置。
在这里插入图片描述
图像输出示意图如下
在这里插入图片描述
注:该摄像头模块自带晶振,无需外部时钟;自带稳压电路,直接接3.3V即可工作;支持缩放(有DSP)。
OV2640模块介绍

OV26340原理图在这里插入图片描述
中间部分为芯片,右上角为晶振提供XVCLK。右下角为接口,D0-D7作为信号接口。接8位时,连接Y2-Y9.

下图为上图右下角细解
在这里插入图片描述
OV2640的初始化
初始化IO口->上电(PWDN引脚)复位->读取传感器ID(可有可无)-> 执行初始化序列(配置寄存器工作模式)->完成初始化。
MCU读取OV2640模块图像数据的过程
等待帧同步->等待HREF为高电平->等待第一个PCLK上升沿->读取第一个像素低字节->等待第二个PCLK上升沿->读取第一个像素高字节->(循环读取后面的像素数据,流程同读取第一个一致,先读低字节再读高字节)->结束。

DCMI

DCMI是STM32F4芯片自带的一个数字摄像头接口,该接口是一个同步并行接口,能够接收外部8位、10位、12位或 14位 CMOS 摄像头模块发出的高速数据流。可支持不同的数据格式:YCbCr4:2:2/RGB565逐行视频和压缩数据 (JPEG)。
DCMI接口可接收高速(可达 54 MB/s)数据流。该接口包含多达14条数据线(D13-D0)和一条像素时钟线(PIXCLK)。像素时钟的极性可以编程,因此可以在像素时钟的上升沿或下降沿捕获数据。
特点:
1.支持8 位、10 位、12 位或 14 位并行接口
2.支持内嵌码/外部行同步和帧同步
3.支持连续模式或快照模式
4.支持裁剪功能
5.支持以下数据格式:
(1)8/10/12/14 位逐行视频:单色或原始拜尔(Bayer)格式
(2)YCbCr 4:2:2逐行视频
(3)RGB 565 逐行视频
(4)压缩数据:JPEG
DCMI信号
STM32F4的DCMI接口包括如下信号:
1,数据据输入(D[0:13]),接摄像头的数据输出。(对于OV2640只用8条D[0:7])
2,水平同步(行同步)输入(HSYNC),接摄像头的HSYNC/HREF信号。
3,垂直同步(场同步)输入(VSYNC),接摄像头的VSYNC信号。
4,像素时钟输入(PIXCLK),接摄像头的PCLK信号。

在这里插入图片描述
DCMI接口的数据与PIXCLK(即PCLK)保持同步,并根据像素时钟的极性在像素时钟上升沿/下降沿发生变化。HSYNC(HREF)信号指示行的开始/结束,VSYNC信号指示帧的开始/结束。
在这里插入图片描述
图中,对应设置为:DCMI_PIXCLK的捕获沿为下降沿,DCMI_HSYNC和DCMI_VSYNC的有效状态为1。
注意:这里的有效状态实际上指数据无效的时候HSYNC和VSYNC的电平,则这段时间内的数据无效。

DCMI接收到的数据,存储在DCMI_DR寄存器(32位)里面,使用时OV2640采用8位数据宽度,每4个像素时钟,才捕获完32位数据,第一个字节存放在LSB位置,第四个字节存放在MSB位置,如下图所示:
在这里插入图片描述
DMA说明
DCMI支持DMA传输,当DCMI_CR寄存器中的CAPTURE位置1时,激活DMA接口。摄像头接口每次在其寄存器(DCMI_DR)中收到一个完整的32位数据块时,都将发一个DMA请求,由DMA将DCMI_DR寄存器的值搬运到目的地址(比如LCD/SRAM)。
在这里插入图片描述
DCMI的DMA请求是映射在DMA2通道1的数据流1上面的,所以配置DMA时,应该配置这个。
另外,如果是直接DCMI->DMA->LCD的传输方式,因为LCD是16位宽(RGB565),而DCMI_DR是32位宽,所以一次DCMI引起的DMA传输,将引发往LCD写2次数据。

模式:DCMI支持连续模式和快照模式,一般采用连续模式。
同步方式:DCMI支持内嵌码同步和硬件同步两种方式,一般采用硬件同步。
硬件同步模式下使用两个同步信号HSYNC和VSYNC。根据摄像头模块/模式的不同,可能在水平/垂直同步期间内发送数据。由于系统会忽略HSYNC/VSYNC信号有效电平期间内接收的所有数据,HSYNC/VSYNC 信号相当于消隐信号。

部分寄存器简介
1.DCMI控制寄存器(DCMI_CR)
ENABLE:用于设置是否使能DCMI。在使能之前,必须将其他配置设置好。
FCRC[1:0]:这两个位用于帧率控制,要捕获所有帧,设置为00即可。
VSPOL:用于设置垂直同步极性,也就是VSYNC引脚上面,数据无效时的电平状态,应该设置为0。
HSPOL:用于设置水平同步极性,也就是HSYNC引脚上面,数据无效时的电平状态,同样应该设置为0。
PCKPOL:用于设置像素时钟极性,用上升沿捕获,所以设置为1。
CM:用于设置捕获模式,用连续采集模式,设置为0即可。
CAPTURE:用于使能捕获,设置为1。该位使能后,将激活DMA,DCMI等待第一帧开始,然后生成DMA请求将收到的数据传输到目标存储器中。
在这里插入图片描述
2.DCMI中断使能寄存器
在这里插入图片描述
FRAME_IE,捕获完成中断使能位。实际上就是帧中断。在jpeg数据处理的时候,要用到帧中断,所以设置该位为1。
初始化流程
(1)配置相关引脚的复用功能,使能DCMI时钟。
要用DCMI,先要使能DCMI的时钟。其次要设置DCMI的相关引脚为复用输出,以便连接ATK-OV2640模块。
(2)设置DCMI工作模式及PCLK/HSYNC/VSYNC等参数。
DCMI接口使用8位接口,连续模式,根据OV2640模块的输出时序图,设置:PCLK为上升沿有效, HSYNC和VSYNC为低电平有效(此时数据无效)。同时还要设置帧中断(jpeg数据采集用)等参数。
(3)设置DMA。
DCMI数据一般采用DMA来搬运,设置好DCMI相关参数后,需要设置DMA,以便采集数据。
(4)启动DCMI传输。
最后,设置DCMI->CR的最低位为1,即可启动DCMI捕获图像数据。


http://chatgpt.dhexx.cn/article/gicGth3B.shtml

相关文章

STM32F429之DCMI 数字相机接口

嵌入式系列文章 参考:《STM32F429_DM00031020_ENV19.pdf》 本文目的:翻译STM32F429的PRM,深入理解DCMI接口的工作原理,最后将DCMI工作原理转换成驱动代码。 DCMI:Digital camera interface,数字摄像头接口 …

DCMI接口

目录 DCMI数字摄像头接口 DCMI引脚 摄像头引脚 操作过程与通信方式 硬件连接图 写操作 读操作 图像输出 数据格式 rawRGB YUV RGB JPEG 代码实现过程简述 学习过程的问题 YUV是亮度和色度的格式,为什么UV中取Cb蓝和Cr红作为色度? 提问MIPI、DVP、DCMI是什…

stm32f4的数字摄像头接口(DCMI)使用

DCMI简介 STM32F4的DCMI接口包括如下信号 1,数据据输入(D[0:13]),接摄像头的数据输出。 2,水平同步(行同步)输入(HSYNC),接摄像头的HSYNC/HREF信号&#xff…

Java开发技术

1、基础技术 数据结构与算法 逻辑结构:数据对象中的数据元素之间的逻辑关系 1.集合结构:集合结构中的数据元素除了同属一个集合外,没有其他关系。 2.线性结构:线性结构中的数据元素之间是一对一的关系。 3.树形结构:树…

JAVA 中的代码生成包 CGLIB (Code Generation Library)

JAVA 中的代码生成包 CGLIB (Code Generation Library) CGLIB 是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为 JDK 的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代…

Java开发实战讲解!java开发CPU最低要求

前言 本人是底层 211 本科,刚毕业,⽆科研经历,但是有些项⽬经历。 在国内监控行业某头部企业做过一段时间的实习。 想着投下字节,可以积累⼀下⾯试经验和为金九银十面招做准备。投了简历之后,过了一段时 间,HR 就打电话跟我约时间, 说明一下,我投的是北京 office。…

Java面试题技术类一

前端技术导航大全 1、面向对象编程的三大特性是什么? 2、String 和StringBuffer的区别 3、说出ArrayList,Vector, LinkedList的存储性能和特性 4、Collection 和 Collections的区别 5、HashMap和Hashtable的区别 6、final, finally, finalize的区别 7、Overload和Overri…

Java专项练习(三)

JAVA选择题 401、下列类定义代码,当用来声明对象car,并用Car carnew Car();实例化后,可以通过car对象直接赋值的字段是()402、以下哪个不是Collection的子接口?403、下列说法正确的是( )404、下面的程序将来…

Java学习汇总

6/28日已更新,错误已修改~~~有错误的地方,欢迎大家留言! 目录 一、Java基础篇 1.接口和抽象类的区别 2.重载和重写的区别 3.和equals的区别 4.异常处理机制 5.HashMap原理 6.想要线程安全的HashMap怎么办? 7.ConcurrentHa…

java面经整理

面试问题 一、Java基础1.jdk1.7到jdk1.8HashMap发生了什么变化(底层)?2.jdk1.7到jdk1.8虚拟机发生了什么变化3.String、StringBuilder、StringBuffer4.ArrayList和LinkedList有什么区别?5.ConcurrentHashMap的扩容机制6.接口和抽象…

获得阿里Java开发P7岗“农村穷苦”小伙就得安于现状?

前言 相信大家看到这个标题其实就已经可以联想到我大概是个什么样的情况了,很多人都在生活中或者是网络上甚至是家庭中都大致听过这样的话,“你这样的出生,达到现在这样的生活已经很不错了,还是别为了不切实际的梦想去冒险了&…

Java基础 常见数据结构与算法 项目总结

Java基础 1 Java基础必知必会 1.1 Java语言有哪些特点? 面向对象(封装,继承,多态);平台无关性,平台无关性的具体表现在于,Java 是“一次编写,到处运行(Wri…

Java面试知识点概览(持续更新)

Java 基础 说说自定义注解的场景及实现 利用自定义注解,结合SpringAOP可以完成权限控制、日志记录、统一异常处理、数字签名、数据加解密等功能。 实现场景(API接口数据加解密) 1)自定义一个注解,在需要加解密的方法上添加该注…

java开发工程师面试总结

面试中常被问到的问题 介绍jvmjvm内存模型程序计数器虚拟机栈本地方法栈方法区堆 垃圾回收判断对象是否存活引用计数算法可达性分析算法 垃圾收集算法复制算法标记清除算法,标记整理算法 垃圾收集器新生代收集器SerialParNewParallel Scavenge 老年代收集器Serial O…

Java面试经验总结

目录 Java面试知识点基础常识前端基础知识Java基础知识1、**并行与并发**2、**线程与进程**3、**HashMap和HashTable区别**4、**new对象创建过程原理(在JVM),从执行的角度(其他角度待续)**4、**Volatile和Synchronized**5、**线程创建的几种方法**6、**垃…

java怎么写api接口,绝对干货

正文 下文中截图来源于朋友一个pdf版本的面经,把所以知识点的答案整理了下来,耗费他至少1个月时间,在本文最后部分把这个pdf分享给大家,觉得有用的麻烦点赞关注走一波,谢谢!!!面经中有他的知识点的答案,如下图示例,非常详细(文末有领取方式)!!! 1.数据结构与算…

Java开发校招面经

面试 当前面经欠缺:docker,k8s容器,spark,flink,hbase,hive,java网络编程(netty) 一,JAVA 重写和重载 重写:方法签名要完全相同(方…

数据结构:链表逆序输出

数据结构&#xff08;一&#xff09;&#xff1a;链表逆序输出 题目描述&#xff1a;创建一个链表&#xff0c;并将链表逆序输出&#xff0c;链表中以输入0作为结束 关键代码详解&#xff1a; 附&#xff1a;全部代码 #include<stdio.h> #include<stdlib.h> #…

链表逆序 java_链表逆序(JAVA实现)

题目:将一个有链表头的单向单链表逆序 分析: 链表为空或只有一个元素直接返回; 设置两个前后相邻的指针p,q,使得p指向的节点为q指向的节点的后继; 重复步骤2,直到q为空; 调整链表头和链表尾; 图解: 以链表A->B->C->D为例,逆序此链表。 0.初始状态 …

2-6 链表逆序及其C++实现

更多系列博文请点击&#xff1a;0-数据结构与算法链接目录 2-6 链表逆序 我只介绍两种常用方法吧&#xff0c;非递归方法 和 递归 方法 我觉得够用就行 1、非递归方法&#xff1a; 将第二个元素后面的元素依次插入到头结点后面&#xff0c; 最后再把原始第一个元素放到原…