使用的模块是正点原子的ov7725不带fifo的摄像头,开发板是正点原子的开拓者。


一、SCCB协议与IIC协议的不同

摄像头采用的是SCCB协议,这个协议与I2C协议很像,但是有细微的区别。差别在于

  • SCCB传输协议中,第9位为不必关心位,而IIC写传输协议位答应位
  • SCCB每次传输过程不超过3个阶段,即不能连续读写
  • SCCB读传输协议中没有重复开始的概念,在写完寄存器地址后,发起停止信号


OV7725支持不同分辨率图像的输出,包括VGA(640480)、QCVGA(320240)等。OV7725支持多种不同的数据像素格式,包括YUV(亮度参量和色度参量分开表示的像素格式)、RGB(其中RGB格式包含RGB565、RGB555)以及8位的RAW(原始图像数据)和10位的RAW。

二、OV7725图像输出时序

三、硬件接口和系统框图




四、i2c_ov7725_rgb565_cfg代码

这个模块需要跟i2c_dri模块搭配一起使用,i2c_ov7725_rgb565_cfg模块复制将参数传送给i2c_dri模块,然后由i2c_dri模块完成摄像头的配置

module i2c_ov7725_rgb565_cfg(  input                clk      ,  //时钟信号input                rst_n    ,  //复位信号,低电平有效input                i2c_done ,  //I2C寄存器配置完成信号output  reg          i2c_exec ,  //I2C触发执行信号   output  reg  [15:0]  i2c_data ,  //I2C要配置的地址与数据(高8位地址,低8位数据)output  reg          init_done   //初始化完成信号);//parameter define
parameter  REG_NUM = 7'd70   ;       //总共需要配置的寄存器个数//reg define
reg    [9:0]   start_init_cnt;       //等待延时计数器
reg    [6:0]   init_reg_cnt  ;       //寄存器配置个数计数器//*****************************************************
//**                    main code
//*****************************************************//cam_scl配置成250khz,输入的clk为1Mhz,周期为1us,1023*1us = 1.023ms
//寄存器延时配置
always @(posedge clk or negedge rst_n) beginif(!rst_n)start_init_cnt <= 10'b0;    else if((init_reg_cnt == 7'd1) && i2c_done)start_init_cnt <= 10'b0;else if(start_init_cnt < 10'd1023) beginstart_init_cnt <= start_init_cnt + 1'b1;                    end
end//寄存器配置个数计数
always @(posedge clk or negedge rst_n) beginif(!rst_n)init_reg_cnt <= 7'd0;else if(i2c_exec)   init_reg_cnt <= init_reg_cnt + 7'b1;
end         //i2c触发执行信号
always @(posedge clk or negedge rst_n) beginif(!rst_n)i2c_exec <= 1'b0;else if(start_init_cnt == 10'd1022)i2c_exec <= 1'b1;//只有刚上电和配置第一个寄存器增加延时else if(i2c_done && (init_reg_cnt != 7'd1) && (init_reg_cnt < REG_NUM))i2c_exec <= 1'b1;elsei2c_exec <= 1'b0;
end //初始化完成信号
always @(posedge clk or negedge rst_n) beginif(!rst_n)init_done <= 1'b0;else if((init_reg_cnt == REG_NUM) && i2c_done)  init_done <= 1'b1;
end        //配置寄存器地址与数据
always @(posedge clk or negedge rst_n) beginif(!rst_n)i2c_data <= 16'b0;else begincase(init_reg_cnt)//先对寄存器进行软件复位,使寄存器恢复初始值//寄存器软件复位后,需要延时1ms才能配置其它寄存器//i2c_data 高8位地址,低8位为数据7'd0  : i2c_data <= {8'h12, 8'h80}; //COM7 BIT[7]:复位所有的寄存器7'd1  : i2c_data <= {8'h3d, 8'h03}; //COM12 模拟过程直流补偿7'd2  : i2c_data <= {8'h15, 8'h00}; //COM10 href/vsync/pclk/data信号控制7'd3  : i2c_data <= {8'h17, 8'h26}; //HSTART 水平起始位置7'd4  : i2c_data <= {8'h18, 8'ha0}; //HSIZE 水平尺寸7'd5  : i2c_data <= {8'h19, 8'h07}; //VSTRT 垂直起始位置7'd6  : i2c_data <= {8'h1a, 8'hf0}; //VSIZE 垂直尺寸            7'd7  : i2c_data <= {8'h32, 8'h00}; //HREF 图像开始和尺寸控制,控制低位7'd8  : i2c_data <= {8'h29, 8'ha0}; //HOutSize 水平输出尺寸7'd9  : i2c_data <= {8'h2a, 8'h00}; //EXHCH 虚拟像素MSB7'd10 : i2c_data <= {8'h2b, 8'h00}; //EXHCL 虚拟像素LSB7'd11 : i2c_data <= {8'h2c, 8'hf0}; //VOutSize 垂直输出尺寸7'd12 : i2c_data <= {8'h0d, 8'h41}; //COM4 PLL倍频设置(multiplier)//Bit[7:6]:  0:1x 1:4x 2:6x 3:8x7'd13 : i2c_data <= {8'h11, 8'h00}; //CLKRC 内部时钟配置 //Freq=multiplier/[(CLKRC[5:0]+1)*2]7'd14 : i2c_data <= {8'h12, 8'h06}; //COM7 输出VGA RGB565格式                                     7'd15 : i2c_data <= {8'h0c, 8'h10}; //COM3 Bit[0]: 0:图像数据 1:彩条测试//DSP 控制7'd16 : i2c_data <= {8'h42, 8'h7f}; //TGT_B 黑电平校准蓝色通道目标值7'd17 : i2c_data <= {8'h4d, 8'h09}; //FixGain 模拟增益放大器7'd18 : i2c_data <= {8'h63, 8'hf0}; //AWB_Ctrl0 自动白平衡控制字节07'd19 : i2c_data <= {8'h64, 8'hff}; //DSP_Ctrl1 DSP控制字节17'd20 : i2c_data <= {8'h65, 8'h00}; //DSP_Ctrl2 DSP控制字节27'd21 : i2c_data <= {8'h66, 8'h00}; //DSP_Ctrl3 DSP控制字节37'd22 : i2c_data <= {8'h67, 8'h00}; //DSP_Ctrl4 DSP控制字节4    //AGC AEC AWB        //COM8 Bit[2]:自动增益使能 Bit[1]:自动白平衡使能 Bit[0]:自动曝光功能7'd23 : i2c_data <= {8'h13, 8'hff}; //COM8 7'd24 : i2c_data <= {8'h0f, 8'hc5}; //COM67'd25 : i2c_data <= {8'h14, 8'h11};  7'd26 : i2c_data <= {8'h22, 8'h98}; 7'd27 : i2c_data <= {8'h23, 8'h03};  7'd28 : i2c_data <= {8'h24, 8'h40}; 7'd29 : i2c_data <= {8'h25, 8'h30};  7'd30: i2c_data <= {8'h26, 8'ha1};      7'd31: i2c_data <= {8'h6b, 8'haa}; 7'd32: i2c_data <= {8'h13, 8'hff};  //matrix sharpness brightness contrast UV7'd33 : i2c_data <= {8'h90, 8'h0a}; //EDGE1 边缘增强控制1//DNSOff 降噪阈值下限,仅在自动模式下有效7'd34 : i2c_data <= {8'h91, 8'h01}; //DNSOff 7'd35 : i2c_data <= {8'h92, 8'h01}; //EDGE2 锐度(边缘增强)强度上限7'd36 : i2c_data <= {8'h93, 8'h01}; //EDGE3 锐度(边缘增强)强度下限7'd37 : i2c_data <= {8'h94, 8'h5f}; //MTX1 矩阵系数17'd38 : i2c_data <= {8'h95, 8'h53}; //MTX1 矩阵系数27'd39 : i2c_data <= {8'h96, 8'h11}; //MTX1 矩阵系数37'd40 : i2c_data <= {8'h97, 8'h1a}; //MTX1 矩阵系数47'd41 : i2c_data <= {8'h98, 8'h3d}; //MTX1 矩阵系数57'd42 : i2c_data <= {8'h99, 8'h5a}; //MTX1 矩阵系数67'd43 : i2c_data <= {8'h9a, 8'h1e}; //MTX_Ctrl 矩阵控制7'd44 : i2c_data <= {8'h9b, 8'h3f}; //BRIGHT 亮度7'd45 : i2c_data <= {8'h9c, 8'h25}; //CNST 对比度            7'd46 : i2c_data <= {8'h9e, 8'h81}; 7'd47 : i2c_data <= {8'ha6, 8'h06}; //SDE 特殊数字效果控制7'd48 : i2c_data <= {8'ha7, 8'h65}; //USAT "U"饱和增益7'd49 : i2c_data <= {8'ha8, 8'h65}; //VSAT "V"饱和增益            7'd50 : i2c_data <= {8'ha9, 8'h80}; //VSAT "V"饱和增益   7'd51 : i2c_data <= {8'haa, 8'h80}; //VSAT "V"饱和增益//伽马控制 7'd52 : i2c_data <= {8'h7e, 8'h0c}; 7'd53 : i2c_data <= {8'h7f, 8'h16}; 7'd54 : i2c_data <= {8'h80, 8'h2a}; 7'd55 : i2c_data <= {8'h81, 8'h4e}; 7'd56 : i2c_data <= {8'h82, 8'h61}; 7'd57 : i2c_data <= {8'h83, 8'h6f}; 7'd58 : i2c_data <= {8'h84, 8'h7b}; 7'd59 : i2c_data <= {8'h85, 8'h86};   7'd60 : i2c_data <= {8'h86, 8'h8e}; 7'd61 : i2c_data <= {8'h87, 8'h97}; 7'd62 : i2c_data <= {8'h88, 8'ha4}; 7'd63 : i2c_data <= {8'h89, 8'haf}; 7'd64 : i2c_data <= {8'h8a, 8'hc5}; 7'd65 : i2c_data <= {8'h8b, 8'hd7}; 7'd66 : i2c_data <= {8'h8c, 8'he8}; 7'd67 : i2c_data <= {8'h8d, 8'h20}; 7'd68 : i2c_data <= {8'h0e, 8'h65}; //COM57'd69 : i2c_data <= {8'h09, 8'h00}; //COM2  Bit[1:0] 输出电流驱动能力//只读存储器,防止在case中没有列举的情况,之前的寄存器被重复改写default:i2c_data <=  {8'h1C, 8'h7F}; //MIDH 制造商ID 高8位endcaseend
endendmodule
     ---晓凡 2022年7月于桂林书

