自定义载板RK3588HDMI输入配置完整解决方案

Orange Pi 5 Plus HDMI输入配置完整解决方案

📋 项目概述

本文档记录了Orange Pi 5 Plus HDMI1接口配置问题的完整分析和解决过程。从初始的"disconnected"状态问题,到最终实现HDMI输入功能的全过程技术分析。

🎯 问题描述

初始现象

  • HDMI1接口显示"disconnected"状态
  • 用户需要了解HDMI1的tx0和tx1配置含义
  • 系统配置中存在资源冲突问题

预期目标

  • 理解RK3588 HDMI架构设计
  • 解决HDMI1接口功能问题
  • 实现HDMI输入功能

🏗️ 硬件架构分析

RK3588 HDMI控制器架构

芯片级控制器(3个)
hdmi0: hdmi@fde80000        # HDMI输出控制器0
hdmi1: hdmi@fdea0000        # HDMI输出控制器1  
hdmirx_ctrler: @fdee0000    # HDMI输入控制器
硬件引脚模块(3个)
hdmim0: 支持tx0/tx1输出通道
hdmim1: 支持tx0/tx1输出通道 + rx输入通道
hdmim2: 支持tx0/tx1输出通道 + rx输入通道

TX0/TX1命名解析

重要理解:TX0和TX1不是两个独立的HDMI接口,而是一个HDMI模块的两个传输通道。

  • tx0 = 发送器通道0(主通道)
  • tx1 = 发送器通道1(次要通道)
  • 设计目的:在有限GPIO资源下实现灵活的引脚分配和复用

Orange Pi 5 Plus实际硬件连接

软件配置 vs 硬件现实:

软件层面配置:
hdmi0控制器 → hdmim0_tx0引脚 → 物理HDMI0接口(输出)
hdmi1控制器 → hdmim混合引脚 → ❌ 未实际连接硬件实际连接:
hdmi0控制器 → hdmim0_tx0引脚 → 物理HDMI0接口(输出)✅
hdmirx_ctrler → hdmim1_rx引脚 → 物理HDMI1接口(输入)✅

🚨 问题根因分析

资源冲突详解

HDMI1输出配置(冲突方A)
hdmi1: hdmi@fdea0000 {pinctrl-0 = <&hdmim2_tx1_cec &hdmim0_tx1_hpd &hdmim1_tx1_scl &hdmim1_tx1_sda>;// ❌ 尝试使用hdmim1模块的I2C资源status = "disabled";  // 默认禁用状态
}
HDMI接收器配置(冲突方B)
hdmirx_ctrler: hdmirx-controller@fdee0000 {pinctrl-0 = <&hdmim1_rx>;// ❌ 也需要hdmim1模块的I2C资源status = "disabled";  // 默认禁用状态
}
冲突核心

两个功能都需要hdmim1模块的I2C控制器来读取EDID信息,但一个I2C控制器不能同时服务于输入和输出功能。

关键发现:硬件设计真相

通过详细分析引脚定义发现:

HDMIM1模块的引脚分配
hdmim1_tx0 引脚:GPIO0_PD1, GPIO3_PD4, GPIO0_PD5, GPIO0_PD4  # ❌ 未连接
hdmim1_tx1 引脚:GPIO0_PD2, GPIO3_PB7, GPIO3_PC6, GPIO3_PC5  # ❌ 未连接 
hdmim1_rx 引脚:GPIO3_PD1, GPIO3_PD2, GPIO3_PD3, GPIO3_PD4   # ✅ 已连接

结论:Orange Pi 5 Plus在PCB设计时,HDMI1的TX输出引脚根本没有连接,只连接了RX输入引脚。硬件设计意图就是"一个HDMI输出 + 一个HDMI输入"。

🛠️ 解决方案实施

方案选择

在两个可选方案中,选择了方案B

  • 方案A:禁用HDMI接收器,尝试启用双HDMI输出(❌ 硬件不支持)
  • 方案B:禁用HDMI1输出,启用HDMI接收器(✅ 符合硬件设计)

具体实施步骤

步骤1:修改设备树配置

文件位置arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-plus.dtsi

