FPGA之旅设计99例之第十八例----OV5640摄像头SCCB时序

简介: 笔记

一. 简介


从本例开始,接下来的几例,都将围绕OV5640摄像头来学习,教大家学会,如何通过OV5640摄像头,采集图像,并且显示在VGA显示屏上。


本例将简要地介绍一下OV5640摄像头,如何详细讲解一下SCCB接口,该接口主要用于配置OV5640,闲话不多说。


下一篇将介绍 OV5640寄存器


二. 认识OV5640摄像头


先简单了解一下OV5640的设计框图,对其内部架构有个大致的原理,图中可以看到 图像输出接口支持 DVP和 MIPI两种接口,具体使用那种,可以根据自己的需求进行选择,本例程使用的是DVP接口的,黑金的那款。

10.png



再来看看整体的引脚接口,整体接口图如下,下面一一介绍


CMOS_SCL 和 CMOS_SDA : 实际上就是SCCB接口的SIO_C和SIO_D,由于SCCB和IIC接口十分相似,只有一个位置的细微差别,所以经常就会叫做SCL和SDA。


D0-D7: 图像数据输出引脚,一共8位,从框图中可以看出,其实是有10位的,那另外两位那去了呢?查看摄像头的外部电路原理图得知,10位中的低两位没有引出来。


CMOS_PCLK: 从框图中可以看出,这个时钟是摄像头输出的,用于和D0-D7以及VSYNC同步,也就是说外部采集数据是以PCLK为标准时钟的。


CMOS_XCLK: 从框图中可以看出,这个时钟是外部输入的,用于为摄像头提供时钟。


CMOS_VSYNC: 摄像头输出信号,在每一帧图像输出开始之前,都会拉高一定的时间,用于帧同步。


CMOS_HREF: 摄像头输出信号,拉高,表示D0-D7输出数据有效。


CMOS_RESET: 复位信号,默认为高电平,拉低时间持续1ms以上进行复位,清除OV5640摄像头内部寄存器的所有值为默认值。


CMOS_PWDN: 掉电使能信号,外部输入,高电平有效,正常工作是,应设置为低电平。

11.png



最后,看一下OV5640输出的图像格式,实际输出的图像大小是可以调整的,通过配置寄存器。


12.png


到这里算是对OV5640有了一个初步的了解。下面将介绍SCCB时序。


三. SCCB时序


SCCB时序,与IIC是非常类似的,如果不涉及到读操作的话,可以说是一样的,配置寄存器的时候,主要涉及到的是写操作,一般读操作用于验证是否成功写入寄存器。


(1)写操作

既然写和IIC一样,那直接上图,第一步写器件的地址,第二步写寄存器的地址,第三步写寄存器的值。


其中器件地址为7bit,寄存器的地址为16bit,寄存器的值为8bit。所以配置一个寄存器,一共需要发送8*4(32)bit数据。

13.png



从下图可以看出,与IIC的一个区别,就是在应答位的时候,图中是用X表示的,也就是说不关心这一位,为0或1都可以。而IIC的应答是为0的,这是一个需要注意的点。

14.png



(2)读操作

读操作如下


起始信号 + 器件地址写 +应答+ 寄存器地址+应答 + 停止信号 + 起始信号 + 器件地址读 + 应答 + 读数据 +应答 + 停止位


对比IIC而言(IIC可有可无),其中多了个停止信号,这个是非常重要的,容易被忽视。一般而言,IIC读操作的时候,是不会加这个停止信号的。这一点通过手册上可以看到。

15.png



对IIC时序不清楚的朋友,可以参考博客第五例,或者其它教程。到这里SCCB接口的具体过程就分享到这里了。


四. SCCB代码实现


SCCB相较于IIC而言,是简单了的。


模块的接口信号如下,还是比较容易的。


实现方法和之前的例程IIC类似,也略有区别。主要在写操作时的第二次发送从机地址的判断部分。感兴趣的可以参考对比。


欢迎关注微信公众号 FPGA之旅 回复 FPGA之旅设计99例之第十八例 获取完整代码以及OV5640数据手册


SCCB_Interfacec (
    input           sys_clk,        //系统时钟
    input           rst_n,          //复位
    //SCCB接口
    output   reg    SIO_C,
    inout           SIO_D,
    //读写相关数据
    input[6:0]      Slave_addr,             //从机地址,摄像头地址
    input[15:0]     register_addr,          //寄存器地址
    input[7:0]      write_value,            //写入寄存器的值
    output[7:0]     read_value,             //从寄存器读出的值
    //写接口
    input           Slave_write_req,
    output          Slave_write_ack,
    //读接口
    input           Slave_read_req,
    output          Slave_read_ack
);

16.png

读操作仿真图如上

公众号:FPGA之旅



目录
相关文章
|
3月前
|
异构计算
FPGA入门(4):时序逻辑(二)
FPGA入门(4):时序逻辑(二)
30 0
|
3月前
|
存储 异构计算
FPGA入门(4):时序逻辑(一)
FPGA入门(4):时序逻辑
37 0
|
5月前
|
机器学习/深度学习 算法 异构计算
m基于FPGA的多通道FIR滤波器verilog实现,包含testbench测试文件
本文介绍了使用VIVADO 2019.2仿真的多通道FIR滤波器设计。展示了系统RTL结构图,并简述了FIR滤波器的基本理论,包括单通道和多通道的概念、常见结构及设计方法,如窗函数法、频率采样法、优化算法和机器学习方法。此外,还提供了Verilog核心程序代码,用于实现4通道滤波器模块,包含时钟、复位信号及输入输出接口的定义。
143 7