【一、视频处理】FPGA驱动OV7725摄像头模块相关推荐

  1. STM32驱动OV7725摄像头颜色识别

    转载请注明出处:http://blog.csdn.net/hongbin_xu 或 http://hongbin96.com/ 文章链接:http://blog.csdn.net/hongbin_xu ...

  2. STM32 OV7725摄像头模块的颜色处理和简单物体识别(串口输出图片)

    目录 前言 一.摄像头采集数据流程 二.如何将图像显示到电脑上 三.图像二值化 1.什么是RGB? 2.RGB565转RGB888 I.RGB565和RGB888的区别 II.代码 3.RGB转HSL ...

  3. FPGA之OV7725摄像头采集与VGA显示实验--4--摄像头数据输出VAG协议分析

    大家好,前面几节给大家介绍了OV7725摄像头通过SCCB协议进行配置的内容,这一节我们来聊一下关于OV7725摄像头的VAG协议的知识,为后面的数据采集模块做铺垫. 学习目标 理解VGA协议传输数据 ...

  4. FPGA之OV7725摄像头采集与VGA显示实验--2--SCCB协议发送器实现(Verilog代码)

    上一节学习了OV7725的配置协议SCCB,且该协议几乎与一致,大家可能会疑惑应答位的问题,实际上SCCB协议虽说不关心,但是还是会把SDA拉低:这一节我们将讲解OV7725配置模块中SCCB发送器的 ...

  5. 【正点原子FPGA连载】第三十九章OV7725摄像头RGB-LCD显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...

  6. 【Verilog】FPGA驱动Ov7670/Ov7725搭建视频通路(RGB565、灰度图)

    一.课题功能指标要求 (一)课程目的 • 加深对数字电路时序的理解: • 掌握 OV 系列摄像头输出时序: • 掌握 I2C 总线时序,以及使用 verilog 驱动三态门的方法: • 掌握数字系统设 ...

  7. fpga摄像头模块_FPGA开源项目:双目测距(一)之双目图像采集显示以及图片保存...

    1.简述 这个项目是大三下学期暑假(也就是2019年8份)完成的,当时的视频效果已发布在bilibili上,这是我们的省级的科研立项,其实就我一个人负责完成.发布bilibili后很多人比较感兴趣,打 ...

  8. FPGA 20个例程篇:19.OV7725摄像头实时采集送HDMI显示(一)

    第七章 实战项目提升,完善简历 19.OV7725摄像头实时采集送HDMI显示(一) 在例程"OV7725摄像头实时采集送HDMI显示"中,我们将走近FPGA图像处理的世界,图像处 ...

  9. FPGA驱动FT601实现USB3.0相机 OV5640视频采集 提供2套工程源码和QT上位机源码

    目录 1.前言 2.FT601芯片解读和时序分析 FT601功能和硬件电路 FT601读时序解读 FT601写时序解读 3.我这儿的 FT601 USB3.0通信方案 4.vivado工程1--彩条视 ...

  10. FPGA驱动FT601实现USB3.0相机HDMI视频采集 提供工程源码和QT上位机源码

    目录 1.前言 2.FT601芯片解读和时序分析 FT601功能和硬件电路 FT601读时序解读 FT601写时序解读 3.我这儿的 FT601 USB3.0通信方案 4.详细设计方案 5.vivad ...