// 禁用HDMI1输出控制器(释放hdmim1资源)
&hdmi1 {status = "disabled";  // 从默认disabled保持为disabled
};// 启用HDMI接收器控制器
&hdmirx_ctrler {status = "okay";      // 从disabled改为okaymemory-region = <&cma>;// 使用hdmim1_rx引脚组合pinctrl-names = "default";pinctrl-0 = <&hdmim1_rx_cec &hdmim1_rx_hpdin &hdmim1_rx_scl &hdmim1_rx_sda &hdmirx_det>;// 修正DET引脚配置(解决GPIO冲突)det-gpios = <&gpio2 RK_PB5 GPIO_ACTIVE_HIGH>;
};// 禁用HDMI1发送器PHY(节省功耗)
&hdptxphy_hdmi1 {status = "disabled";
};
步骤2:解决GPIO冲突

DET引脚冲突解决

// 禁用与GPIO2_B5冲突的触摸屏功能
&gt9xx {status = "disabled";  // 释放GPIO2_B5给HDMI接收器使用
};
步骤3:编译和安装
# 编译设备树
cd /path/to/orangepi-build
make dtbs# 备份原始设备树文件
sudo cp /boot/dtbs/rockchip/rk3588-orangepi-5-plus.dtb \/boot/dtbs/rockchip/rk3588-orangepi-5-plus.dtb.backup# 安装新的设备树文件
sudo cp arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-plus.dtb \/boot/dtbs/rockchip/# 重启系统应用更改
sudo reboot

✅ 功能验证

验证步骤1:检查驱动加载

# 检查HDMI接收器驱动是否正常加载
sudo dmesg | grep hdmirx# 期望输出示例:
# [4.380391] rk_hdmirx fdee0000.hdmirx-controller: driver probe ok!
# [4.381897] rk_hdmirx fdee0000.hdmirx-controller: rk_hdmirx_hdcp_register success

验证步骤2:检查DRM状态

# 检查显示接口状态
cat /sys/class/drm/card*/status# 期望输出:
# disconnected  # 禁用的HDMI1输出
# connected     # 正常的HDMI0输出  
# unknown       # 其他接口

验证步骤3:检查设备节点

# 检查视频设备节点
ls -la /dev/video*# 期望看到:
# /dev/video0   # HDMI输入设备节点

验证步骤4:测试V4L2功能

# 检查V4L2设备列表
v4l2-ctl --list-devices# 查询输入时序(无输入源时)
v4l2-ctl -d /dev/video0 --query-dv-timings# 期望输出(无输入源):
# VIDIOC_QUERY_DV_TIMINGS: failed: No locks available
# Active width: 0
# Active height: 0

🔌 HDMI输入源连接指南

硬件连接

接口识别
  • HDMI0:输出接口(连接显示器)
  • HDMI1:输入接口(连接信号源)
连接拓扑
输入源设备 ──[HDMI线]──> Orange Pi HDMI1 ──[处理]──> Orange Pi HDMI0 ──[HDMI线]──> 显示器↑                           ↑                                ↑信号产生                   信号接收处理                      信号显示

支持的输入源设备

  • 笔记本电脑(HDMI输出)
  • 台式机显卡(HDMI输出)
  • 手机/平板(需USB-C/Lightning转HDMI适配器)
  • 游戏机(PS5、Xbox、Nintendo Switch等)
  • 摄像机/录像设备
  • 机顶盒/媒体播放器

连接步骤

  1. 关闭所有设备电源
  2. 连接HDMI线缆
    输入源设备HDMI输出 → Orange Pi HDMI1接口
    Orange Pi HDMI0接口 → 显示器
    
  3. 开启设备电源(建议顺序):
    • 先开启Orange Pi
    • 再开启输入源设备
    • 最后开启显示器

输入源设备配置

Windows系统
快捷键:Win + P
选择:"扩展显示"或"复制显示"
macOS系统
路径:系统偏好设置 → 显示器 → 排列
操作:勾选"镜像显示器"
Linux系统
# 启用HDMI输出
xrandr --output HDMI-1 --mode 1920x1080 --rate 60# 或自动配置
xrandr --output HDMI-1 --auto

🔍 信号检测验证

实时监控连接状态

# 在一个终端运行(保持开启)
sudo dmesg -w | grep hdmirx

连接状态变化

