当前位置: 首页 > news >正文

【Zynq7100实战】H3-CZ08P-7100 基于FDMA的双OV5640摄像头显示方案

教程前言

在Zynq嵌入式视觉开发中,单摄像头采集已经无法满足双目检测、图像对比、全景拍摄等项目需求。本文基于米联客2024版官方FDMA双摄像头方案,适配H3-CZ08P-7100(Zynq7100)工业开发板,完整实现双OV5640摄像头同步采集、FDMA数据搬运、VDMA帧缓存输出、屏幕实时显示全套功能。

本方案区别于传统VDMA单路图像采集,依托FDMA专用数据搬运内核,实现两路摄像头数据并行传输,不占用PS核心资源,帧率更高、延迟更低,非常适合嵌入式机器视觉、双目测距、工业图像采集场景。全程复刻官方demo流程,零基础可直接复刻落地。

✅ 全套开发环境

  • 硬件平台:米联客 H3-CZ08P-7100(Zynq7100)+ CEP X3子卡 + 双OV5640摄像头
  • 开发工具:Vivado 2021.1、Vitis 2021.1
  • 系统环境:Win10 64位 + 虚拟机Ubuntu 18.04
  • 开发包版本:uisrc-lab-xlnx20220601(官方适配版本,必须对应)
  • 核心技术栈:FDMA数据搬运、OV5640摄像头驱动、VDMAFB帧缓存、Linux设备树适配

一、方案整体原理与架构

1.1 功能实现流程

双OV5640摄像头通过CEP X3子卡完成硬件接入,采集的图像数据经由FDMA内核搬运至PS端DDR内存,Linux应用程序处理图像数据后,通过VDMA帧缓存驱动输出至DP/HDMI显示接口,最终实现双路摄像头画面同步显示。

1.2 三大核心驱动分工

  • OV5640摄像头驱动:基于I2C总线完成摄像头参数初始化、分辨率配置、画面翻转/镜像调节,适配两路不同方向的摄像头硬件安装姿态。
  • FDMA输入驱动:通过平台设备树匹配,依托字符驱动+ioctl接口实现DMA数据读取,支持poll阻塞IO,高效搬运双路图像数据流。
  • VDMAFB显示驱动:管理Framebuffer显存,将DDR中缓存的双路图像数据输出至显示终端,完成画面渲染。

二、Vivado工程硬件解析(关键参数)

本文不重复基础工程搭建,重点讲解Linux开发必须掌握的硬件核心参数,直接适配H3-CZ08P-7100板卡。

2.1 BD工程核心通路

工程内部完成双摄像头数据通路、FDMA、VDMA、AXI总线、PL-PS中断通路的固化连接,保证两路图像数据独立传输、互不干扰。

2.2 中断号计算(重中之重)

两路摄像头中断接入PL-PS中断组,根据Xilinx官方手册UG1085寄存器规范计算:

  • CAM1中断对应硬件中断号121,Linux系统中断号 = 121 - 32 =89
  • CAM0中断对应硬件中断号122,Linux系统中断号 = 122 - 32 =90

该中断号为后续设备树配置核心参数,填写错误会导致摄像头无数据、FDMA卡死。

2.3 寄存器地址说明

FDMA、摄像头I2C、复位引脚、VDMA相关寄存器地址,可由Vitis导出硬件参数自动生成,无需手动计算,仅需在设备树中精准匹配即可。

三、设备树深度适配(核心实操)

⚠️ 新手禁止盲目自定义修改,优先使用官方demo自带设备树,本节详解官方标准配置逻辑与修改要点。

3.1 预处理pl.dtsi自动生成节点

Vitis自动生成5个PL硬件节点:CAM0_gpio_sccb、CAM0_uifdma_dbuf_0、CAM1_gpio_sccb、CAM1_uifdma_dbuf_0、gpio_rstn。

关键操作:注释掉CAM0_uifdma_dbuf_0CAM1_uifdma_dbuf_0两个默认FDMA占位节点,避免与自定义FDMA驱动冲突。

3.2 新增FDMA设备树节点

