驱动OV5640进行VGA时序的LCD屏显示


前言

基于ZYNQ来进行的图像处理平台,OV5640和一些IP核的基本知识就不讲了,网上都有很多,自己可以慢慢研究,我就直接上整体框架。

OV5640图像采集是我们自定义的 IP 核,负责将 OV5640的数据转成视频流数据;视频流数据经过 Video in to AXI4-Stream IP 核转换成 AXI4-Stream IP 格式数据流,然后通过 VDMA 的写通道转成 AXI4 Memory Map 格式,并最终写入 DDR 内存中。VDMA 通过 AXISmartconnect IP 核与 AXI_HP 端口进行连接,从而高效访问 DDR3,VDMA 从 DDR3 中读取的视频或图像数据传输给 AXI4-Stream to Video Out IP 核。AXI4-Stream to Video Out IP 核在 VTC IP 核的控制下,把AXI4-Stream 格式的数据转换成视频输出的数据格式(如 RGB888),并将输出的视频数据流连接至RGB2LCD IP 核(rgb2lcd)的输入端。


一、硬件架构

1.硬件连接配置

打开PS和PL的连接HP AXI

配置

打开串口和emio(串口方便调试,emio做OV5640的驱动)

配置

串口引脚和配置两位emio来做驱动

配置

时钟100M

在这里插入图片描述

内存按自己的配置来

配置

怎么导入IP核就不说了,直接看各个IP核的配置,要配置的就4个v_axi4s_vid_out_0,v_vid_in_axi4s_0,axi_vdma_0,axi_dynclk_0(自己的动态时钟管理IP核)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/a97c1eaf7e4e427680cfe17b8050a162.png
在这里插入图片描述

端口的引出和命名

在这里插入图片描述
在这里插入图片描述

整体架构

硬件框架

约束文件

set_property IOSTANDARD LVCMOS33 [get_ports lcd_lcd_hs]
set_property IOSTANDARD LVCMOS33 [get_ports lcd_lcd_vs]
set_property IOSTANDARD LVCMOS33 [get_ports lcd_lcd_de]
set_property IOSTANDARD LVCMOS33 [get_ports lcd_lcd_pclk]
set_property IOSTANDARD LVCMOS33 [get_ports lcd_bl0]

set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[23]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[22]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[21]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[20]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[19]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[18]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[17]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[16]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[15]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[14]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[13]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[12]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[11]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[10]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[9]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[8]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_rgb_o[0]}]
set_property PACKAGE_PIN R14 [get_ports lcd_lcd_de]
set_property PACKAGE_PIN W15 [get_ports lcd_lcd_hs]
set_property PACKAGE_PIN T10 [get_ports lcd_lcd_pclk]
set_property PACKAGE_PIN V15 [get_ports lcd_lcd_vs]
set_property PACKAGE_PIN T11 [get_ports lcd_bl0]
set_property PACKAGE_PIN W16 [get_ports {lcd_rgb_o[0]}]
set_property PACKAGE_PIN V16 [get_ports {lcd_rgb_o[1]}]
set_property PACKAGE_PIN R18 [get_ports {lcd_rgb_o[2]}]
set_property PACKAGE_PIN T17 [get_ports {lcd_rgb_o[3]}]
set_property PACKAGE_PIN W13 [get_ports {lcd_rgb_o[4]}]
set_property PACKAGE_PIN V12 [get_ports {lcd_rgb_o[5]}]
set_property PACKAGE_PIN T15 [get_ports {lcd_rgb_o[6]}]
set_property PACKAGE_PIN T14 [get_ports {lcd_rgb_o[7]}]
set_property PACKAGE_PIN P18 [get_ports {lcd_rgb_o[8]}]
set_property PACKAGE_PIN Y17 [get_ports {lcd_rgb_o[9]}]
set_property PACKAGE_PIN Y16 [get_ports {lcd_rgb_o[10]}]
set_property PACKAGE_PIN V18 [get_ports {lcd_rgb_o[11]}]
set_property PACKAGE_PIN N17 [get_ports {lcd_rgb_o[12]}]
set_property PACKAGE_PIN V17 [get_ports {lcd_rgb_o[13]}]
set_property PACKAGE_PIN Y14 [get_ports {lcd_rgb_o[14]}]
set_property PACKAGE_PIN W14 [get_ports {lcd_rgb_o[15]}]
set_property PACKAGE_PIN Y19 [get_ports {lcd_rgb_o[16]}]
set_property PACKAGE_PIN Y18 [get_ports {lcd_rgb_o[17]}]
set_property PACKAGE_PIN W19 [get_ports {lcd_rgb_o[18]}]
set_property PACKAGE_PIN W18 [get_ports {lcd_rgb_o[19]}]
set_property PACKAGE_PIN U17 [get_ports {lcd_rgb_o[20]}]
set_property PACKAGE_PIN T16 [get_ports {lcd_rgb_o[21]}]
set_property PACKAGE_PIN R17 [get_ports {lcd_rgb_o[22]}]
set_property PACKAGE_PIN R16 [get_ports {lcd_rgb_o[23]}]