无输入源时
hdmirx_wait_lock_and_get_timing signal not lock, tmds_clk_ratio:0
mu_st:0x0, scdc_st:0x0, dma_st10:0x10
检测到输入源后
hdmirx signal lock successful
hdmirx: detected timing: 1920x1080@60Hz  
tmds_clk_ratio:1
mu_st:0x1

验证输入时序

# 连接输入源后检查检测到的时序
v4l2-ctl -d /dev/video0 --query-dv-timings# 成功时的期望输出:
# Active width: 1920
# Active height: 1080
# Pixelclock: 148500000 Hz
# Frame format: progressive

🎬 视频捕获功能测试

基础数据捕获测试

# 简单数据流测试
v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=10 --stream-to=/tmp/test.raw# 检查捕获的数据大小
ls -la /tmp/test.raw
# 如果文件大小 > 0,说明成功捕获数据

GStreamer视频预览

# 实时预览(需要连接显示器)
gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink# 如果没有显示器,可以测试编码
gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=300 ! \videoconvert ! x264enc ! mp4mux ! filesink location=test.mp4

完整录制功能

# 高质量录制命令
gst-launch-1.0 v4l2src device=/dev/video0 ! \video/x-raw,width=1920,height=1080,framerate=60/1 ! \videoconvert ! x264enc bitrate=8000 ! mp4mux ! \filesink location=hdmi_capture_$(date +%Y%m%d_%H%M%S).mp4

🛠️ 故障排除

常见问题及解决方案

问题1:没有/dev/video0设备

原因:HDMI接收器驱动未正确加载
解决

# 检查设备树是否正确编译安装
sudo dmesg | grep hdmirx
# 如果没有相关消息,重新编译安装设备树
问题2:设备存在但无法检测输入

原因:输入源配置问题或线缆问题
解决

# 1. 检查输入源是否启用HDMI输出
# 2. 尝试更换HDMI线缆
# 3. 测试输入源设备连接其他显示器是否正常
问题3:检测到信号但无法录制

原因:格式不匹配或编码器问题
解决

# 查看支持的格式
v4l2-ctl -d /dev/video0 --list-formats-ext# 使用检测到的实际格式
v4l2-ctl -d /dev/video0 --get-fmt-video
问题4:录制文件无内容

原因:权限问题或存储空间不足
解决

# 检查存储空间
df -h# 检查文件权限
ls -la /path/to/output/directory

📊 功能特性总结

实现的功能

  • ✅ HDMI输入信号检测
  • ✅ 自动时序识别(支持1080p@60Hz等标准格式)
  • ✅ V4L2视频设备接口
  • ✅ 实时视频流捕获
  • ✅ H.264编码录制
  • ✅ HDCP内容保护支持

技术规格

  • 支持分辨率:最高1920x1080@60Hz
  • 输入接口:HDMI 1.4/2.0兼容
  • 输出格式:YUV420, RGB等
  • 编码格式:H.264, H.265(硬件加速)
  • API接口:V4L2标准接口

应用场景

  • 视频录制:游戏录制、会议录制
  • 视频流媒体:直播推流、实时转码
  • 视频监控:HDMI信号监控和存储
  • 视频处理:实时视频分析和处理

📚 技术文档参考

相关文件路径

设备树源码:arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-plus.dtsi
引脚配置:arch/arm64/boot/dts/rockchip/rk3588s-pinctrl.dtsi
驱动代码:drivers/media/platform/rockchip/hdmirx/

重要配置节点

&hdmirx_ctrler     # HDMI接收器控制器
&hdmi1             # HDMI1输出控制器(已禁用)
&hdptxphy_hdmi1    # HDMI1发送器PHY(已禁用)

调试命令

# 驱动状态检查
sudo dmesg | grep hdmirx# 设备节点验证
ls -la /dev/video* /dev/media*# V4L2功能测试
v4l2-ctl --list-devices
v4l2-ctl -d /dev/video0 --all# 实时日志监控
sudo dmesg -w | grep hdmirx

🎯 项目总结

关键成果

  1. 问题根因识别:发现了hdmim1模块资源冲突的本质问题
  2. 硬件设计理解:明确了Orange Pi 5 Plus的真实硬件设计意图
  3. 功能实现:成功启用HDMI输入功能,替代了无法使用的HDMI1输出
  4. 完整验证:建立了从硬件检测到视频录制的完整测试流程