手动添加FDMA匹配节点,绑定驱动、寄存器、中断与内存地址,完整配置如下:

Plain Text
fdma_fun_0:fdma_fun@80010000{
compatible="fdma demo";
reg=<0x0 0x80010000 0x0 0x10000>;
interrupt-parent = &gic;
interrupts = <0 89 4>;
mem_addr=<0x10000000>;
mem_size=<0x1800000>;
};

节点compatible字段与内核驱动fdma_function.c精准匹配,保证平台驱动正常加载。

3.3 双路I2C与摄像头节点配置

由于两路摄像头硬件安装方向不同,需独立挂载两路GPIO模拟I2C总线(i2c2、i2c3),分别配置参数适配画面方向。

3.3.1 第一路摄像头(i2c2)

Plain Text
i2c2:i2c@0{
status="okay";
compatible = "i2c-gpio";
#address-cells=<1>;
#size-cells=<0>;
i2c-gpio,delay-us=<2>;
sda-gpios = &CAM_gpio_sccb 1 0 GPIO_ACTIVE_HIGH;
scl-gpios = &CA_gpio_sccb 0 GPIO_ACTIVE_HIGH;
ov5640_0:camera@3c{
compatible="init-ov5640";
reg=<0x3c>;
reset-gpios = &gpio_rstn GPIO_ACTIVE_HIGH;
5640,xsize =<640>;
5640,ysize=<480>;
5640,flip=<0x46>;
5640,mirror=<0x07>;
};
};

3.3.2 第二路摄像头(i2c3)

Plain Text
i2c3:i2c@1{
status="okay";
compatible = "i2c-gpio";
#address-cells=<1>;
#size-cells=<0>;
i2c-gpio,delay-us=<2>;
sda-gpios=&CAM1_gpio_sccb 1 0 GPIO_ACTIVE_HIGH;
scl-gpios = &CAM1_gpio_sccb 0 GPIO_ACTIVE_HIGH;
ov5640_1:camera@3c{
compatible="init-ov5640";
reg=<0x3c>;
reset-gpios = &gpio_rstn 0 0 GPIO_ACTIVE_HIGH;
5640,xsize=<640>;
5640,ysize=<480>;
5640,flip=<0x40>;
5640,mirror=<0x01>;
};
};

通过flip、mirror参数修正两路摄像头画面方向,解决子卡摄像头反向安装导致的画面倒置问题。

四、系统镜像完整编译流程

4.1 前置文件部署

必须使用uisrc-lab-xlnx20220601版本开发包,版本不匹配会导致驱动加载失败,可前往米联客官网下载对应版本。

将Vitis生成的fsbl.elfsystem_wrapper.bit放入指定目录,同时将修改好的设备树分别放入kernel-dts、uboot-dts文件夹(注意:uboot设备树仅支持zynq-mz7x.dts单文件)。

4.2 一键编译脚本执行

进入开发包脚本目录,依次执行官方编译脚本:

Plain Text
cd /uisrc-lab-xlnx/scripts
source mz7xcfg.sh
./move_files.sh
./make_uboot.sh
./make_kernel.sh
./create_image.sh

4.3 SD卡分区与烧录

Plain Text
./make_parted.sh
./deploy_image.sh

输入SD卡设备盘符(sdb)并确认,自动完成分区格式化与系统烧录,执行sync命令同步数据。

五、应用程序编译与板级测试

5.1 程序文件部署

将官方demo中的camx2_fdma_hdmi文件夹完整拷贝至SD卡根目录/home/uisrc下。

5.2 开发板上电与登录

  • 硬件接线:插入双OV5640摄像头、DP/HDMI显示器、串口、电源
  • 拨码设置:H3-CZ08P-7100切换为SD卡启动模式
  • 登录账号:uisrc / 密码:root

5.3 本地编译应用程序

Plain Text
cd camx2_fdma_hdmi/
gcc show_windows.c -o show

编译完成后生成show可执行文件,为双摄像头显示主程序。

5.4 运行测试

Plain Text
sudo ./show

程序运行后,显示器同步输出双路OV5640实时画面,两路摄像头独立采集、同步渲染,功能正常。

