Zynq开发-使用PYNQ快速入门摄像头MIPI驱动(OV5640)-overlay设计

目录

1. 简介

2. Overlay 设计

2.1 总体设计

2.2 MIPI 子系统

2.3 去马赛克

2.4 AXI_IIC

3. 注意事项

4. 总结


1. 简介

本文是关于《Zynq开发-使用PYNQ快速入门摄像头MIPI驱动(OV5640)-CSDN博客》的博客文章,涉及了overlay设计的Vivado工程细节。在使用PYNQ调试MIPI驱动之前,需要搭建一些基本的IP核。这个过程并不复杂,因为Xilinx已经提供了相当完善的IP核体系。

Vivado 对应版本:2022.1

摄像头型号:Digilent Pcam 5C

开发板型号:KV260

2. Overlay 设计

2.1 总体设计

本文提供了附带PDF文件,请参阅附件资源。文章通过一个简单的工程示例,演示了如何成功运行MIPI驱动的完整链路。

构建完整的工程需要将bit文件和hwh文件一并拷贝至PYNQ环境中,并使用overlay进行加载。

加载过程同样非常简单:

from pynq import Overlay
ol = Overlay("your.bit")

关于HWH的解释:
HWH(Hardware Handoff)是硬件托管文件,是一种包含硬件设计详细信息的文件。它由Vivado在生成比特流文件时自动生成。HWH文件采用XML格式,包含设计中使用的IP核、接口、层次结构、时钟、中断等相关信息。

2.2 MIPI 子系统

从 Block Design 中IP接口来看,mipi子系统的连接方式非常简单,其实 MIPI CSI-2 Rx Subsystem 是包含三个主要的 IP Core:

  • MIPI PHY,物理层,负责处理物理层面的MIPI接口,将MIPI协议中的电信号转换为逻辑信号,并将其传递给接收端。
  • MIPI CSI-2 Rx Controller,CSI-2 接收控制器,是MIPI CSI-2接收子系统的核心部分。它接收来自MIPI PHY的数据流,并解析其中的CSI-2协议,提取出图像数据和控制信息。
  • Video Format Bridge,视频格式桥接器,将从MIPI CSI-2 Rx Controller接收到的图像数据流转换为特定的视频格式,以便后续的处理或显示。

创建该 IP 的 TCL 命令如下:

  # Create instance: mipi_csi2_rx_subsyst_0, and set properties
  set mipi_csi2_rx_subsyst_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:mipi_csi2_rx_subsystem:5.1 mipi_csi2_rx_subsyst_0 ]
  set_property -dict [ list \
   CONFIG.CLK_LANE_IO_LOC {D7} \
   CONFIG.CLK_LANE_IO_LOC_NAME {IO_L13P_T2L_N0_GC_QBC_66} \
   CONFIG.CMN_NUM_LANES {2} \
   CONFIG.CMN_PXL_FORMAT {RAW10} \
   CONFIG.CSI_EMB_NON_IMG {false} \
   CONFIG.C_CLK_LANE_IO_POSITION {26} \
   CONFIG.C_CSI_EN_ACTIVELANES {true} \
   CONFIG.C_CSI_FILTER_USERDATATYPE {false} \
   CONFIG.C_DATA_LANE0_IO_POSITION {28} \
   CONFIG.C_DATA_LANE1_IO_POSITION {30} \
   CONFIG.C_DPHY_LANES {2} \
   CONFIG.C_EN_BG0_PIN0 {false} \
   CONFIG.C_EN_BG1_PIN0 {false} \
   CONFIG.C_EN_CSI_V2_0 {true} \
   CONFIG.C_EN_TIMEOUT_REGS {false} \
   CONFIG.C_HS_LINE_RATE {672} \
   CONFIG.C_HS_SETTLE_NS {149} \
   CONFIG.DATA_LANE0_IO_LOC {E5} \
   CONFIG.DATA_LANE0_IO_LOC_NAME {IO_L14P_T2L_N2_GC_66} \
   CONFIG.DATA_LANE1_IO_LOC {G6} \
   CONFIG.DATA_LANE1_IO_LOC_NAME {IO_L15P_T2L_N4_AD11P_66} \
   CONFIG.DPHYRX_BOARD_INTERFACE {som240_1_connector_mipi_csi_raspi} \
   CONFIG.DPY_EN_REG_IF {true} \
   CONFIG.DPY_LINE_RATE {672} \
   CONFIG.HP_IO_BANK_SELECTION {66} \
   CONFIG.SupportLevel {1} \
   CONFIG.VFB_TU_WIDTH {96} \
 ] $mipi_csi2_rx_subsyst_0

