OV2640
OV2640是OmniVision公司生产的1/4英寸CMOS UXGA(1632_1232分辨率)图像传感器
特点:
- 体积小、工作电压低、灵敏度高
- 具有单片UXGA摄像头和影像处理器的所有功能
- 通过SCCB总线控制
- 可输出整帧、子采样、缩放、取窗口等方式各种分辨率的8/10位影像数据
- 最高帧数15帧/秒(SVGA可达30帧,CIF可达60帧)
- 用户定义图像质量、数据格式、传输方式等
- 所有图像处理功能都可以通过SCCB接口(串行摄像机控制总线协议,相当于一个简易的I2C协议)编程
- 兼容I2C接口
- 支持RawRGB、RGB、GRB422、YUV和YCbCr输出格式
- 内置DSP,支持UXGA、SXGA、SVGA以及按比例缩小到从SXGA到40*30的任何尺寸,支持图像缩放
- 支持自动曝光控制、自动增益控制、自动白平衡、自动消除灯光条纹、自动黑电平校准等自动控制功能和色饱和度、色相、伽马、锐度等设置,支持闪光灯
- 支持图像压缩,可输出JPEG图像数据
SCCB时序
SCCB(Serial Camera Control Bus串行摄像头控制总线)总线是由OV(OmniVision)公司定义和发展的三线式串行总线。现在SCCB总线大多采用两线式接口总线,接口总线包括SIOC串行时钟输入线和SIOD串行双向数据线,分别相当于IIC协议的SCL信号线和SDA信号线。SCCB就是个简化版的IIC,可以直接使用IIC的软件驱动代码改编成SCCB的驱动
基本概念简介
UXGA | 1600*1200 |
---|---|
SXGA | 1280*1024 |
XVGA | 1280*960 |
WXGA | 1280*800 |
XGA | 1024*768 |
SVGA | 800*600 |
VGA | 640*480 |
QQVGA | 160*120 |
CIF | 352*288 |
PCLK | 像素时钟:一个PCLK时钟,输出一个(Raw格式)或半个(RGB565格式)像素 |
VSYNC | 帧同步信号 |
HREF/HSYNC | 行同步信号 |
ov2640的图像数据输出通过Y[9:0]寄存器输出,这里只使用一**字节(8位)**数据,再PCLK、VSYNC、HREF/HSYNC控制下进行
对于Raw格式数据,$1t_p=1T_{PCLK}$
对于YUV/RGB格式数据,$1t_p=2T_{PCLK}$
行输出时序
HREF高电平期间的PCLK上升沿进行输出,每个PCLK上升沿从Y[9:0]输出一个**字节(8位)**数据
PCLK最大可达36MHz
例:以UXGA(1600*1200)时序,采用RGB565格式输出,每2字节组成一个像素的颜色,且低字节在前高字节在后。这样每行输出总共有1600*2个PCLK周期,输出1600*2个字节
帧输出时序
输出开始时,VSYNC输出$4*t_{LINE}$有效电平(可自行设置为高/低)脉冲
$27193*t_p$后,HREF拉高,开始输出行数据,每行数据输出之间以$322*t_p$为间隔,直到完成所有行输出
最后会有$57697*t_p$间隔才能进行下一帧输出
JPEG时序
JPEG输出时,PCLK大大减少,HREF不连续,数据流以0xFF、0xD8开头,以0xFF、0xD9结束,将此间数据保存为.jpg文件即可在电脑打开查看
相关硬件配置
OV2640传感器窗口设置
传感器窗口设置允许用户设置整个传感器区域(1632*1220)的感兴趣部分,即在传感器里面开窗,开窗范围从2*2到1632*1220都可以设置,但要求这个窗口必须大于等于随后设置的图像尺寸
详细内容可查看数据手册
图像尺寸设置
即DSP输出到LCD的图像最大尺寸,该尺寸要小于等于传感器窗口设置所设定的窗口尺寸
图像窗口设置
在设置的图像尺寸里面再次设置窗口大小,该窗口必须小于等于前面设置的图像尺寸,该窗口设置后的图像范围将用于输出到外部
图像输出大小设置(缩放设置)
控制最终输出到外部的图像尺寸
该设置仅会对图像进行缩放处理,如果设置的图像输出大小不等于图像窗口设置图像大小,那么图像就会被缩放处理,只有两者大小一样(图像输出大小=图像窗口设置大小)时,输出比例才是1:1
OV2640模块参数
- 支持RGB565/JPEG数据输出
- 支持最大UXGA分辨率输出
- 支持图像任意缩放
- 自带24M有源晶振、3.3V稳压电路、带滤光片的感光红外镜头
- 支持手动对焦(旋下盖上螺丝调节镜头即可)
引脚参数:
脚位 | 名称 | 说明 |
---|---|---|
1 | GND | 接地 |
2 | VCC3.3 | 接3.3V电源 |
3 | OV_SCL | SCCB时钟线(I) |
4 | OV_VSYNC | 帧同步信号(O) |
5 | OV_SDA | SCCB数据线(I/O) |
6 | OV_HREF | 行同步信号(O) |
8 | OV_RESET | 复位信号,低电平有效(I) |
15 | OV_PCLK | 像素时钟(O) |
17 | OV_PWDN | 掉电模式使能,高电平有效(I) |
18 | NC | 空脚 |
7、9、10、11、12、13、14、16 | OV_D0~D7 | 数据线(O) |
OV2640模块使用过程
初始化
- 初始化IO口
- 上电、复位
- 读取传感器ID
- 执行初始化序列
全部内容由OV2640公司提供源码
MCU读取模块图像数据
- 等待帧同步(等待VSYNC信号)
- 等待HRED为高电平
- 等待第一个PCLK上升沿
- 读取第一个像素的低字节
- 等待第二个PCLK上升沿
- 读取第一个像素的高字节
- 等待下一个PCLK上升沿
- 重复4-7步骤直到读完剩余像素
- 结束读取
DCMI接口
DCMI(Digital Camera Interface)是STM32F4xx自带的数字摄像头接口,属于同步并行接口
特性:
能够接受外部8、10、12、14位并行接口最高54MB/s的高速数据流
支持内嵌码/外部行同步/帧同步
支持连续模式或快照模式
支持裁剪功能
可支持不同数据格式:单色或原始拜尔(Bayer)格式、YCbCr 4:2:2逐行视频、RGB565逐行视频、压缩数据(JPEG)格式
接口通过FIFO和数据格式化器直接与AHB总线相连
该接口包含14条数据线(D13-D0)和1条像素时钟线(PIXCLK),且像素时钟的有效电平可由用户程序决定,能在像素时钟的上升沿或下降沿捕获数据
DCMI接口包含以下信号:
DCMI接口 | 引脚 | 别名 | 对应OV2640接口 | 引脚 |
---|---|---|---|---|
数据流输入 | D[0:13] | 数据流输出 | D[0:7] | |
水平同步 | 输入HREF/HSYNC | 行同步 | 行同步信号 | HREF/HSYNC |
垂直同步 | 输入VSYNC | 帧同步/场同步 | 帧同步信号 | VSYNC |
像素时钟输入 | PIXCLK | 像素时钟 | 像素时钟 | PCLK |
时序
数据与PIXCLK同步,并根据像素时钟的极性在像素时钟上升沿/下降沿发生变化
HREF/HSYNC指示行的开始或结束,VSYNC指示帧的开始或结束
DCMI时序与上述OV2640时序基本一致,但DCMI的PIXCLK有效沿可自定义,且HSYNC、VSYNC有效状态对应指示数据在并行接口上无效时,HSYNC/VSYNC引脚上的引脚电平(人话:和OV2640的有效状态相反)
数据存储
DCMI接收到的数据存储在DCMI_DR 32位寄存器内,接入OV2640模块时采用8位数据宽度,所以每4个像素时钟才捕获完32位数据,第一个字节存放在LSB位置,第四个字节存放在MSB位置遵守低字节在前,高字节在后
==DCMI支持DMA传输==,DCMI可被配置为每在其数据寄存器中收到一个完整的32位数据块时,发送一个DMA请求,由DMA将寄存器内的值搬运到目的地址(如LCD/SRAM)
注意:DCMI的DMA请求映射在DMA2 Channel1 Stream1上;如果使用DCMI->DMA->LCD的传输路径,因为LCD是16位宽(RGB565),但DCMI_DR是32位宽,所以一次DCMI引起的DMA请求将引发往LCD写2次数据
相关设置
DCMI支持连续模式和快照模式,连续模式=录像;快照模式=照相
DCMI支持内嵌码同步和硬件同步,一般采用硬件同步
硬件同步下使用HSYNC和VSYNC两个信号,系统会忽略两个信号有效电平期间接收的所有数据,即硬件同步模式下的HSYNC、VSYNC信号相当于消隐信号
初始化流程
- 配置相关引脚复用为DCMI
- 使能DCMI时钟
- 设置DCMI工作模式和PCLK、HSYNC、VSYNC等参数
- 设置DMA搬运DCMI数据
- 使能DCMI传输
实际配置方法与代码
硬件配置
OV2640模块-转接-DCMI接口 对应好即可
软件配置
- sccb协议驱动(与I2C协议类似)
sccb.h
1 |
|
sccb.c
1 |
|
- ov2640驱动
ov2640.h
1 |
|
ov2640.c
1 |
ov2640cfg.h
1 | //OV2640 SXGA初始化寄存器序列表 |
- dcmi接口配置
dcmi.h
1 |
|
dcmi.c
1 |
- main()配置
main.c
1 |
|