征程 6E DISPLAY 功能介绍及上手实践

news/2024/10/19 21:51:10

01 功能概述

本文将带大家一起实现单路、多路 MIPI CSI TX 输出、IDU 回写、IDU oneshot 模式、绑定输出 VPS 数据等功能,此处主要介绍各 sample 的实现与使用方法。

02 软件架构说明

本文中绑定 VPS 输出功能基于 libvio API 实现,调用 libvio 提供的 API,同时通过配置文件的方式,实现 pym 数据回灌,输出绑定 IDU 的输入图层,由 MIPI CSI TX 进行输出。

回环 sample 需要调用 libcam 提供的 camera 初始化接口,用于初始化 MIPI RX 和加解串器,还需要调用 libvio 的接口,初始化 CIM 模块将 MIPI RX 的数据存到 DDR 中。

其余 sample 都基于 libidu 实现,同时通过配置文件,实现 IDU 和 MIPI CSI TX 的初始化配置,调用 libidu 的 API 实现 oneshot 触发、获取回写 buffer 等功能。

2.1 硬件数据流说明

基于 Matrix 6E/M 硬件使用,各项功能硬件连接及数据流通路如下:

回写 sample 硬件数据流:

上图为 IDU 回写和 oneshot sample 的简要硬件结构及数据流向图,数据从 DRR 回灌到 IDU 输入图层,通过 IDU 回写输出到 DDR,可将输出数据直接 dump 到文件系统,通过查看数据文件验证输出正确性。

绑定通路 sample 硬件数据流:

上图为绑定 VPS 输出的 sample,数据从 DDR 回灌到 PYM,通过配置文件和 libvio 的接口实现 PYM 输出绑定 IDU 输入图层,将 PYM 的数据通过 IDU 和 MIPI CSI TX 进行显示输出。

回环 sample 硬件数据流:

上图为 MIPI CSI TX 输出回环 sample,将 MIPI CSI TX 的输出通过加串器、解串器接入 RX,通过 CIM 将数据输出到 DDR,通过查看数据文件验证输出正确性。

此处仅标注使用了 1 个 MIPI CSI TX 和 MIPI CSI RX 接口作为示意,但实际并不限于 1 条通路。

1V OVX8B 绑定 IDU 输出硬件数据流:

上图为 1V OVX8B 数据,通过绑定配置,由 MIPI CSI TX 输出的硬件数据流。

2.2 代码位置与目录结构

2.3 API 流程说明

以下为 sample 内 API 调用流程:

上图为绑定场景下 sample 的 API 调用流程。

上图为回写、oneshot、MIPI CSI TX 输出等场景下的 API 调用流程。

2.4 编译说明

本模块依赖 libvio 提供的 VIO API 头文件和 libidu 提供的 display API 头文件,并且需要依赖 libhbmem 头文件用于 buffer 申请:

#include "hb_mem_mgr.h"
#include "idu_interface.h"
#include "hbn_idu_cfg.h"
#include "hbn_vpf_interface.h"
#include "hb_camera_interface.h"
#include "hb_vio_interface.h"

编译依赖的库有如下:

LIBS += -lalog -lhbmem -lgdcbin -lcam -lvpf -lidu -lvio

编译命令:

# 进入 SDK 所有目录{sdk_dir},并 source 构建环境。
# 编译本 sample:
bdm display-sample
# 输出文件:
{sdk_dir}/out/debug-gcc_{gcc_version}/build/test/samples/platform_samples/source/S83_Sample/S83E04_Module/display_sample

03 运行

环境搭建:支持 Matrix 6E/M。

上图左侧二合一端子为 TX 输出,右侧四合一端子为 RX0 输入

  • 回环 sample 连接方式:TX 输出 1 接 RX 输入 4,TX 输出 2 接 RX 输入 3;
  • 1V OVX8B 绑定 IDU 输出 sample 连接方式:OVX8B 接入 RX 输入 3,TX 输出任意端口外接 RX。

板端部署及配置

  • 刷写系统软件镜像后,本 sample 的可执行文件位于板端:/app/sample/S83_Sample/S83E04_Module/display_sample/bin/display_sample;
  • 执行脚本位于板端:/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh;
  • 需要使用的配置文件位于板端:/app/sample/S83_Sample/S83E04_Module/display_sample/cfg;
  • 需要使用的图像文件位于板端:/app/sample/S83_Sample/S83E04_Module/display_sample/res。

运行方法

IDU 回写运行命令:display_writeback_sample,数据流参考 :ref:回写数据流 <writeback_flow>。

/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh display_writeback_sample

IDU oneshot 运行命令:display_oneshot_sample,数据流参考 :ref:回写数据流 <writeback_flow>。

/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh display_oneshot_sample

PYM 输出绑定 IDU 运行命令:display_bind_sample,数据流参考 :ref:绑定场景数据流 <bind_flow>。

/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh display_bind_sample

