基于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

    硬件 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日
    浏览(48)
  • AX7A200教程(9): ov5640摄像头输出显示720p视频

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

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

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

    2024年02月09日
    浏览(52)
  • 【正点原子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日
    浏览(58)
  • 【正点原子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日
    浏览(52)
  • 【正点原子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日
    浏览(59)
  • 基于RK3399 Android11适配OV13850 MIPI摄像头

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

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

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

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

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

    2024年02月09日
    浏览(76)
  • 学习笔记之STM32的ov7670摄像头实验

    目录 1. OV7670摄像头模块 1.1 OV7670 传感器内置功能模块 1.2 OV7670模块的引脚  1.3 OV7670的时序图 1.4 OV7670的分辨率及其计算 2. FIFO模块 2.1 FIFO的简介 2.2 FIFO的信号 2.3 常用的FIFO数据存储器 3. BMP编码   3.1 BMP文件的组成 3.2 BMP编码步骤 4. 摄像头实验 4.1 工作流程 4.2 主要函数 4.3

    2024年02月04日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包