OV5640_top中的i2c_ctrl代码结合仿真波形理解

这篇具有很好参考价值的文章主要介绍了OV5640_top中的i2c_ctrl代码结合仿真波形理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发

OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发

系统上电后,状态机处于 IDLE(初始状态);

接收到有效的单字节数据读/写开始信号i2c_start 后,状态机跳转到 START_1(起始状态);

FPGA 向 EEPROM 存储芯片发送起始信号,随后状态机跳转到 SEND_D_ADDR(发送器件地址状态);

在此状态下向 EEPROM 存 储芯片写入控制指令,控制指令高 7 位为器件地址,最低位为读写控制字,写入“0”,表 示执行写操作;控制指令写入完毕后,状态机跳转到 ACK_1(应答状态)。

在 ACK_1(应答状态)状态下,要根据存储地址字节数进行不同状态的跳转。 情况一:当 FPGA 接收到 EEPROM 回 传 的 应 答 信 号 且 存 储 地 址 字 节 为 2 字 节 , 状 态 机 跳 转 到SEND_B_ADDR_H(发送高字节地址状态);将存储地址的高 8 位写入 EEPROM,写入完成后,状态机跳转到 ACK_2(应答状态);FPGA 接收到应答信号后,状态机跳转到SEND_B_ADDR_L(发送低字节地址状态); 情况二:当 FPGA 接收到 EEPROM 回传的应答信号且存储地址字节为 单字节,状态机状态机直接跳转到 SEND_B_ADDR_L(发送低字节地址状态);在SEND_B_ADDR_L此状态低 8 位存储地址或单字节存储地址写入完成后,状态机跳转到 ACK_3(应答状态)。
在 ACK_3(应答状态)状态下,要根据读/写使能信号做不同的状态跳转。 情况一:当 FPGA 接收
到应答信号且 写使能信号有效,状态机跳转到 WR_DATA(写数据状态);在写数据状态, 向EEPROM 写入单字节数据后,状态机跳转到 ACK_4(应答状态);待 FPGA 接收到有效应答信号后,状态机跳转到 STOP(停止状态); 情况二:当 FPGA 接收到应答信号且 读使能信号有效, 状态机跳转到 START_2(起始状态);再次向 EEPROM 写入起始信号,状态跳转到SEND_RD_ADDR(发送读控制状态);再次向 EEPROM 写入控制字节,高 7 位器件地址不变,读写控制位写入“1”,表示进行读操作,控制字节写入完毕后,状态机跳转到 ACK_5(应答状态);待 FPGA 接收到有效应答信号后,状态机跳转到 RD_DATA(读数据状态);在 RD_DATA(读数据状态)状态,EEPROM 向 FPGA 发送存储地址对应存储单元下的单字节数据,待数据读取完成户,状态机跳转到 N_ACK(无应答状态),在此状态下向 EEPROM 写入一个时钟的高电平,表示数据读取完成,随后状态机跳转到 STOP(停止状态)。
在 STOP(停止状态)状态,FPGA 向 EEPROM 发送停止信号,一次单字节数据读/写操作完成,随后状态机跳回 IDLE(初始状态),等待下一次单字节数据读/写开始信号 i2c_start。
OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发

OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发

注:对 EERPROM 的数据读写操作均使用单字节读/写操作,即每次操作只读/写单字
节数据;若想要实现数据的连续读/写,可持续拉高读/写使能 rd_en/wr_en,并输入有效的
单字节数据读/写开始信号 i2c_start 即可。

 OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发

OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发

OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发

OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发

下面讲一下配置寄存器的步骤: ov5640的每个寄存器配置之前都要先写入8位器件地址0X78,然后再写入高低16位寄存器地址,再写入8位数据值

前面第1-2红线之间的state=2在SEND_D_ADDR状态表示要写入器件地址,i2c_sda的0111_1000表示ov5640的器件地址0X78;  

第2-3条红线之间的state=3在ACK_1应答状态; 

第3-4和第5-6条红线总共表示写入第一个寄存器地址3103;其中第3-4条红线之间的state=4在SEND_B_ADDR_H状态表示要写ACK入寄存器地址高8位,i2c_sda的0011_0001表示0X31;第4-5条红线之间的state=5在ACK_2应答状态;第5-6条红线之间的state=6在SEND_B_ADDR_L状态表示要写入寄存器地址低8位,i2c_sda的0000_0011表示0X03;第6-7条红线之间的state=7在ACK_3应答状态; 

第7-8条红线之间的state=8在WR_DATA状态表示要写入第一个寄存器的数据值,i2c_sda的0001_0001表示写入的数据值是0x11;  

OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发

第8-9条红线之间的state=9在ACK_4应答状态;

在9-10条红线之间的state=f在STOP结束状态;此后i2c_end拉高了一个时钟周期表示一个寄存器配置完成。

OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发

每个寄存器配置都是从i2c_start开始,到i2c_end结束的(即两条黄线之间:从state=1~9,再到STOP结束状态f)

OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发

OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发 OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发

本身ov5640的器件地址是0X78(即0111_1000)。但是野火写的器件地址是0X3c(即0011_1100), 但是在i2c_sda_reg的8位SEND_D_ADDR地址中,用cnt_bit计数8个,在前7个写入的是器件地址0X3c(取低位的7个数011_1100),最后一个是读写控制字0(0表示写),合起来也是0X78(即0111_1000)。

OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发

写使能有效,读使能无效(即只是写入了ov5640的寄存器地址和数据值,但不读出),所以只有左边圈住的状态需要操作,右边的没圈住的状态不用管。OV5640_top中的i2c_ctrl代码结合仿真波形理解,fpga开发文章来源地址https://www.toymoban.com/news/detail-828800.html

到了这里,关于OV5640_top中的i2c_ctrl代码结合仿真波形理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OV5640像素时钟的计算方法

    按照配置表中380c、380d、380e、380f计算。 这里如果将分辨率设置为1280*720,加上无效的像素行列 配置表中,加上无效行像素16进制为:0764(H),转换为十进制为1892,也就是总行数为1892行 加上无效列像素16进制为:02e4(H),转换为十进制为740,也就是总列数为740 这里配置O

    2024年02月11日
    浏览(36)
  • stm32中的i2c协议

    协议通讯图 I2C上一个总线能挂载多个设备共用信号线,可以连接多个从机 只用了两个总线,一条双向串行数据线(SDA),一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。 每个连接到总线的设备都有独立的地址,主机可以通过该地址进行访问 I2C空闲

    2024年01月22日
    浏览(54)
  • 【FPGA】摄像头模块OV5640

    开发板:正点原子的达芬奇开发板(或MicroPhase的Z7-Lite 7020开发板) FPGA型号:XC7A35TFGG484-2(或XC7Z020CLG400-2) Vivado版本:2020.2 参考课程链接:正点原子手把手教你学FPGA-基于达芬奇开发板 A7 OV5640模块:正点原子ATK-OV5640   OV5640是OV(OMNIVISION)公司设计的一款CMOS图像传感器,

    2024年03月21日
    浏览(49)
  • FPGA 以太网传输ov5640视频

    使用 DFZU4EV MPSoC 开发板及双目 OV5640 摄像头其中一个摄像头实现图像采集,并通过开发板上的以太网接口发送给上位机实时显示。 时钟模块用于为 I2C 驱动模块、以太网顶层模块和开始传输控制模块提供驱动时钟;I2C 驱动模块和 I2C 配置模块用于初始化 OV5640 图像传感器;摄像

    2024年04月10日
    浏览(53)
  • ov5640分辨率调整傻瓜攻略【verilog版】

    某verilog菜狗最近开始研究摄像头了,查了很多资料说的都太高级了,这里记录一下一些非常简单的傻瓜都能看懂的ov5640调整分辨率的方式 在你的代码中找到如下字段(长得差不多就行),主要是看后面的24位数据。 在这24位数据里面,其中 前16位 为你需要调整的参数的地址

    2024年02月06日
    浏览(49)
  • 通过stm32cubemx配置DCMI驱动ov5640摄像头

    打开stm32cubemx选择芯片 选择外部时钟源 选择debug方式 配置dcmi   打开dma 打开dcmi中断 选择合适的io 设置reset、pwdn、scl、sda引脚,注意scl和sda设置为开漏输出,之前参考别人的设置为推挽输出,导致一直没有成功,不知道什么原因  配置时钟 配置项目 最后生成代码 系统初始化

    2024年02月13日
    浏览(51)
  • OV5640 摄像头的图像拉普拉斯锐化处理和边缘提取

    如图所示,这是整个视频采集系统的原理框图。         上电初始,FPGA 需要通过 IIC 接口对 CMOS Sensor 进行寄存器初始化配置。这些初始化的基本参数,即初始化地址对应的初始化数据都存储在一个预先配置好的 FPGA 片内 ROM中。在初始化配置完成后,CMOS Sensor 就能够持续

    2024年02月01日
    浏览(53)
  • 基于ZYNQ的OV5640摄像头的sobel算子边缘检测

    最近鸽了挺久的,因为最近要做课设,再加上被这个工程的调试给难到了。 在做该工程的时候,有一个良好的项目管理习惯会让开发的时候不会让人那么的高血压。 特别要注意的是,异步FIFO的读写时钟的速率匹配问题,这个问题卡了我好久。 Sobel 算法是像素图像边缘检测中

    2024年01月20日
    浏览(41)
  • STM32F030硬件I2C代码及解析

    刚接触STM32的时候,第一个学习的就是I2C,当时去网上学习别人写得I2C代码,虽然能用,但是当时并不理解为什么要这么配置,特别希望有人把代码掰碎了讲讲看,今天突然想起来,就把以前写的I2C代码拿出来掰碎了捋捋,希望对新手有些帮助。 先说说STM32的I2C: ST的M3系列还

    2024年02月08日
    浏览(45)
  • MIPI摄像头工程=7系列FPGA + OV5640(MIPI) + 15 分钟 + VITIS

    硬件 Spartan-7 SP701 FPGA 7系列FPGA+电阻网络实现的MIPI接口 OV5640 MIPI接口 软件 AMD Vivado 2020 版本以上 AMD Vitis 2020 MIPI 接口现在非常流行,国产FPGA目前基本都带MIPI接口,而AMD-Xilinx是从U+系列开始支持MIPI电平,从国内使用情况来看,7系列FPGA是使用最广的器件,所以这次使用的FPGA是

    2024年02月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包