单路 Loopback 运行命令:matrix_display_loopback_sample_tx0\1,其中 matrix_display_loopback_sample_tx0 输出 IDU0 的 1080P 数据,matrix_display_loopback_sample_tx1 由 IDU1 两个图层拼接输出 1920x2160 数据,数据流参考 :ref:回环场景数据流 <loopback_flow>。

/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh matrix_display_loopback_sample_tx0
/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh matrix_display_loopback_sample_tx1

两路 Loopback 运行命令:matrix_display_loopback_sample_tx01,TX0 输出 1080P 数据,TX1 输出 1920x2160 数据,数据流参考 :ref:回环场景数据流 <loopback_flow>。

/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh matrix_display_loopback_sample_tx01

1V OVX8B 绑定输出运行命令:1v_ovx8b_rx0_cpe0_idu0_tx0_max9295e,数据流参考 :ref:1V绑定数据流 <1v_bind_flow>。

/app/sample/S83_Sample/S83E04_Module/display_sample/script/display_sample.sh 1v_ovx8b_rx0_cpe0_idu0_tx0_max9295e

运行参数说明

可通过-h 参数查看帮助

Usage:

-v --version Display test case version

-l --loop Excute count

-V --vnode_cfg vnode config file

-D --dump_enable dump flag

-d --device idu hw device id

-p --Pattern pattern path

-M --md5 md5 check

-L --loop_back loop back

-B --vio_bind vio bind

-s --sensor with sensor

-T --tims time(s)

-m --pipe_mask pipeline mask

-g --debug enable debug log

-h --help help info

运行结果说明

以下为 display_writeback_sample 正常运行的 log:

[INFO] display: display device index = 1
[INFO] display: dump flag = 5
[INFO] display: loop = 5
[INFO] display: display cfg = /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/idu_plane1_nv12_wb_nv12_1080p_30fps/
[INFO] display: display pattern = /app/sample/S83_Sample/S83E04_Module/display_sample/res/nv16_1920x1080.yuv
[INFO] display: Exit Display Sample[0].

运行结束后可以看到当前目录有五张 yuv 图片,格式为 NV12 1080P,可以通过看图软件查看,下图仅为示例,实际情况请结合输入图片进行确认:

以下为 display_oneshot_sample 正常运行的 log:

[INFO] display: display device index = 1
[INFO] display: dump flag = 5
[INFO] display: loop = 5
[INFO] display: display cfg = /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/idu_plane1_nv12_wb_nv12_1080p_oneshot/
[INFO] display: display pattern = /app/sample/S83_Sample/S83E04_Module/display_sample/res/nv16_1920x1080.yuv
[INFO] display: Exit Display Sample[0].

运行结束后可以看到当前目录有五张 yuv 图片,格式为 NV12 1080P,可以通过看图软件查看,下图仅为示例,实际情况请结合输入图片进行确认:

以下为 display_bind_sample 正常运行的 log:

[INFO] display: display device index = 1
[INFO] display: loop = 10000
[INFO] display: display cfg = /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/vnode_hbn_ddr_pym_idu_mipitx_1080p/
[INFO] display: Exit Display Sample[0].

本文通过 MIPI CSI TX 发送 10000 帧数据,可以通过 RX 收图查看。

以下为 matrix_display_loopback_sample_tx0 正常运行的 log:

[INFO] display: display device index = 1
[INFO] display: dump flag = 5
[INFO] display: loop = 5
[INFO] display: display cfg = /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/matrix_idu0_plane1_nv12_csi0_yuv422_max9295_max96712_rx0_1080p_30fps/
[INFO] display: display pattern = /app/sample/S83_Sample/S83E04_Module/display_sample/res/nv16_1920x1080.yuv
[INFO] display: Exit Display Sample[0].

本文通过 MIPI CSI TX0 发送 5 帧数据,通过 MAX9295E->MAX96712 回环到 RX0,通过 CIM 将数据存到 DDR,然后存成文件,可以通过看图软件查看,下图仅为示例,实际情况请结合输入图片进行确认:

以下为 matrix_display_loopback_sample_tx1 正常运行的 log:

[INFO] display: display device index = 2
[INFO] display: dump flag = 5
[INFO] display: loop = 5
[INFO] display: display cfg = /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/matrix_idu1_plane1_nv12_csi1_yuv422_max9295_max96712_rx0_1080p_30fps/
[INFO] display: display pattern = /app/sample/S83_Sample/S83E04_Module/display_sample/res/nv16_1920x1080.yuv
[INFO] display: Exit Display Sample[0].

本文通过 MIPI CSI TX1 发送 5 帧数据,通过 MAX9295E->MAX96712 回环到 RX0,

通过 CIM 将数据存到 DDR,然后存成文件,可以通过看图软件查看,下图仅为示例,实际情况请结合输入图片进行确认:

以下为 matrix_display_loopback_sample_tx01 正常运行的 log:

[INFO] display: display device index = 3
[INFO] display: dump flag = 5
[INFO] display: loop = 5
[INFO] display: display cfg = /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/matrix_idu01_plane1_nv12_csi01_yuv422_max9295_max96712_rx0_1080p_30fps/
[INFO] display: display pattern = /app/sample/S83_Sample/S83E04_Module/display_sample/res/nv16_1920x1080.yuv
[INFO] display: Exit Display Sample[0].

