基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持

这篇具有很好参考价值的文章主要介绍了基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.设计架构

设计框图如下:
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持
采用Xilinx官方推荐的VDMA架构实现图像缓存和显示,除OV5640摄像头采集和HDMI输出外,其他ip均采用Xilinx官方IP实现。
这里说明一下:
OV5640摄像头图像数据经VDMA三帧缓存后有2路输出
1路输出HDMI显示器显示;
1路通过FATFS文件系统写入sd卡中存放,存放的数据格式位bmp图片;

2.工程简介

开发板的zynq主控是zynq7100,工程实现功能如下:
1.实现OV5640摄像头HDMI输出;
2.实现sd卡FATFS文件系统简单读写测试;
3.实现OV5640摄像头循环拍照,3秒拍摄一张图片;
4.实现OV5640摄像头按键拍照,板载PS侧按键按一下拍照;
工程BD部分如下:
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持
工程代码架构如下:
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持
工程SDK代码架构如下:
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持
SDK代码说明:
设置了2个宏定义:

//#define FATFS_TEST
//#define KEY_CAMERA

#define FATFS_TEST:FATFS文件系统测试:
默认为注释掉,程序执行摄像头循环拍照功能;
取消注释则程序执行FATFS文件系统读写测试;
#define KEY_CAMERA:摄像头按键拍照功能;
默认为注释掉,程序执行摄像头循环拍照功能;
取消注释则程序执行摄像头按键拍照功能;

3.zynq配置

zynq配置这里主要是要使能i2c外设和sd卡外设,i2c外设使能是为了配置OV5640摄像头,sd卡外设使能则是为了存放拍摄的照片,除此之外,还要使能一个mio,因为mio连接了一个PS侧的按键,后面要依靠此按键来触发拍照;
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持

4.sd卡文件系统FATFS配置

在嵌入式领域,sd卡可以跑FATFS文件系统,Xilinx的SDK开发环境已经集成了FATFS库,所以我们只需在使用前配置一下就可以了,非常方便,设置方法如下:
1.vivado导出比特流并启动sdk;
2.sdk新建一个工程;
3.接下来添加 FATFS 库。需要注意的是,先关闭 system.mss 的界面,再添加 FATFS库,否则有可能导致 FATFS 库添加失败。
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持
system.mss 界面关闭后,右击 micro_sd_rw_bsp,选择“Board Support Package Setting”。
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持
在弹出的界面中勾选“xilffs”,xilffs 即为 FATFS 库
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持
勾选后,会在左侧 Overview 的 standalone 一栏出现 xilffs,点击 xilffs。可以看到 use_lfn 的默认设置为
false,即不使能。use_lfn 用于设置是否使能长文件名以及文件名的小写字母,这里将 use_lfn 设置为 true,
点击“OK”按钮完成设置。
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持
设置完成后,在 sd_rw_txt_bsp→ps_cortexa9_0→libsrc 一栏下,会多出 FATFS 的库函数。
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持

5.sd卡文件系统FATFS读写测试

在摄像头拍照实验之前,需要先对FATFS文件系统进行测试,看是否在sd卡上能跑通;
测是方法如下:
第一步:在sd卡中新建一个txt文件;
第二步:新建的txt文件中写入一段测试字符串;
第三步:读出txt文件中上一步写入的测试字符串;
第四步:比较读写字符串内容是否完全一致;也可以拔出sd卡在电脑中查看内容;
在SDK中建立了sd读写的头文件和源文件,在源文件中含有读写测试的功能函数;
在进行sd卡文件系统FATFS读写测试之前,应在主函数中取消#define FATFS_TEST的注释:

#define FATFS_TEST
//#define KEY_CAMERA

写数据如下:

const char src_str[100] = "I love Xilinx FPGAs ~~~~~~~~~~~~"; //定义文本内容

下面给出读写测试函数源码;

int helai_sd_test(){
    int len;
    int i;
    char dest_str[100] = "";
    sd_mount();           //挂载SD卡
    len = strlen(src_str);         //计算字符串长度
    sd_write_data(FILE_NAME,(u32)src_str,len);	//SD卡写数据
    sd_read_data(FILE_NAME,(u32)dest_str,len);	//SD卡读数据
    //比较写入的字符串和读出的字符串是否相等
   //for(i=0;i<len;i++){
   // 	xil_printf("read data =%c\r\n",dest_str[i]);
   // }
    if (strcmp(src_str, dest_str) == 0) xil_printf("src_str is equal to dest_str,SD card test success!\n");
    else xil_printf("src_str is not equal to dest_str,SD card test failed!\n");
    return 0;
}

测试结果:
串口观测读写内容的对比结果为正确:
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持
拔出SD卡用读卡器到电脑端直接查看内容:
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持

6.OV5640摄像头显示测试

为了保证拍照的正确性,调试拍照之前,必须保证图像数据采集的正确,所以直接接上显示器输出,分辨率位720P,这部分由VDMA配置;