技术价值

  • 嵌入式调试方法:展示了从现象到根因的完整分析流程
  • 设备树配置:提供了RK3588 HDMI配置的实际案例
  • 硬件资源管理:演示了多功能模块资源冲突的解决方案

经验教训

  1. 硬件优先原则:软件配置必须符合实际硬件连接
  2. 资源冲突分析:需要深入理解硬件模块的资源共享关系
  3. 逐步验证方法:从底层驱动到上层应用的分层验证策略

📝 文档信息

创建日期:2024年12月
适用版本:Orange Pi 5 Plus, RK3588芯片, Linux 5.10内核
文档状态:已验证可用
维护者:嵌入式开发团队

版权声明:本文档基于实际项目经验编写,仅供技术交流和学习使用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAAS架构设计2-流程图-用户与租户之间对应关系图

在SAAS&#xff08;Software as a Service&#xff0c;软件即服务&#xff09;结构中&#xff0c;用户与租户之间的关系可以通过一对一和多对多两种方式来定义。这两种关系模式各自有着不同的应用场景和特点。 用户和租户的关系&#xff08;一对一&#xff09; 一对一关系 在这…

Spring Boot微服务架构(八):开发之初就引入APM工具监控

使用 APM&#xff08;Application Performance Management&#xff09;工具监控 Spring Boot 应用&#xff0c;可以帮助开发者实时追踪性能瓶颈、分析调用链路、监控资源使用情况&#xff0c;并快速定位故障。以下是详细的步骤和常用工具的选择指南&#xff1a; ​​一、常用 A…

Python 如何让自动驾驶的“眼睛”和“大脑”真正融合?——传感器数据融合的关键技术解析

Python 如何让自动驾驶的“眼睛”和“大脑”真正融合?——传感器数据融合的关键技术解析 自动驾驶技术从来都不是“单兵作战”。如果你细看一辆自动驾驶汽车,它其实是一个传感器的集合体:摄像头、激光雷达(LiDAR)、毫米波雷达、超声波传感器、GPS……这些传感器各自发挥作…

《软件工程》第 12 章 - 软件测试

软件测试是确保软件质量的关键环节&#xff0c;它通过执行程序来发现错误&#xff0c;验证软件是否满足需求。本章将依据目录&#xff0c;结合 Java 代码示例、可视化图表&#xff0c;深入讲解软件测试的概念、过程、方法及实践。 12.1 软件测试的概念 12.1.1 软件测试的任务 …

面试题 08.08. 有重复字符串的排列组合【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 面试题 08.08. 有重复字符串的排列组合 一、题目描述 有重复字符串的排列组合。编写一种方法&#xff0c;计算某字符串的所有排列组合。 二、测试用例 示例 1&#xff1a; 输入&#…

【Linux】关于权限的理解

目录 一、Linux用户的分类 1.Linux下的两种用户 2.两种用户提示符的区别 3.用户的切换方法 二、Linux的权限管理 1.文件访问者分类 2.常见文件类型 3.文件访问权限 4.权限检查逻辑 5.文件权限的表示方式 三、与文件访问权限相关的设置方法 1.前提&#xff1a; 2.如…

前端antd,后端fastapi,解决文件上传

一、技术架构概述 前端框架&#xff1a;React Ant Design 5.x 使用antd的Upload组件&#xff08;支持拖拽/多文件/分片&#xff09; 后端框架&#xff1a;Python FastAPI 利用UploadFile类处理文件流 传输协议&#xff1a;HTTP FormData&#xff08;兼容性强&#xff09; 二…

⭐️⭐️⭐️ 模拟题及答案 ⭐️⭐️⭐️ 大模型Clouder认证:RAG应用构建及优化

