FPGA之旅设计99例之第十九例----OV5640上电及初始化

简介: 笔记

一. 简介


在上例中,介绍了配置OV5640所需的SCCB时序,以及具体的实现。本例将介绍与初始化相关的重要寄存器,以及上电时序。


OV5640的寄存器非常多,从它的寄存器的地址为16bit就可以看出,在商家提供的一些例程中,可以看到配置寄存器的语句多达200行,无法一时间学习掌握所有的寄存器。所以只需要掌握一些重要即可,例如控制图像输出格式、控制图像输出大小、控制图像输出帧率的寄存器。下面就开始介绍吧


完整程序关注微信公众号 FPGA之旅 回复 FPGA之旅设计99例之第十九例 获取下载链接


二. 重要寄存器讲解


一般来说,只需要了解三大类寄存器即可 : 时钟PCLK输出频率寄存器 , 图像输出大小寄存器 , 图像输出格式寄存器


(1). 时钟PCLK输出频率寄存器

PCLK时钟主要由0x3035 - 0x3037三个寄存器控制(其余寄存器也有,可以不看),详情如下,一般来说完整的配置参数会给你配置到48MHz / 84MHz,如果想要配置成其他的频率,可以调整0x3036寄存器的值即可。具体是怎么对应的话,手册上好像没有给出。

25.png



(2). 图像输出大小寄存器

这部分比较关键,同时也比较容易,看下面这张图片即可,physical pixel size为物理感光的尺寸,也就是摄像头能够感光的大小。ISP input size为图像处理单元输入的大小,由物理感光的尺寸经过一定的处理,输入进ISP进行处理,data output size 为实际摄像头输出的像素大小,为经过ISP进行处理缩放之后的图像数据。


在实际使用的过程中,只需要关心data output size的大小即可。即只需要配置0x3808-0x3809 和0x380a-0x380b四个寄存器即可。

26.png



另外,有四个寄存器也是需要关注的,0x380c-0x380f,这四个寄存器分别配置水平输出的像素总个数,以及竖直输出像素的总个数,这个配置要比data output size要大,和VGA的行列消影类似


27.png

(3). 图像输出格式寄存器

这个配置只需要配置0x4300寄存器即可,类别比较多,可以自行查看手册。


以上需要关注的寄存器,都是在其他寄存器配置好的前提下,然后进行修改。完整的寄存器配置可以去正点原子或者GitHub上copy,本例使用的是在GitHub上copy下来的。


三. 上电时序讲解


这部分在手册中以给出,通过下图,可以看出,还是比较容易的。初始化时序只需要看到t4结束,后面就不要管了,后面是掉电时序。


第一步. 上电后,将PWDN拉高,RESETB拉低


第二步. 延时大于等于t2(5ms)时间后,将PWDN拉低,并且一直保持


第三步. 在延时大于等于t3(1ms)时间后,将RESETB拉高,将PWDN拉低,并且一直保持


第四步.最后延时t4(20ms),完成上电


完成上电后,即可开始SCCB对寄存器进行初始化

28.png



四. 程序介绍


程序主要包括三个部分,上电时序,然后是寄存器初始化,最后就是接收图像数据了。这部分比较容易,就不做介绍了。


always@(*)
begin
    case(state)
    S_POWER_UP:
        if( ov5640_powerup_ack == 1'b1 )
            next_state <= S_INIT;
        else
            next_state <= S_POWER_UP;
    S_INIT:
        if( ov5640_init_ack == 1'b1 )
            next_state <= S_WORK;
        else
            next_state <= S_INIT;
    S_WORK:
        next_state <= S_WORK;
    default : next_state <= S_POWER_UP;
    endcase
end


最终ov5640配置为640 x 480 大小的输出,通过逻辑分析仪可以看到每一行输出1280个数据,也就是640个像素点(每次输出8bit,两种时钟输出一个完整的RGB565数据)。

29.png



完整程序关注微信公众号 FPGA之旅 回复 FPGA之旅设计99例之第十九例 获取下载链接,最终将图像显示在VGA显示器上,没有经过存储,仅测试使用,后期将加上SDRAM或者DDR存储器。

公众号:FPGA之旅

目录
相关文章
|
13天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的16QAM调制+软解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本项目基于FPGA实现了16QAM基带通信系统,包括调制、信道仿真、解调及误码率统计模块。通过Vivado2019.2仿真,设置不同SNR(如8dB、12dB),验证了软解调相较于传统16QAM系统的优越性,误码率显著降低。系统采用Verilog语言编写,详细介绍了16QAM软解调的原理及实现步骤,适用于高性能数据传输场景。
113 69
|
17天前
|
移动开发 算法 数据安全/隐私保护
基于FPGA的QPSK调制+软解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的QPSK调制解调系统,通过Vivado 2019.2进行仿真,展示了在不同信噪比(SNR=1dB, 5dB, 10dB)下的仿真效果。与普通QPSK系统相比,该系统的软解调技术显著降低了误码率。文章还详细阐述了QPSK调制的基本原理、信号采样、判决、解调及软解调的实现过程,并提供了Verilog核心程序代码。
53 26