💡 补充说明:若出现画面红蓝反色,属于FPGA图像数据时序适配问题,可通过修改Vivado工程信号时序修正,不影响核心采集功能。

六、常见问题排查汇总

  • 摄像头无画面、无数据:中断号配置错误、设备树未更新、FDMA节点冲突、I2C总线初始化失败
  • 单路摄像头工作,另一路黑屏:对应I2C总线配置异常、摄像头复位引脚失效、画面翻转参数不匹配
  • 程序编译报错:开发包版本不匹配、系统库缺失、文件拷贝不完整
  • 画面倒置/镜像异常:修改设备树中flip、mirror参数,适配摄像头安装方向

七、方案总结与项目拓展

本方案基于FDMA实现了Zynq7100双摄像头并行采集显示,相比传统单路VDMA采集,CPU占用率更低、实时性更强,是嵌入式机器视觉项目的基础核心工程。

基于本工程可快速拓展:双目测距算法移植、图像灰度处理、画面叠加、动态帧率调节、工业图像抓拍存储等高级功能,广泛适配工业检测、智能监控、嵌入式视觉终端等项目场景。

http://www.jsqmd.com/news/1309447/

相关文章:

  • 当“神话”成为礼物,爱就有了具体的形状
  • 在沈阳考无人机执照,为什么越来越多人选择“正规军”?
  • 香港有邊啲訂造傢俬公司提供免費上門度尺? - 行业百科测评
  • AI 公司批量抢购 2022 年前的旧书:互联网被 AI 污染后,干净语料成了最后的矿脉
  • 淘系代运营行业规范化提速 商家如何依托平台合作资质甄别合规服务商 - 羊城派
  • 球台边的默契 - 东方既白~(-^
  • Derrick:30秒实现应用容器化的终极工具,让部署效率提升10倍
  • 单片机毕业设计-基于单片机的室内环境自动通风加湿报警系统设计 基于 STC51 单片机的多传感器环境智能管控系统设计(017901)
  • 2026湖州必应开户服务商选型测评:五大代理真实数据,避坑决策一篇通 - 品牌报告
  • 2026 海口龙华公司股权、地址、法人变更分别需要什么材料?流程步骤 + 避坑指南,省心直接找众致财税 - 米諾
  • WordPress主题选型指南:从需求分析到实战避坑,找到最适合你的解决方案
  • LSD Web UI全攻略:TViz可视化与地图编辑功能使用指南
  • OpenKore自动化工具深度解析:从技术架构到实战部署
  • MoneyPrinterPlus深度解析:AI视频批量生成与自动化发布完整指南
  • 免费获取高清美学壁纸:CozyPixels项目背后的故事与资源分享
  • 2026 最新整理!10 个免费好用的在线抠图网站 - 米諾
  • WXPush进阶技巧:自定义皮肤、Webhook集成与自动化通知全攻略
  • Magallanes最佳实践:10个提升部署效率的实用技巧
  • 2026年8月中文MBTI测试推荐哪个?第一次测、结果摇摆和深度报告分别这样选 - 米諾
  • AIWear 智能衣橱项目实战(总览):我把衣柜接入了 AI
  • react-native-meteor组件开发指南:MeteorListView与数据绑定技巧
  • MediaToolkit性能优化:提升视频转码速度的10个实用技巧
  • responsive-html-email-template核心功能解析:从基础到高级的完整教程
  • y = ax + b [2026.08.01]
  • 四件套的60s和160s到底差在哪,贡缎提花值不值多花钱 - qiqi1113
  • SSH配置强制command=(Forced Command)介绍(服务器~/.ssh/authorized_keys)限定命令范围
  • Action-Conditioned模型实战:用Cosmos-Predict2构建智能物理交互系统
  • 上饶宝宝起名有哪些门道?深耕姓名文化的从业者讲透细节 - 米諾
  • 怎样构建现代设计系统:5大专业组件管理策略实战指南
  • 2026年跨境魔方及环保外贸正规海关数据查询平台选型参考 - 行业观察网