单片机学习小组
直播中

卞轮辉

7年用户 1065经验值
私信 关注

什么是带FIFO的OV7670

什么是带FIFO的OV7670?为什么要带FIFO呢?

回帖(1)

冯润生

2022-1-19 12:03:45
本文针对带FIFO的OV7670摄像头模块进行说明。
对于新手入坑OV7670摄像头的小白来说,入坑之路漫漫,最坑爹的是不知道入口在哪里~~下面就来简单的说一下我这几天的实验心得。
什么是带FIFO的OV7670,为什么要带FIFO

先说明一下,FIFO(First Input First Output)先入先出的意思,相当于一个数据存储器,只能顺序进行数据读和写。
那么为什么要带FIFO呢,OV7670本身摄像头的IO口速率很高,不是一般单片机可以达到的。我使用的STM32F103C8T6核心板,GPIO口根本达不到摄像头要求,所以无法直接进行数据读写。举个例子,老师在以4G的速度上课,你是个2G学渣,老师说完一句,那还没反应过来,老师就开始下一句,到头来什么也没有得到。那么学渣想要学习该怎么做呢?此时就需要一个FIFO了,你可以把它理解成录音机,老师以4G速度讲,录音机以4G速度录下来,而你要听的时候,听一句暂停一下(就是给clk时钟信号),是不是就全部听到了。单片机也是这样。
引脚说明

我使用的摄像头模块是这个样子的:

解释一下,本模块没有用到PCLK和XCLK,已经有FIFO和OV7670自行配置好了。
SIOC和SIOD两条线是SCCB通信协议的时钟线和数据线,具体和IIC通信基本一样,通信过程自行了解。
HREF行同步信号基本不用它。
VSYNC帧同步信号,就是每次摄像头写出一幅图之前,拉高这个引脚告诉你,我要开始输出啦。
复位口和电源模式口直接接3v和GND就好,也可以接IO口控制,不过要注意,接IO口的话,引脚配置一点要放在OV7670寄存器配置前,不然直接给你复位了。(都是血泪···)
拍照闪光的不要
剩下的就是FIFO的控制IO了。
(录音机啥的都是比喻哈)
RCK就是你按录音机暂停键的信号,读一次数据给一个上升沿。
WR就是控制你录音机是否录音的IO,高电平时录音。
OE就是你录音机的电源键。
WRST就是写复位,相当于把录音机倒带到开始,录音时从磁带的开头往后记录。
RRST就是读复位,相当于吧录音机倒带,然后从头听。
一幅图像的读取

读取过程及其简单,我用录音机比喻的方式说:
/>>>(图像写入)录音过程
1.等待帧同步信号拉高
2.FIFO复位写指针(录音机倒带到磁带开头)
3.FIFO写允许(录音机按下录音键)
4.等待帧同步信号再次拉高(说明第二幅图到来,同时说明第一幅图写完了)
5.FIFO写禁止(停止录音)
/>>>读图过程(听录音)
1.FIFO读指针复位(录音机倒带到磁带开头)
2.FIFO给RCK(按下录音机播放键,这里假设录音机按一下放半句话,一句话代表一个像素)
3.读数据(听第一句话的上半句)
4.FIFO给RCK
5.读数据(听第一句话的下半句)
6.FIFO给RCK
7.读数据(听第二句话的上半句)
8.FIFO给RCK
9.读数据(听第二句话的下半句)
·············如此循环读出全部像素
n.读完最后一个像素
结束,获得全部图像像素数据。
OV7670寄存器配置

这是个体力活,英语不好的先放放。虽然有中文寄存器手册,看起来也费劲,错误还挺多。而且还要了结图像光学啥的,先放着,直接用例程的代码配置。毕竟100多个寄存器呢。
在这里推荐OV7670_software_application_note文档。还有这篇博客
寄存器配置过程,也可以直接拿来用
不过使用前最好看一下寄存器手册,先用彩条输出测试一下能否正常工作。彩条输出样子是下图,如果这个都出不来,赶紧检查一下线路,确保没问题。或者读图过程是否有漏洞。(可以检测SCCB通信是否正常,基本都是这个出问题。)

这里上位机我直接用易语言随便编写的,针对这种上位机编写,易语言比其他语言方便很多,不过同时e写出来的程序也会大一点,还可能被杀毒软件误杀!
我踩过的坑

SCCB通信正常,但是寄存器设置不进去,最后发现,每次设置完才初试化OV7670的RST引脚,结果给重启了,刚写的全部抹掉。
寄存器问题,这个问题多,自己慢慢踩吧。
摄像头调焦距问题,很白痴但是很重要。彩条输出如果没问题的话,出不来图像,看看有没有调焦距,我的模块买的镜头有点摩擦,我以为焦距调节到头了,结果还处在2000度近视的状态~~,导致每次出图都是一片渐变灰色。结果一狠心使劲扭了几圈镜头,戴上眼镜了,视力瞬间到5.0.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分