最新文章

  1. 我是如何有效的避免测试漏测?
  2. 使用Mybatis的Generator可能导致的一个错误
  3. centos mysql下载64位_CentOS7 64位安装mysql教程
  4. OpenJudge计算概论-字符串排序
  5. python存文件代码_Python文件读写保存操作的示例代码
  6. 骁龙710、675、660、636之间性能差距有多大?
  7. IDEA快捷键的使用
  8. 在线投稿审稿管理系统mysql_某期刊在线投稿审稿管理系统.doc
  9. 卸载Windows的引导界面中的变色龙选项
  10. [古文观止]《相州昼锦堂记》(宋·欧阳修)
  11. 马斯克航天新壮举:用1分38秒炸毁火箭,实现载人舱逃逸
  12. 想要内推字节跳动的同学看过来(含内推方式)
  13. int? 是什么类型?和int有何区别
  14. 秒云获得阿里云首批产品生态集成认证,携手阿里云共建云原生智能运维生态服务
  15. 一叶知秋,很多IT“专家”其实都只是“砖家”
  16. 用C#编写一个图片浏览器,实现鼠标控制图片的平移缩放与图片的灰度化
  17. Oracle19c数据库下载及安装步骤(详细)以及连接Navicat和PLSql
  18. LruCache的深入解析
  19. 用Mahout构建职位推荐引擎
  20. 存储性能指标--iops

热门文章

  1. editplus java快捷键_常用editplus快捷键大全
  2. 声卡接口Line in、Line out、Mic in和Speak out
  3. Tableau-堆积图
  4. Tomcat的中文乱码设置
  5. java JButton计算器布局
  6. 前端学习笔记之品优购项目(一) 3.15
  7. VC++数据库应用开发
  8. springboot 整合腾讯云短信
  9. mac自带的词典不能用
  10. uniapp 解决切换横竖屏后内容错乱的问题