本文通过两路 MIPI CSI TX 发送 5 帧数据,通过 MAX9295E->MAX96712 回环到 RX0,通过 CIM 将数据存到 DDR,然后存成文件,可以通过看图软件查看,本 sample 效果和 TX0、TX1 单路输出相同,实际情况请结合输入图片进行确认。

以下为 1v_ovx8b_rx0_cpe0_idu0_tx0_max9295e 正常运行的 log,sample 运行时长为 100 秒,可以通过脚本中的-T 参数进行时长设置:

[INFO] display: display cfg = /app/sample/S83_Sample/S83E04_Module/display_sample/cfg/1v_ovx8b_rx0_cpe0_idu0_tx0_max9295e/
[INFO] display: Exit Display Sample[0].

本文通过 MIPI CSI TX 将 OVX8B 的输入数据进行发送,可以接入 MIPI RX 查看数据。在运行时可以通过命令“cat /sys/class/vps/flow/fps”查看 fps 是否正常,可以看到 idu0 的 ichn0 的输入帧率为 30:

----------------------------------------------------
Flow10 FPS
----------------------------------------------------
vin0 ctx 0: | ich0 30 | och0  0 | och1 30 | och3  0 | och4  0 |
isp0 ctx 0: | ich0 30 | och0 30 |
pym0 ctx 0: | ich0 30 | och0 30 |
idu0 ctx 0: | ich0 30 | ich1  0 | ich2  0 | ich3  0 | ich4  0 | ich5  0 | och0  0 | och1

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

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

相关文章

The 2022 ICPC Asia Nanjing Regional Contest IGDA,和令人疑惑的M

The 2022 ICPC Asia Nanjing Regional Contest IGDA,和令人疑惑的MI - 完美回文 题意 把单词改成一串相同的字母,最小修改次数 思路 把所有字母改成这个单词中出现次数最多的字母 代码 #include <bits/stdc++.h> using namespace std;void solve() {string s;map<cha…

fastStone Capture截图神器,你想要的功能它都有!

前言 大家好,我是小徐啊。从今天开始,小徐将介绍很多Java开发领域相关的软件工具资源,欢迎大家关注。今天,介绍一款非常小巧,但功能十分强大的图片软件,fastStone Capture。这款工具,主要是图片的截图,编辑,以及屏幕录屏等功能,可以说非常强大了。文末附获取方式。 安…

低功耗4G模组:LCD应用示例

​ 今天我们学习合宙Air780E开发板LCD应用示例,文末【阅读原文】获取最新资料。本文档适用于Air780E开发板关联文档和使用工具lcd-demo: https://gitee.com/openLuat/LuatOS/tree/master/demo/lcdLuatools下载调试工具一、环境准备 1.1 Air780E开发板一套​1.2 屏幕一个 这里…

告别繁琐的云平台开发!IoT_CLOUD之【百度云】

​ 众所周知,市面上有很多云平台,阿里云、腾讯云、中移OneNET、华为云、百度云、涂鸦云、Tlink云等等......并且每家云平台都有自己的协议,工程师要移植不同的SDK代码或基于各家的手册文档对接不同的协议,看着都头大!!! 为解决繁琐的云平台开发困扰,合宙IoT_CLOUD应运而…

低功耗4G模组Air780E快速入门:使用文件系统存储温湿度数据

​ 伙伴们,今天我们来学习合宙低功耗4G模组Air780E快速入门之使用文件系统存储温湿度数据。 一、编写脚本 1.1 准备资料 780E开发板购买链接 780E开发板设计资料 LuatOS-Air780E-文件系统的使用-程序源码demo 合宙的TCP/UDP测试服务器 API使用介绍 780E开发板和DHT11​1.2 程序…

文件目录

知识总览文件目录的基本概念 上节说过,FCB 的有序集合称为文件目录,一个FCB 就是一个文件目录项。与文件管理系统和文件集合相关联的是文件目录,它包含有关文件的属性、位置和所有权等。首先来看目录管理的基本要求:从用户的角度看,目录在用户(应用程序)所需要的文件名和文…

使用MySQL之用通配符进行过滤

1. LIKE操作符 通配符(wildcard): 用来匹配值的一部分的特殊字符。 搜索模式(search pattern): 由字面值、通配符或两者组合构成的搜索条件。 通配符本身实际是SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符。 为在搜索子句中使用通配符,必须使用LIKE操作符。 L…

20222416 2024-2025-1 《网络与系统攻防技术》实验二实验报告

1.实验内容 1.1 内容总结 后门:特指潜伏于操作系统中专门做后门的一个程序,“坏人”可以连接这个程序,远程执行各种指令。概念和木马有重叠。 netcat:一个底层工具,进行基本的TCP UDP数据收发。常被与其他工具结合使用,起到后门的作用。 Meterpreter:一个能生成后门程序…