7.OV5640摄像头循环拍照测试

这部分功能为实现OV5640摄像头循环拍照,3秒拍摄一张图片;
bmp图片有固定的数据头,所以直接在程序中定义该部分,如下:

//BMP图片文件头
u8 bmp_head[54] = {
     0x42,0x4d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x28,0x0,
	 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x18,0x0,0x0,0x0,
	 0x0,0x0,0x0,0x0,0x0,0x0,0xc4,0xe,0x0,0x0,0xc4,0x0e,0x0,0x0,0x0,0x0,
	 0x0,0x0,0x0,0x0,0x0,0x0 };

随后就是将图像的rgb数据部分和数据头部分一起写入sd卡中形成bmp图片;
直接给出主函数代码:

void main(){
	XGpioPs_Config_key=XGpioPs_LookupConfig(GPIO_KEY);
	XGpioPs_CfgInitialize(&XgpioPS_key, XGpioPs_Config_key, XGpioPs_Config_key->BaseAddr);
	XGpioPs_SetDirectionPin(&XgpioPS_key, 51, 0);
	// Initialize OV5640 regesiter
	int  rd_index;				//VDMA读通道操作的帧缓存编号
	unsigned int rd_fram_addr;	//VDMA读通道操作的帧缓存地址
	I2C_config_init();
	helai_vdma();
#ifdef FATFS_TEST
	helai_sd_test();
	while(1);
#else
	//最后一个参数表示清零的字节数,由于RGB888数据格式占用3个字节,因此最后乘以3
	memset(0x01000000,0,1280*720*3*3);
	Xil_DCacheFlush();
	//根据VDMA显存大小给BMP文件头赋值
	*bmp_width  = 1280;
	*bmp_height = 720;
	*bmp_size   = 1280*720*3;
	*bf_size    = *bmp_size + 54;
	f_mount(&fatfs,"",1);	//挂载文件系统
	while (1){
		#ifdef KEY_CAMERA
		int key;
		key=XGpioPs_ReadPin(&XgpioPS_key, 51);
		if(key==0){
			usleep(20000);
			if(key==0){
				printf("capture picture\n");
				rd_index = XAxiVdma_CurrFrameStore(&vdma, XAXIVDMA_READ);	//获取当前读通道操作的帧缓存编号
				printf("current read frame is %d\n",rd_index);
				XAxiVdma_StartParking(&vdma, rd_index, XAXIVDMA_READ);	//读通道驻停在当前帧
				rd_fram_addr = 0x01000000 + 1280*720*3*rd_index;	//并获取当前帧的起始地址
				memcpy((void *)bmp_addr,(void *)rd_fram_addr,1280*720*3);	//将当前帧的图像拷贝到抓拍图片缓存区域
				XAxiVdma_StopParking(&vdma, XAXIVDMA_READ);	//结束读通道驻停过程,继续在多帧之间进行切换
				write_sd_bmp((u8 *)bmp_addr);	//将抓拍图片缓存区域中的图像以BMP格式写入SD卡
				pic_cnt++;	//BMP图片编号累加
			}
		}
		#else
		printf("capture picture\n");
		rd_index = XAxiVdma_CurrFrameStore(&vdma, XAXIVDMA_READ);	//获取当前读通道操作的帧缓存编号
		printf("current read frame is %d\n",rd_index);
		XAxiVdma_StartParking(&vdma, rd_index, XAXIVDMA_READ);	//读通道驻停在当前帧
		rd_fram_addr = 0x01000000 + 1280*720*3*rd_index;	//并获取当前帧的起始地址
		memcpy((void *)bmp_addr,(void *)rd_fram_addr,1280*720*3);	//将当前帧的图像拷贝到抓拍图片缓存区域
		XAxiVdma_StopParking(&vdma, XAXIVDMA_READ);	//结束读通道驻停过程,继续在多帧之间进行切换
		write_sd_bmp((u8 *)bmp_addr);	//将抓拍图片缓存区域中的图像以BMP格式写入SD卡
		pic_cnt++;	//BMP图片编号累加
		sleep(3);
		#endif
	}
#endif
}

测试完成后,拔出SD卡用读卡器到电脑端直接查看内容:
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持

8.OV5640摄像头按键拍照测试

这部分功能为实现OV5640摄像头按键拍照,板载PS侧按键按一下拍照;
在使用之前,应在主函数中取消#define KEY_CAMERA的注释:

//#define FATFS_TEST
#define KEY_CAMERA

9.上板调试

开发板:zynq7100开发板;
开发环境:vivado2019.1;
输入:OV5640摄像头,720P,RGB888格式;
输出:HDMI输出,SD卡bmp图片;
如下:
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持

10.福利领取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持文章来源地址https://www.toymoban.com/news/detail-437748.html

