0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【紫光同创国产FPGA教程】【第十五章】OV5640摄像头显示例程

FPGA技术专栏 来源:芯驿电子科技 作者:芯驿电子科技 2021-02-22 13:45 次阅读

原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处(alinx.com)。

1. 实验简介

本实验将采用500万像素的OV5640摄像头模组(模块型号:AN5640)为大家显示更高分辨率的视频画面。OV5640摄像头模组最大支持QSXGA (2592x1944)的拍照功能,支持1080P、720P、VGA、QVGA视频图像输出。本实验将OV5640配置为RGB565输出,先将视频数据写入外部存储器,再从外部存储器读取送到VGA、LCD等显示模块。

2.实验原理

2.1 OV5640传感器简介

OV5640摄像头模组采用美国OmniVision(豪威)CMOS芯片图像传感器OV5640,支持自动对焦的功能。OV5640芯片支持DVP 和MIPI 接口,本实验所用 OV5640摄像头模组通过DVP接口和FPGA连接实现图像的传输。

2.2 OV5640的参数说明

像素:硬件像素500W;

感光芯片:OV5640;

感光尺寸:1/4;

功能支持:自动对焦, 自动曝光控制(AEC),自动白平衡(AWB);

图像格式 : RAW RGB, RGB565/555/444, YUV422/420和JPEG压缩;

捕获画面:QSXGA(2592x1944), 1080p, 1280x960, VGA(640x480), QVGA(320x240);

工作温度:-30~70℃, 稳定工作温度为0~50℃

2.3 OV5640的寄存器配置

OV5640的寄存器配置是通过FPGA的I2C(也称为SCCB接口)接口来配置。用户需要配置正确的寄存器值让OV5640输出我们需要的图像格式,实验中我们把摄像头输出分辨率和显示设备分辨率配置成一样的, OV5640的摄像头输出的数据格式在以下的0x4300的寄存器里配置,在我们的例程中OV5640配置成RGB565的输出格式。

pIYBAGAvUHqAdeZMAACF743-LVA360.jpg

关于OV5640的寄存器还有很多很多,但很多寄存器用户无需去了解,寄存器的配置用户可以按照OV5640的应用指南来配置就可以了。如果您想了解更多的寄存器的信息,可以参考OV5640的datasheet中的寄存器说明。

2.4 OV5640的RGB565输出格式

OV5640在HREF信号为高时输出一行的图像数据,输出数据在PCLK的上升沿的时候有效。因为RGB565显示每个像数为16bit, 但OV5640每个PCLK输出的是8bit,所以每个图像的像数分两次输出,第一个Byte输出为R4~R0和G5~G3, 第二个Byte输出为G2~G0和B4~B0,将前后2个字节拼接起来就是16Bit RGB565数据。

o4YBAGAvUHuAHmDsAACJY1IfDsA711.jpg

3. 程序设计

前面的实验已经为本实验做了大量的铺垫,包括I2C寄存器的配置、外部存储器的读写,本程序一个比较关键的地方在于视频同时读写,如何做到读写不冲突?在设计帧读写模块时就已经考虑到这点,所以有帧基地址选择,最大4帧选择,每次读视频帧地址和正在写的帧地址是不同的,而是上次写入一帧数据的地址,这样就可以避免读写冲突,避免视频画面裂开错位。

pIYBAGAvUHuAGpdaAAAuwNhQAQI350.jpg

cmos_8_16bit模块完成摄像头输入的2个8bit数据转换到一个16bit数据(一个像素),数据位宽变成2倍,时钟频率不变,所以16bit数据是隔一个时钟周期有效,并不是每个时钟一直有效。

信号名称 方向 说明
rst in 异步复位输入,高复位
pclk in 传感器像素时钟输入
pdata_i in 传感器8bit数据输入
de_i in 数据有效(HREF)
pdata_o out 16bit数据输出
hblank out de_i延时一个时钟周期
de_o out 数据输出有效