#----------------------摄像头接口的时钟---------------------------

set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets cam_pclk_IBUF]


#----------------------摄像头接口---------------------------
set_property IOSTANDARD LVCMOS33 [get_ports cam_rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports cam_pclk]
set_property IOSTANDARD LVCMOS33 [get_ports cam_vsync]
set_property IOSTANDARD LVCMOS33 [get_ports cam_href]
set_property IOSTANDARD LVCMOS33 [get_ports cam_pwdn]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[*]}]

set_property PACKAGE_PIN D18 [get_ports cam_pclk]
set_property PACKAGE_PIN G15 [get_ports cam_href]
set_property PACKAGE_PIN H15 [get_ports cam_vsync]
set_property PACKAGE_PIN E19 [get_ports cam_rst_n]
set_property PACKAGE_PIN H16 [get_ports cam_pwdn]

set_property PACKAGE_PIN E17 [get_ports {cam_data[7]}]
set_property PACKAGE_PIN D20 [get_ports {cam_data[6]}]
set_property PACKAGE_PIN D19 [get_ports {cam_data[5]}]
set_property PACKAGE_PIN A20 [get_ports {cam_data[4]}]
set_property PACKAGE_PIN B19 [get_ports {cam_data[3]}]
set_property PACKAGE_PIN E18 [get_ports {cam_data[2]}]
set_property PACKAGE_PIN F17 [get_ports {cam_data[1]}]
set_property PACKAGE_PIN F16 [get_ports {cam_data[0]}]
/*emio*/
set_property IOSTANDARD LVCMOS33 [get_ports {emio_sccb_tri_io[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {emio_sccb_tri_io[0]}]
set_property PACKAGE_PIN L16 [get_ports {emio_sccb_tri_io[0]}]
set_property PACKAGE_PIN L17 [get_ports {emio_sccb_tri_io[1]}]
set_property PULLUP true [get_ports {emio_sccb_tri_io[1]}]

2.导出硬件

左侧 Flow Navigator 导航栏中找到 PROGRAM AND DEBUG,点击该选项中的“Generate Bitstream”,对设计进行综合、实现、并生成 Bitstream 文件。
在生成 Bitstream 之后,在菜单栏中选择 File Export > Export hardware 导出硬件,并在弹出的对话框 中,勾选“Include bitstream”。然后在菜单栏选择 File > Launch SDK,启动 SDK 软件。
注意:生成Bitstream 文件比较慢并不是软件卡了,泪的教训。

二、SDK程序

1.新建项目

首先在菜单栏选择 File > New > Application
Project, 新建一个 SDK 应用工程。在弹出的对话框中,输入工程名。在弹出的对话框中选择希望使用的工程模板,这里我们选择空模板。

2.导入文件

添加文件 LCD的显示和动态时钟,emio驱动OV5640,VDMA的api

在这里插入图片描述

main.c

//****************************************Copyright (c)***********************************//
//原子哥在线教学平台:www.yuanzige.com
//技术支持:www.openedv.com
//淘宝店铺:http://openedv.taobao.com
//关注微信公众平台微信号:"正点原子",免费获取ZYNQ & FPGA & STM32 & LINUX资料。
//版权所有,盗版必究。
//Copyright(C) 正点原子 2018-2028
//All rights reserved
//----------------------------------------------------------------------------------------
// File name:           main.c
// Last modified Date:  2019/07/01 15:59:46
// Last Version:        V1.0
// Descriptions:        OV5640摄像头驱动LCD示例
//----------------------------------------------------------------------------------------
// Created by:          正点原子
// Created date:        2019/07/01 15:59:52
// Version:             V1.0
// Descriptions:        The original version
//
//----------------------------------------------------------------------------------------
//****************************************************************************************//

/***************************** Include Files *********************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "xil_types.h"
#include "xil_cache.h"
#include "xparameters.h"
#include "xaxivdma.h"
#include "xaxivdma_i.h"
#include "display_ctrl/display_ctrl.h"
#include "vdma_api/vdma_api.h"
#include "emio_sccb_cfg/emio_sccb_cfg.h"
#include "ov5640/ov5640_init.h"

//宏定义
#define BYTES_PIXEL        3                           //像素字节数,RGB888占3个字节
#define FRAME_BUFFER_NUM   3                           //帧缓存个数3
#define DYNCLK_BASEADDR    XPAR_AXI_DYNCLK_0_BASEADDR  //动态时钟基地址
#define VDMA_ID            XPAR_AXIVDMA_0_DEVICE_ID    //VDMA器件ID
#define DISP_VTC_ID        XPAR_VTC_0_DEVICE_ID        //VTC器件ID


//全局变量
//frame buffer的起始地址
unsigned int const frame_buffer_addr = (XPAR_PS7_DDR_0_S_AXI_BASEADDR
										+ 0x1000000);
XAxiVdma     vdma;
DisplayCtrl  dispCtrl;
VideoMode    vd_mode;

int main(void)
{
	u32 status;
	u16 cmos_h_pixel;   //ov5640 DVP 输出水平像素点数
	u16 cmos_v_pixel;   //ov5640 DVP 输出垂直像素点数
	u16 total_h_pixel;  //ov5640 水平总像素大小
	u16 total_v_pixel;  //ov5640 垂直总像素大小

	cmos_h_pixel = 480;
	cmos_v_pixel = 272;
	total_h_pixel = 1800;
	total_v_pixel = 1000;

	emio_init();                         //初始化EMIO
	status = ov5640_init( cmos_h_pixel,  //初始化ov5640
						  cmos_v_pixel,
						 total_h_pixel,
						 total_v_pixel);
	if(status == 0)
		xil_printf("OV5640 detected successful!\r\n");
	else
		xil_printf("OV5640 detected failed!\r\n");


	 vd_mode = VMODE_480x272;     //4.3寸屏,480*272分辨率


	//配置VDMA
	run_vdma_frame_buffer(&vdma, VDMA_ID, vd_mode.width, vd_mode.height,
							frame_buffer_addr,0,0,BOTH);
	//初始化Display controller
	DisplayInitialize(&dispCtrl, DISP_VTC_ID, DYNCLK_BASEADDR);
    //设置VideoMode
	DisplaySetMode(&dispCtrl, &vd_mode);
	DisplayStart(&dispCtrl);

    return 0;
}

实验结果

正常显示,成功了。要完整项目的评论发邮箱。
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
R58点亮ov5640.txt 开发板:深圳市索智科技有限公司SC3817R开发板,全志R16(CPU:Quad-Core Cortex-A7 CPU) http://www.allwinnertech.com/clq/r/R16.html 全志官网R16的简介 android4.4.2/linux3.4.39 2016/7/18 16:38 1、配置ov5640在android层配置的分辨率为vga(预览/拍照/录像) 注意:系统自带的快拍APP就在这里查找分辨率参数发送到camera的HAL层。 这里得分辨率设置为:640x480 驱动里面搜索可以设置为:2592x1936, 2048x1536, 1600x1200, 1280x960, 1280x960, 1024x768, 1920x1080 ,1280x720, 800x600, 640x480 R:\wyb\wen_ov5640_r16\android\device\softwinner\astar-evb20\configs\camera.cfg ;------------------------------------------------------------------------------- ; 用于camera的配置 ; ; 采用格式: ; key = key_value ; 注意: 每个key需要顶格写; ; key_value紧跟着key后面的等号后面, 位于同一行中; ; key_value限制大小为256字节以内; ; ;------------------------------------------------------------------------------- ;------------------------------------------------------------------------------- ; exif information of "make" and "model" ;------------------------------------------------------------------------------- key_camera_exif_make = MAKE_A31S key_camera_exif_model = MODEL_A31ST ;------------------------------------------------------------------------------- ; 1 for single camera, 2 for double camera ;------------------------------------------------------------------------------- number_of_camera = 1 ;------------------------------------------------------------------------------- ; CAMERA_FACING_BACK ; gc0307 ov2640 ;------------------------------------------------------------------------------- camera_id = 0 ;------------------------------------------------------------------------------- ; 1 for CAMERA_FACING_FRONT ; 0 for CAMERA_FACING_BACK ;------------------------------------------------------------------------------- camera_facing = 0 ;------------------------------------------------------------------------------- ; 1 for camera without isp(using built-in isp of Axx) ; 0 for camera with isp ;------------------------------------------------------------------------------- use_builtin_isp = 0 ;------------------------------------------------------------------------------- ; camera orientation (0, 90, 180, 270) ;------------------------------------------------------------------------------- camera_orientation = 90 ;------------------------------------------------------------------------------- ; driver device name ;------------------------------------------------------------------------------- camera_device = /dev/video0 ;------------------------------------------------------------------------------- ; device id ; for two camera devices with one CSI ;------------------------------------------------------------------------------- device_id = 0 used_preview_size = 1 key_support_preview_size = 640x480 key_default_preview_size = 640x480 used_picture_size = 1 key_support_picture_size = 640x480 key_default_picture_size = 640x480 used_flash_mode = 0 key_support_flash_mode = on,off,auto key_default_flash_mode = on used_color_effect=0 key_support_color_effect = none,mono,negative,sepia,aqua key_default_color_effect = none used_frame_rate = 1 key_support_frame_rate = 10 key_default_frame_rate = 10 used_focus_mode = 0 key_support_focus_mode = auto,infinity,macro,fixed,continuous-video,continuous-picture key_default_focus_mode = auto used_scene_mode = 0 key_support_scene_mode = auto,portrait,landscape,night,night-portrait,theatre,beach,snow,sunset,steadyphoto,fireworks,sports,party,candlelight,barcode key_default_scene_mode = auto used_white_balance = 0 key_support_white_balance = auto,incandescent,fluorescent,warm-fluorescent,daylight,cloudy-daylight key_default_white_balance = auto used_exposure_compensation = 1 key_max_exposure_compensation = 3 key_min_exposure_compensation = -3 key_step_exposure_compensation = 1 key_default_exposure_compensation = 0 2、没有/dev/video1,只有/dev/video0 R:\wyb\wen_ov5640_r16\android\device\softwinner\astar-evb20\ueventd.sun8i.rc /dev/video0 0666 media media #/dev/video1 0666 media media 3、在init.rc(init.sun8i.rc)中加载ov5640.ko这个驱动模块。 R:\wyb\wen_ov5640_r16\android\device\softwinner\astar-evb20\init.sun8i.rc #csi module insmod /system/vendor/modules/videobuf-core.ko insmod /system/vendor/modules/videobuf-dma-contig.ko insmod /system/vendor/modules/cam_detect.ko #insmod /system/vendor/modules/actuator.ko #insmod /system/vendor/modules/ad5820_act.ko insmod /system/vendor/modules/cci.ko insmod /system/vendor/modules/vfe_os.ko insmod /system/vendor/modules/vfe_subdev.ko #insmod /system/vendor/modules/gc0307.ko #insmod /system/vendor/modules/ov2035.ko #insmod /system/vendor/modules/ov2640.ko insmod /system/vendor/modules/ov5640.ko insmod /system/vendor/modules/vfe_v4l2.ko 启动之后实际加载的摄像头的驱动模块: shell@astar-evb20:/ $ lsmod gt82x 9849 0 - Live 0x00000000 bma250 7848 0 - Live 0x00000000 sunxi_schw 12559 0 - Live 0x00000000 (O) rtl8150 9023 0 - Live 0x00000000 sunxi_keyboard 3021 0 - Live 0x00000000 sw_device 13916 0 - Live 0x00000000 vfe_v4l2 445444 1 - Live 0x00000000 ov5640 27129 0 - Live 0x00000000 vfe_subdev 4523 2 vfe_v4l2,ov5640, Live 0x00000000 vfe_os 3951 2 vfe_v4l2,vfe_subdev, Live 0x00000000 cci 21775 2 vfe_v4l2,ov5640, Live 0x00000000 videobuf_dma_contig 5567 1 vfe_v4l2, Live 0x00000000 videobuf_core 16520 2 vfe_v4l2,videobuf_dma_contig, Live 0x00000000 bcm_btlpm 7442 0 - Live 0x00000000 bcmdhd 629907 0 - Live 0x00000000 mali 209314 20 - Live 0x00000000 (O) lcd 41263 0 - Live 0x00000000 disp 992816 8 mali,lcd, Live 0x00000000 nand 282774 0 - Live 0x00000000 (O) shell@astar-evb20:/ $ 4、驱动程序:ov2640.c及其V4L2的适配层。 配置ov2640.c的编译选项,只需要修改device目录中的Makefile打开ov5640(默认打开)即可: R:\wyb\wen_ov5640_r16\lichee\linux-3.4\drivers\media\video\sunxi-vfe\device\ov5640.c R:\wyb\wen_ov5640_r16\lichee\linux-3.4\drivers\media\video\sunxi-vfe\device\Makefile obj-m += ov2640.o R:\wyb\wen_ov5640_r16\lichee\linux-3.4\drivers\media\video\sunxi-vfe\Kconfig R:\wyb\wen_ov5640_r16\lichee\linux-3.4\drivers\media\video\sunxi-vfe\Makefile 5、 R:\wyb\wen_ov5640_r16\lichee\tools\pack\chips\sun8iw5p1\configs\evb-20\sys_config.fex ;-------------------------------------------------------------------------------- ;vip (video input port) configuration ;vip_used: 0:disable 1:enable ;vip_mode: 0:sample one interface to one buffer 1:sample two interface to one buffer ;vip_dev_qty: The quantity of devices linked to capture bus ; ;vip_define_sensor_list: If you want use sensor detect function, please set vip_define_sensor_list = 1, and ; verify that file /system/etc/hawkview/sensor_list_cfg.ini is properly configured! ; ;vip_dev(x)_pos: sensor position, "rear" or "front", if vip_define_sensor_list = 1,vip_dev(x)_pos must be configured! ; ;vip_dev(x)_isp_used 0:not use isp 1:use isp ;vip_dev(x)_fmt: 0:yuv 1:bayer raw rgb ;vip_dev(x)_stby_mode: 0:not shut down power at standby 1:shut down power at standby ;vip_dev(x)_vflip: flip in vertical direction 0:disable 1:enable ;vip_dev(x)_hflip: flip in horizontal direction 0:disable 1:enable ;vip_dev(x)_iovdd: camera module io power handle string, pmu power supply ;vip_dev(x)_iovdd_vol: camera module io power voltage, pmu power supply ;vip_dev(x)_avdd: camera module analog power handle string, pmu power supply ;vip_dev(x)_avdd_vol: camera module analog power voltage, pmu power supply ;vip_dev(x)_dvdd: camera module core power handle string, pmu power supply ;vip_dev(x)_dvdd_vol: camera module core power voltage, pmu power supply ;vip_dev(x)_afvdd: camera module vcm power handle string, pmu power supply ;vip_dev(x)_afvdd_vol: camera module vcm power voltage, pmu power supply ;x indicates the index of the devices which are linked to the same capture bus ;fill voltage in uV, e.g. iovdd = 2.8V, vip_devx_iovdd_vol = 2800000 ;fill handle string as below: ;axp22_eldo3 ;axp22_dldo4 ;axp22_eldo2 ;fill handle string "" when not using any pmu power supply ;-------------------------------------------------------------------------------- [csi0] vip_used = 1 vip_mode = 0 vip_dev_qty = 1 vip_define_sensor_list = 0 vip_csi_pck = port:PE00 vip_csi_mck = port:PE01 vip_csi_hsync = port:PE02 vip_csi_vsync = port:PE03 vip_csi_d0 = port:PE04 vip_csi_d1 = port:PE05 vip_csi_d2 = port:PE06 vip_csi_d3 = port:PE07 vip_csi_d4 = port:PE08 vip_csi_d5 = port:PE09 vip_csi_d6 = port:PE10 vip_csi_d7 = port:PE11 vip_csi_sck = port:PE12 vip_csi_sda = port:PE13 vip_dev0_mname = "ov5640" vip_dev0_pos = "rear" vip_dev0_lane = 1 vip_dev0_twi_id = 2 vip_dev0_twi_addr = 0x78 vip_dev0_isp_used = 0 vip_dev0_fmt = 0 vip_dev0_stby_mode = 0 vip_dev0_vflip = 0 vip_dev0_hflip = 0 vip_dev0_iovdd = "axp22_dldo3" vip_dev0_iovdd_vol = 2800000 vip_dev0_avdd = "" vip_dev0_avdd_vol = 2800000 vip_dev0_dvdd = "" vip_dev0_dvdd_vol = 1800000 vip_dev0_afvdd = "" vip_dev0_afvdd_vol = 2800000 vip_dev0_power_en = vip_dev0_reset = port:PE14 vip_dev0_pwdn = port:PE15 vip_dev0_flash_en = vip_dev0_flash_mode = vip_dev0_af_pwdn = 6、开发板上摄像头的I2C挂载在TWI2上面了,逻辑是需要打开的(但是不打开也能够用,很奇怪!): ;---------------------------------------------------------------------------------- ;i2c configuration ; twi_used = twix enable ;---------------------------------------------------------------------------------- [twi0] twi_used = 1 twi_scl = port:PH02 twi_sda = port:PH03 [twi1] twi_used = 1 twi_scl = port:PH04 twi_sda = port:PH05 [twi2] twi_used = 0 twi_scl = port:PE12 twi_sda = port:PE13 直接配置摄像头的I2C了: vip_csi_sck = port:PE12 vip_csi_sda = port:PE13 不过奇怪的是,摄像头并没有向其它平台那样生成这个设备节点: /sys/class/i2c-adapter/i2c-2/2-0030 shell@octopus-f1:/ $ shell@octopus-f1:/ $ cd /sys/class/i2c-adapter/i2c-2/ shell@octopus-f1:/sys/class/i2c-adapter/i2c-2 $ shell@octopus-f1:/sys/class/i2c-adapter/i2c-2 $ ll drwxr-xr-x root root 1970-01-02 08:06 2-003b --w------- root root 4096 1970-01-02 08:06 delete_device lrwxrwxrwx root root 1970-01-02 08:06 device -> ../../twi.2 -r--r--r-- root root 4096 1970-01-02 08:06 name --w------- root root 4096 1970-01-02 08:06 new_device drwxr-xr-x root root 1970-01-02 08:06 power lrwxrwxrwx root root 1970-01-02 08:06 subsystem -> ../../../../bus/i2c -rw-r--r-- root root 4096 1970-01-02 08:06 uevent shell@octopus-f1:/sys/class/i2c-adapter/i2c-2 $ 可能是ov2640的驱动程序不完整,没有通过i2c_detect来注册2-003c这个节点。 直接在驱动程序中读取I2C,还是对的。device ID = 0x5640。 7、摄像头使用的是客户提供: 设置为VGA分辨率是: vsync=7.5hz href=15khz xclk=24mhz pclk=85mhz
FPGA设计实现OV5640 摄像头采集数据VGA显示输出Verilog设计逻辑Quartus工程源码文件,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module ov5640_rgb565_1024x768_vga( input sys_clk , //系统时钟 input sys_rst_n , //系统复位,低电平有效 //摄像头接口 input cam_pclk , //cmos 数据像素时钟 input cam_vsync , //cmos 场同步信号 input cam_href , //cmos 行同步信号 input [7:0] cam_data , //cmos 数据 output cam_rst_n , //cmos 复位信号,低电平有效 output cam_pwdn , //cmos 电源休眠模式选择信号 output cam_scl , //cmos SCCB_SCL线 inout cam_sda , //cmos SCCB_SDA线 //SDRAM接口 output sdram_clk , //SDRAM 时钟 output sdram_cke , //SDRAM 时钟有效 output sdram_cs_n , //SDRAM 片选 output sdram_ras_n , //SDRAM 行有效 output sdram_cas_n , //SDRAM 列有效 output sdram_we_n , //SDRAM 写有效 output [1:0] sdram_ba , //SDRAM Bank地址 output [1:0] sdram_dqm , //SDRAM 数据掩码 output [12:0] sdram_addr , //SDRAM 地址 inout [15:0] sdram_data , //SDRAM 数据 //VGA接口 output vga_hs , //行同步信号 output vga_vs , //场同步信号 output [15:0] vga_rgb //红绿蓝三原色输出 ); //parameter define parameter SLAVE_ADDR = 7'h3c ; //OV5640的器件地址7'h3c parameter BIT_CTRL = 1'b1 ; //OV5640的字节地址为16位 0:8位 1:16位 parameter CLK_FREQ = 26'd65_000_000; //i2c_dri模块的驱动时钟频率 65MHz parameter I2C_FREQ = 18'd250_000 ; //I2C的SCL时钟频率,不超过400KHz parameter CMOS_H_PIXEL = 24'd1024 ; //CMOS水平方向像素个数,用于设置SDRAM缓存大小 parameter CMOS_V_PIXEL = 24'd768 ; //CMOS垂直方向像素个数,用于设置SDRAM缓存大小 //wire define wire clk_100m ; //100mhz时钟,SDRAM操作时钟 wire clk_100m_shift ; //100mhz时
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值