微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 摄像头接口测试

摄像头接口测试

时间:10-02 整理:3721RD 点击:

1. 本次使用的摄像头为 淘宝买的模块。美光的CMOS摄像头MT9D111。这个芯片用起来不是很难。所有的处理功能、内存以及与镜头的接口都集成在一个单传感器处理芯片上。应该是SOC之类。


2. 引脚图如下:有一个I2C总线,同步时钟,场和行的同步信号,一个8位的并行数据口。


3. 我们首先需要初始化1个ROM区域,以后会用到,一般在ALTERA器件里面,我之前用过Mif格式的文件用来保存一张图片的信息。记得以前用的时候,需要先把gif文件用C++程序生成 mif 文件。其实mif不太好写,尤其数据量大的时候。
初始化需要quartus 工具。新建文件 内存初始化文件
  


按照基本的流程创建完毕。
4. 接下来需要配置个IP核 ,这个IP核用来管理ROM。在tool-  megawizard plug in manager 里面
找到我们需要用到的IP核
  


然后在接下来的步骤中找到 “mem init‘’选项找到我们刚才创建的mif文件。
到summery界面,找到我们的 v文件,把这个例化文件拷贝到我们的例程。
5. FIFO配置
本次需要创建3个 FIFO,video 使用的(视频时域变换),DDR内存使用的,读写SDRAM使用的。
创建FIFO用到quqrtus工具。
video 使用的(视频时域变换)  注意下面和之前的IP核创建一样的,只是这次选的是FIFO。


接下来选择FIFO的深度和宽度,深度512,宽度8,就是这个FIFO可以存储 512个字节的数据。剩下2个FIFO基本一样配置。


6. 我们这次代码主要是摄像头部分,接口有I2C接口,8位并口
   由于代码比较多,主要说下接口定义,关于内部实现可能篇幅太大了。
  下面是I2C接口的部分。
   //MAX9526低功耗视频解码器将NTSC或PAL复合视频信号转换成8位或10位YCbCr分量视频
   module iic_ctrl(
                                clk,rst_n,
                                tiic_en,tiic_ab,tiic_db,
                                scl,sda
                        );
input clk;                        // 50MHz主时钟
input rst_n;                //低电平复位信号
input tiic_en;                //需要通过IIC接口配置MAX9526使能信号,高电平有效
input[7:0] tiic_ab;        //需要通过IIC接口配置MAX9526地址
input[15:0] tiic_db;        //需要通过IIC接口配置MAX9526数据       
output scl;        //串行配置IIC时钟信号
inout sda;        //串行配置IIC数据信号

//下面是8位并口的数据
module video_ctrl(
                                clk,rst_n,
                                vpclk,vvsync,vhref,vdb,
                                wrf_din,wrf_wrreq
                        );
input clk;                        //系统时钟,25MHz
input rst_n;                //复位信号,低电平有效
        //视频输入接口
input vpclk;                //视频时钟
input vvsync;                //视频场同步信号
input vhref;                //视频行同步信号
input[7:0] vdb;        //视频数据总线
        //wrFIFO输入控制接口
output[15:0] wrf_din;                //sdram数据写入缓存FIFO输入数据总线
output wrf_wrreq;                        //sdram数据写入缓存FIFO数据输入请求,高有效

7. 摄像头数据保存在哪里? 读到的数据会暂时保存在这个队列里面缓冲,然后再把数据全部写到SDRAM里面。
video_fifo         uut_videofifo(
                                .aclr(v_clr),
                                .data(vdb),
                                .rdclk(clk),
                                .rdreq(vf_rdreq),
                                .wrclk(vpclk),
                                .wrreq(vhref),
                                .q({wrf_din[7:0],wrf_din[15:8]}),        //input first--LSB,input second--MSB
                                .rdusedw(vf_rduse)
                                );       
8. 总结,本次很多参考了特权的资料,因为我以前也没搞过,借此机会学习一下。
   目前我只有摄像头,只是把摄像头数据可以保存下来,通过quartus工具查看有没有数据,因为目前还没接LCD,这    是下一步的计划。
   这次收获很大,流程搞懂,代码也熟悉起来了。有时间我会把怎么查看数据截下图。

话说你这样创建的文件,怎么往xilinx的vivado上移植。

我就不懂了,你quartus 和XILINX也能搞在一起。唬人的吧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top