cmos_8_16bit模块端口

cmos_write_req_gen模块通过判断摄像头的列同步信号cmos_vsync的上升沿,生成ov5640数据写入的请求信号,表示一帧图像开始写入请求。另外生成write_addr_index写地址选择和read_addr_index读地址选择,这里read_addr_index的值会比write_addr_index的值延迟一帧,使得读和写的地址不冲突。

信号名称 方向 说明
rst in 异步复位输入,高复位
pclk in 传感器像素时钟输入
cmos_vsync in 场同步输入,每一帧视频都会变化一次,可以用于一帧的开始或结束
write_req out 写数据请求
write_addr_index out 写帧地址选择
read_addr_index out 读帧地址选择
write_req_ack in 写请求应答

cmos_write_req_gen模块端口

frame_read_write模块我们已经在前面的例程中使用过,在这里就是把摄像头采集的数据存入写FIFO里,然后产生DDR3的Burst写请求,写入到DDR3中,另外读也是一样,当读FIFO里的数据小于一定值时,产生DDR3的Burst读请求。在这里我们实例化了2个frame_read_write模块,分别对应2路视频的数据存储和读取。这里每路视频的DDR3的存储地址是不一样的。

第一路视频的存储地址如下:

o4YBAGAvUHuATrUmAAAJDzY4OT8862.jpg

第二路视频的存储地址如下:

pIYBAGAvUHuADACcAAAJf7u3oSI351.jpg

video_rect_read_data模块功能跟HDMI字符显示osd_display模块的功能类似,本例程中是把从DDR3里读取的视频图像跟彩条图像叠加,因为ax7035使用的是双目摄像头,所以需要调用2个video_rect_read_data模块。

信号名称 方向 说明
video_clk in 视频的像素时钟
rst in 复位信号
video_left_offset in 视频显示的水平偏移地址
video_top_offset in 视频显示的垂直偏移地址
video_width in 视频的宽度
video_height in 视频的高度
read_req out 读一帧图像数据请求
read_req _ack in 读请求应答
read_en out 读数据使能
read_data in 读到的数据
timing_hs in 输入的行同步信号
timing_vs in 输入的列同步信号
timing_de in 输入的数据有效信号
timing_data in 输入的数据信号
hs out 输出的行同步信号
vs out 输出的列同步信号
de out 输出的数据有效信号
vout_data out 输出的数据信号

4. 实验现象

1)将摄像头模块插入开发板,保证1脚对齐,1脚在焊盘形状和其他引脚是有明显区别的,是方形的。

AN5640摄像头模块连接开发板连接图

AN5642摄像头模块连接开发板连接图

2)如果使用HDMI来显示,连接好HDMI显示器,如果使用液晶屏显示,插入液晶屏模块,连接方法在《HDMI测试实验教程》中已讲述。

3)下载实验程序,可以看到摄像头模块输出的视频。注意:ov5640模块焦距是可调的,如果焦距不合适,图像会模糊,旋转镜头,可以调节焦距。摄像头模块要轻拿轻放,不要用手触摸元器件

实验效果图

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21302

    浏览量

    593110
  • 视频
    +关注

    关注

    6

    文章

    1890

    浏览量

    71882
  • 摄像头
    +关注

    关注

    59

    文章

    4606

    浏览量

    92877
  • OV5640
    +关注

    关注

    1

    文章

    19

    浏览量

    14089
  • 紫光同创
    +关注

    关注

    4

    文章

    68

    浏览量

    27245
