自定義載板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
繁體地址,請注明出處:http://hk.pswp.cn/web/81936.shtml
英文地址,請注明出處:http://en.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結合使用。使用圖形化的…