考试注意事项: 一、单选题(21题) 检索增强生成(RAG)的核心技术结合了什么? A. 图像识别与自然语言处理 B. 信息检索与文本生成 C. 语音识别与知识图谱 D. 数据挖掘与机器学习 RAG技术中,“建立索引”步骤不包括以下哪项操作? A. 将文档解析为纯文本 B. 文本片段分割(…

为什么建立 TCP 连接时,初始序列号不固定?

主要原因有两个方面&#xff1a; 很大程度上避免历史报文被下一个相同四元组的 TCP 连接接收问题&#xff08;主要方面&#xff09;防止黑客伪造相同序列号的 TCP 报文被接收 接下来&#xff0c;详细说说第一点 假设每次建立 TCP 连接时&#xff0c;客户端和服务端的初始序列…

VScode-使用技巧-持续更新

一、Visual Studio Code - MACOS版本 复制当前行 shiftoption方向键⬇️ 同时复制多行 shiftoption 批量替换换行 在查找和替换面板中&#xff0c;你会看到一个 .∗ 图标&#xff08;表示启用正则表达式&#xff09;。确保这个选项被选中&#xff0c;因为我们需要使用正则…

【瑶池数据库训练营及解决方案本周精选(探索PolarDB,参与RDS迁移、连接训练营)】

一、训练营 数据库迁移训练营 自建数据库运维难&#xff1f;本次训练营教您迁移至云数据库 RDS&#xff0c;高可用架构跨区容灾&#xff0c;降本增效&#xff01;模拟教程 实战演练&#xff0c;零基础也能上手。 &#xff08;一&#xff09;开营时间 2025年4月8日-6月2日16…

Xamarin劝退之踩坑笔记

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

使用ray扩展python应用之流式处理应用

流式处理就是数据一来&#xff0c;咱们就得赶紧处理&#xff0c;不能攒批再算。这里的实时不是指瞬间完成&#xff0c;而是要在数据产生的那一刻&#xff0c;或者非常接近那个时间点&#xff0c;就做出响应。这种处理方式&#xff0c;我们称之为流式处理。 流式处理的应用场景…

火狐安装自动录制表单教程——仙盟自动化运营大衍灵机——仙盟创梦IDE

打开火狐插件页面 安装完成 使用 功能 录制浏览器操作 录入地址 开始操作 录制完成 在当今快速发展的软件开发生态中&#xff0c;自动化测试已从一种新兴技术手段&#xff0c;转变为保障软件质量与开发效率不可或缺的关键环节。其重要性体现在多个维度&#xff0c;同时&#x…

小程序 - 视图与逻辑

个人简介 👨‍💻‍个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言: “心有多大,舞台就有多大。” 📚推荐学习: 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒T…

【LLM应用开发】上下文记忆的解决方案(主流全面)

一、前言 上下文记忆&#xff08;Contextual Memory&#xff09;解决方案的作用&#xff1a; 提升 AI&#xff08;尤其是大语言模型&#xff0c;LLM&#xff09;的对话连贯性和个性化。 本文将介绍几个主流的实现方式。 二、&#x1f9e0; 什么是上下文记忆&#xff1f; 在对…

C/C++ 面试复习笔记(2)

C语言如何实现快速排序算法&#xff1f; 答案&#xff1a;快排是一种分治算法&#xff0c;选择一个基准元素&#xff0c;将数据划分成两部分&#xff0c;然后递归排序 补充&#xff1a; void quick_sort(int arr[], int start, int end) {//判断是否需要排序if (start > …

2025吉林CCPC 题解(前六题)

// Problem: J - Odd-Even Game // Contest: Virtual Judge - sdccpc20250527 // URL: https://vjudge.net/contest/719585#problem/J // Memory Limit: 1024 MB // Time Limit: 1000 ms // 签到题 // Powered by CP Editor (https://cpeditor.org)#include <bits/std…

Q: dify知识库模块主要库表和字段

【回到目录】~~~~【回到问题集】 Q: dify知识库模块主要库表和字段 A: 表1&#xff1a;datasets 知识库表 name 知识库名称 index_struct 向量索引node 表2&#xff1a;document 文档表 name 文档名称 word_count 字数 doc_form 分段类型(hierarchical_model、qa_model、te…

NodeMediaEdge快速上手

NodeMediaEdge快速上手 简介 NodeMediaEdge是一款部署在监控摄像机网络前端中&#xff0c;拉取Onvif或者rtsp/rtmp/http视频流并使用rtmp/kmp推送到公网流媒体服务器的工具。 通过云平台协议注册到NodeMediaServer后&#xff0c;可以同NodeMediaServer结合使用。使用图形化的…