2.3 去马赛克

去马赛克模块的驱动如下:

WIDTH = 1280
HEIGHT = 720

demo = ol.v_demosaic_0
demo.write(0x10,WIDTH)
demo.write(0x18,HEIGHT)
demo.write(0x28,0x03)
demo.write(0x00,0x81)

OV5640摄像头是包含去马赛克功能的,本文并没有使用,因为后续文中会在此基础上,添加图像处理 IP Cores。本文的重点也是放在 MIPI 驱动上。

2.4 AXI_IIC

  # Create instance: axi_iic_0, and set properties
  set axi_iic_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_iic:2.1 axi_iic_0 ]
  set_property -dict [ list \
   CONFIG.IIC_BOARD_INTERFACE {som240_1_connector_hda_iic_switch} \
   CONFIG.IIC_FREQ_KHZ {400} \
 ] $axi_iic_0

按照 TCL 代码调用 AXI IIC IP Core 即可,需要设置的参数很少。

3. 注意事项

  • IIC接口速度需要设置为 400 kHz,如果使用默认 100 kHz,会出现操作IIC接口卡死的情况。
  • 在摄像头原理图中《pcam_5c_sch.pdf》,提到传感器的地址为0x78,但实际中使用IIC扫描硬件设备时发现地址是0x3C。这似乎存在一些混淆,但实际上并不矛盾。0x78是一个包含读写位的地址,而0x3C则是去除了读写位后的地址。因此,0v5640的地址应当是0x78/0x79,其中0x78是写入地址,而0x79是读取地址。

  •  中断控制器的连接方式很重要,即使没有用到中断,不然 PYNQ 会报告无法找到中断。通常的做法使用 Concat 将几个中断合并,然后使用 AXI Interrupt Controller 将其连接到 Zynq 的中断输入。

 

4. 总结

本文分享了如何利用PYNQ快速入门摄像头MIPI驱动(OV5640)的过程。通过Vivado设计的overlay,演示了MIPI驱动的完整链路。文章着重介绍了MIPI子系统的构建,包括MIPI PHY、MIPI CSI-2 Rx Controller和Video Format Bridge的设置。另外,还介绍了去马赛克模块的驱动和AXI_IIC的配置。文章指出了一些注意事项,如IIC接口速度的设置、传感器地址的解释以及中断控制器的连接方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/619090.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iZotope RX 11 for Mac 激活版:让您的音频焕发生机!

在追求音频完美的道路上,iZotope RX 11 for Mac是您的得力助手。它凭借先进的音频修复技术和丰富的音频增强工具,让您的音频作品焕发出前所未有的生机与活力。无论您是专业的音频工程师,还是业余的音乐爱好者,都能在这款工具中找到…

【Spring】验证 @ServerEndpoint 的类成员变量线程安全

文章目录 前言猜想来源验证方法Controller 的情况ServerEndpoint 的情况 后记 前言 最近有 websocket 的需求。探索 ServerEndpoint 的类成员变量特点。 这里类比 Controller 讨论 ServerEndpoint 类成员变量是否线程安全。 猜想来源 网上的教程大多数都这么展示程序&#…

OBS插件--音频采集

音频采集 音频采集是一款 源 插件,类似于OBS的win-capture/game-capture,允许从特定应用程序捕获音频,而不是捕获整个系统的音频。避免了因为特定音频的采集而需要引入第三方软件,而且时延也非常低。 下面截图演示下操作步骤: 首…

HCIP-Datacom-ARST自选题库_06_排障【28道题】

一、单选题 1.如果面对复杂的网络故障,并经过评估认为短时间内无法完成排障,而此时用户又急需恢复网络的可用性,那么正确的做法是? 告诉用户这是不可能实现的 不通知客户的情况下,直接搭建替代的网络环境 始终尝试排除故障&a…

前端AJAX与后台交互技术知识点及案例(续2)