到了这里,关于基于zynq7100的OV5640摄像头照相机实验,提供工程源码和技术支持的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • MIPI摄像头工程=7系列FPGA + OV5640(MIPI) + 15 分钟 + VITIS

    MIPI摄像头工程=7系列FPGA + OV5640(MIPI) + 15 分钟 + VITIS

    硬件 Spartan-7 SP701 FPGA 7系列FPGA+电阻网络实现的MIPI接口 OV5640 MIPI接口 软件 AMD Vivado 2020 版本以上 AMD Vitis 2020 MIPI 接口现在非常流行,国产FPGA目前基本都带MIPI接口,而AMD-Xilinx是从U+系列开始支持MIPI电平,从国内使用情况来看,7系列FPGA是使用最广的器件,所以这次使用的FPGA是

    2024年02月08日
    浏览(9)
  • AX7A200教程(9): ov5640摄像头输出显示720p视频

    AX7A200教程(9): ov5640摄像头输出显示720p视频

    ov5640摄像头视频通过ddr3缓存后,最后使用hdmi接口进行输出显示 2.1,像头硬件管脚 如下图所示,一共18个管脚 2.2,摄像头电源初始化时序 因这个ov5640摄像头是买的老摄像头,所以需要对Reset和PWDN的电源上电进行控制,控制时序如下图所示。 2.3,电源初始化程序 其中cmos_pwd

    2024年01月23日
    浏览(13)
  • FPGA GTP全网最细讲解 aurora 8b/10b协议OV5640摄像头视频传输 提供2套工程源码和技术支持

    FPGA GTP全网最细讲解 aurora 8b/10b协议OV5640摄像头视频传输 提供2套工程源码和技术支持

    没玩过GT资源都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。 GT资源是Xilinx系列FPGA的重要卖点,也是做高速接口的基础,不管是PCIE、SATA、MAC等,都需要用到GT资源来做数据高速串化和解串处理,Xilinx不同的FPGA系列拥有不同的GT资源类型,低端

    2024年02月09日
    浏览(12)
  • 【正点原子FPGA连载】 第二十七章OV5640摄像头LCD显示 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

    【正点原子FPGA连载】 第二十七章OV5640摄像头LCD显示 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html OV5640是OmniVision(豪威科技)公司生产的一颗CMOS图像传感器,该传感器功耗低、分辨率高以及采集速率快,主

    2024年02月16日
    浏览(13)
  • 【正点原子FPGA连载】 第三十章双目OV5640摄像头LCD显示实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

    【正点原子FPGA连载】 第三十章双目OV5640摄像头LCD显示实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html 双目摄像头是在一个模组上集成了两个摄像头,实现了双通道的图像采集。双目摄像头一般应用于安防监控、

    2024年02月13日
    浏览(14)
  • 【正点原子FPGA连载】第三十二章OV5640摄像头RGB-LCD显示实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

    【正点原子FPGA连载】第三十二章OV5640摄像头RGB-LCD显示实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html OV5640是OmniVision(豪威科技)公司生产的CMOS图像传感器,该传感器分辨率高、采集速率快,图像处理性能强,

    2023年04月08日
    浏览(8)
  • 基于RK3399 Android11适配OV13850 MIPI摄像头

    基于RK3399 Android11适配OV13850 MIPI摄像头

      从上图可看出,我们需要关心的,①MIPI数据和时钟接口使用的是MIPI_TX1/RX1 ②I2C使用的是I2C4总线 ③RST复位引脚使用的是GPIO2_D2 ④PWDN使用的是GPIO1_C7 ⑤MCLK使用的是GPIO3_B7 ⑥需要保证红色框框的供电电源正常。   结合RK提供的文档,如下摄像头数据采集拓扑图所示,我们

    2024年03月14日
    浏览(9)
  • RK3568驱动OV13850摄像头模组调试过程

    RK3568驱动OV13850摄像头模组调试过程

    品牌:Omnivision 型号:CMK-OV13850 接口: MIPI 像素:1320W OV13850彩色图像传感器是一款低电压、高性能1/3.06英寸1320万像素 CMOS图像传感器 ,使用OmniBSI+?技术提供了单-1320万像素(4224×3136)摄像头的功能。通过串行摄像头控制总线(SCCB)接口的控制,它提供了全帧、下采样、开窗的

    2023年04月27日
    浏览(11)
  • RK3568-android11-适配ov13850摄像头

    参考链接 相关概念 相关接口 相关协议 图像格式

    2024年02月09日
    浏览(19)
  • stm32(SCCB)+ov7670摄像头输出图像程序

    stm32(SCCB)+ov7670摄像头输出图像程序

    一、简介:   OV7670一般模块指低成本数字输出CMOS摄像头,其摄像头包含30w像素的CMOS图像感光芯片,3.6mm焦距的镜头和镜头座,板载CMOS芯片所需要的各种不同电源(电源要求详见芯片的数据文件),板子同时引出控制管脚和数据管脚,方便操作和使用。 二、管脚定义 3V3---

    2024年02月13日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包