收藏 人收藏

    评论

    相关推荐

    【小梅哥FPGAOV5640摄像头资料,含应用手册,1280*720P分辨率,30帧应用工程

    AC620_OV5640V2_SDRAM_TFT800_30FPS:使用Verilog直接配置OV5640摄像头,RGB565、800*480分辨率、30FPS。图像存入SDRAM后读出并显示
    发表于 04-30 10:26

    ov5640摄像头采集的图像显示出来是错误的

    `STM32板子上ov5640摄像头采集的JPEG数据图像显示出来是错误的。这样的问题因为什么?该如何修改呢?`
    发表于 04-16 21:12

    STM32F4及STM32L4系列驱动OV5640摄像头的代码

    送到上位机软件进行解码。本文可作为STM32F4及STM32L4系列驱动OV5640摄像头的代码参考,本例程输出分辨率(640×480)是通过DCMI的CROP方式从大图片中“剪”出,使用者也可以做
    发表于 08-20 06:47

    STM32H750是如何获取OV5640摄像头图像及上位机解码的

    送到上位机软件进行解码。本文可作为STM32H7及STM32F7系列驱动OV5640摄像头的代码参考,本例程输出分辨率(640×480)是通过DCMI的CROP方式从大图片中“剪”出,使用者也可以做
    发表于 08-20 06:16

    如何对imx6q开发板ov5640摄像头进行测试呢

    imx6q开发板ov5640摄像头测试运行得linux4.1.15版本,上电后得log打印显示ov5640_read error,ov5640
    发表于 01-10 06:59

    如何利用stm32驱动ov5640摄像头

    如何利用stm32驱动ov5640摄像头
    发表于 02-22 07:44

    实验教程:双目摄像头——紫光盘古50K开发板配套教程

    一、实验目的Double_OV5640 双目摄像头模组采集视频,通过 HDMI 输出到外部显示器。二、实验设计OV5640 寄存器配置FPGA
    发表于 04-18 16:45

    紫光同创FPGA入门指导:OV5640 双目摄像头——紫光盘古系列50K开发板实验教程

    :产生 visa 时序; ms72xx_ctl:配置 HDMI PHY; 五、实验现象 步骤 1:按图所示,连接 Double_OV5640 双目摄像头模组,HDMI 显示器。 注 1:实验
    发表于 06-13 16:01

    PaddlePi-K210开发板除了支持ov2640 ov5640摄像头外,还支持哪些摄像头作为外设?

    想问一下PaddlePi-K210开发板除了支持ov2640 ov5640摄像头外,还支持哪些摄像头作为外设?能否支持红外摄像头?谢谢!
    发表于 09-14 07:13

    微雪电子OV5640 摄像头模块C型简介

    OV5640摄像头模块C型 500万像素 自动对焦 闪光灯 控制接口:SCCB 兼容I2C 型号 OV5640 Camera Board (C)
    的头像 发表于 12-31 16:55 2523次阅读
    微雪电子<b class='flag-5'>OV5640</b> <b class='flag-5'>摄像头</b>模块C型简介

    微雪电子OV5640摄像头模块A型简介

    OV5640摄像头模块A型 500万像素 控制接口:SCCB 兼容I2C 型号 OV5640 Camera Board (A)
    的头像 发表于 01-02 14:41 5438次阅读
    微雪电子<b class='flag-5'>OV5640</b><b class='flag-5'>摄像头</b>模块A型简介

    微雪电子OV5640 摄像头模块B型简介

    OV5640摄像头模块B型 500万像素 鱼眼 广视角 控制接口:SCCB 兼容I2C 型号 OV5640 Camera Board (B)
    的头像 发表于 01-02 14:49 3361次阅读
    微雪电子<b class='flag-5'>OV5640</b> <b class='flag-5'>摄像头</b>模块B型简介

    自动对焦摄像头模块OV5640原理图

    自动对焦摄像头模块OV5640原理图下载
    发表于 02-13 09:44 43次下载

    STM32驱动摄像头ov5640的驱动源码

    STM32驱动摄像头ov5640的驱动源码
    发表于 09-26 14:47 4次下载

    如何通过OV5640摄像头显示在VGA显示屏上

    从本例开始,接下来的几例,都将围绕OV5640摄像头来学习,教大家学会,如何通过OV5640摄像头,采集图像,并且显示在VGA
    的头像 发表于 10-18 09:20 2298次阅读