以下笔记均为学习哔站黑马程序员AJAX视频所得!!! AJAX作用:浏览器和服务器之间通信,动态数据交互 axios函数 先引入axios库,可在bootcdn中寻找相关js文件或者对应的script标签 axios({url:http://hmajax…

最大子矩阵:前缀和、动态规划

最近在学习动态规划,在牛客上刷题时碰到了这一题。其实最初的想法是暴力和前缀和,但是时间复杂度极高,需要套4层循环。后来去网上搜了一下相关的题解和做法,进而了解到了前缀和+线性动态规划的做法。但是在成功做出这题…

【爬虫基础1.1课】——requests模块上

目录索引 requests模块的作用:实例引入: 特殊情况:锦囊1:锦囊2: 这一个栏目,我会给出我从零开始学习爬虫的全过程。感兴趣的小伙伴可以关注一波,用于复习和新学都是不错的选择。 那么废话不多说&#xff0c…

接搭建仿美团、代付系统源码搭建教程

最近很多粉丝催更、分享一下地球号:xiaobao0214520(WX) 现在大家都很流行搞网恋,我们搭建一个跟美团相似的系统 然后开发一个好友代付,我们在点单的时候转发链接让网恋对象付钱 若只是单点外卖的话,能榨出的油水还是太少。 所以…

Redis的数据淘汰策略——Java全栈知识(19)

Redis的数据淘汰策略 什么是数据淘汰策略 数据过期策略是 redis 中设置了 TTL 的数据过期的时候 Redis 的处理策略。数据淘汰策略是 Redis 内存不够的时候, 数据的淘汰策略:当 Redis 中的内存不够用时,此时在向 Redis 中添加新的 key, 那么…

免费思维13招之八:跨行业思维

免费思维13招之八:跨行业思维 免费思维的另一大战略思维——跨行业型思维。 跨行业型思维有两种:一种是通过跨行业,把自己的产品免费掉,从而赚取其他行业的利润。另一种是通过跨行业,把别人的主流产品免费掉,从而增大自己产品的销量。 第一种,把自己的产品免费,从而赚…

ONES 功能上新 | 近期产品新功能一览

支持在 ONES Project 中通过弹窗查看、编辑 ONES Wiki 页面。 应用场景: 当需要在 ONES Project 中查看 ONES Wiki 的页面内容时,可以直接点击工作项关联的 ONES Wiki 页面或项目文档组件中的页面,即可在 ONES Project 中通过弹窗查看 ONES W…

问题解决记录 | 内存溢出

报错截图: 处理方式: 增大PDI工具的内存 打开Spoon.bat配置文件 修改配置

【Linux 网络】网络编程套接字 -- 详解

⚪ 预备知识 1、理解源 IP 地址和目的 IP 地址 举例理解:(唐僧西天取经) 在 IP 数据包头部中 有两个 IP 地址, 分别叫做源 IP 地址 和目的 IP 地址。 如果我们的台式机或者笔记本没有 IP 地址就无法上网,而因为…

与 Apollo 共创生态:Apollo 七周年大会带我体会自动驾驶技术的发展

前言 自动驾驶技术作为当今科技领域的热门话题,吸引着无数开发者和企业的目光。而在这个风起云涌的行业中,Apollo开放平台作为自动驾驶领域的领军者之一,扮演着不可或缺的角色。七年前,当Apollo开放平台刚刚起步时,也…

STM32串口通信入门

文章目录 一、串口协议和RS-232标准,以及RS232电平与TTL电平的区别1.串口通信协议2.RS-232标准3.RS232电平与TTL电平的区别4.USB/TTL转232“模块(CH340芯片为例) 二、补充实验(一)几个常见的库函数、结构体1.时钟配置函…

java入门-面向对象的三大特性

面向对象三大特性 封装 什么是封装 封装 是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用。 封装的作用 访问控制符 方法传参-值传递 传参类型是基本类型 程序案例: public static void main(St…

Spring Boot 自动装配

本篇主要介绍Spring Boot 自动装配的相关内容。 目录 一、什么是自动装配 二、Bean的扫描方式 ComponentScan Import ImportSelector接口 三、Spring Boot自动装配原理 一、什么是自动装配 在我们在创建Spring Boot项目时往往会根据项目需求,引入很多第三方…

Spring高手之路18——从XML配置角度理解Spring AOP

文章目录 1. Spring AOP与动态代理1.1 Spring AOP和动态代理的关系1.2 AOP基本术语 2. 通过XML配置实现Spring AOP2.1 添加Spring依赖2.2 定义业务接口和实现类2.3 定义切面类2.4 配置XML 1. Spring AOP与动态代理 1.1 Spring AOP和动态代理的关系 Spring AOP使用动态代理作为…

AI 问答 API 对接说明

我们知道,市面上一些问答 API 的对接还是相对没那么容易的,比如说 OpenAI 的 Chat Completions API,它有一个 messages 字段,如果要完成连续对话,需要我们把所有的上下文历史全部传递,同时还需要处理 Token…

Matlab/simulink永磁直驱风机的建模仿真

Matlab/simulink直驱永磁同步风机的建模仿真,跟随风速波动效果好,可以作为后期科研的基础模型