最早的樹莓派型號支持復合視頻輸出,所有配備40針接口的型號均支持顯示并行接口(DPI)。通過外接組件,DPI可轉換為VGA或RGB/SCART信號。這些模擬接口至今仍被復古媒體和游戲玩家所青睞。
樹莓派5在性能上大幅提升,但其DPI模塊不再支持隔行掃描視頻(這本身并非DPI標準的一部分),因此無法通過CRT電視輸出全分辨率RGB信號。直到現在,這一限制終于被打破。

什么是隔行掃描視頻?
早期的電視系統通過從左到右、從上到下逐行掃描圖像。由于需要在幀率、分辨率和無線電帶寬之間權衡,隔行掃描技術應運而生。隔行掃描將每幀分為奇數行和偶數行,先掃描奇數行(上半場),再掃描偶數行(下半場)。這種方式在不增加帶寬的前提下減少了閃爍并提升了畫面流暢度。兩個半場分別稱為“場”(Field)。

逐行掃描和隔行掃描的圖示
模擬電視無需特殊處理即可區分場序。只要水平掃描速率是垂直掃描速率的半奇數倍,掃描線就會正確落在屏幕上。隔行視頻的關鍵特性在于垂直同步脈沖(VSync)相對于水平同步脈沖(HSync)的相位可以有兩種狀態。
技術難題與解決方案
實現隔行視頻需解決三方面問題:
1.讓DPI逐場(幀緩沖區的偶數或奇數行)而不是逐幀輸出
2.對這些信號進行計時,以便它們能以適當的方式交錯排列
3.產生適當的同步脈沖
第一部分很簡單。通過改變一個地址并使行與行之間的“步幅”加倍,我們可以安排DPI只讀取和顯示幀緩沖區的偶數或奇數行。我們使用一個中斷在偶數場和奇數場之間來回切換,每秒50或60次。
第二個問題通過入侵DPI外設解決。如果我們把時間安排得恰到好處,我們可以動態地改變它的配置,這樣每一秒鐘的幀——我應該說是每一秒鐘的場——最后都會多一個空行。額外的一行應該在上一個字段之后,下一個字段之前。
第三個問題更難。RP1的DPI無法使垂直同步脈沖在一行的中間開始。
PIO(可編程輸入輸出)的救場
像Raspberry Pi的RP2040和RP2350微控制器一樣,我們的RP1芯片也有一個可編程輸入/輸出(PIO)模塊。它可以產生多種實時波形。近期,Linux內核版本中增加了PIO支持,并且向設備驅動程序和用戶程序公開了它。
這里,PIO監聽DPI的水平同步(HSync)和數據使能(DE)引腳,以產生垂直同步(VSync)。PIO的四個狀態機(SMs)中有兩個被使用:一個SM作為計時器,在每行的開始和中間產生一個“中斷”。另一個SM找到垂直消隱間隔的開始(沒有DE的第一行),然后計算半行,以確定何時開始和結束VSync脈沖。最后,它再次對DE進行采樣以檢測額外的空白行,以確保它在下一次具有正確的場相位。

PIO 對 HSync 和 DE 進行窺探,以生成 VSync;奇數場顯示為較暗的波形
有一些問題:無論是否使用,DE信號都必須在GPIO1上輸出。PIO與DPI時鐘不同步,其VSync輸出抖動可達5 ns。這在標清電視速率下并不顯著,但在更高的分辨率下可能是個問題!最后,同步修復消耗了RP1的大部分PIO指令內存,因此PIO不能在生成隔行掃描DPI的同時運行其他任務。
如果您有一個Raspberry Pi 5、一個VGA666 HAT和一個可以以50Hz電視速率運行的VGA監視器,您可以通過將它添加到config.txt來測試它:
dtoverlay=vc4-kms-dpi-genericdtparam=clock-frequency=13500000dtparam=hactive=720,hfp=12,hsync=64,hbp=68dtparam=vactive=576,vfp=5,vsync=5,vbp=39dtparam=vsync-invert,hsync-invertdtparam=interlaced
確保您已經升級到最新的 Raspberry Pi 操作系統。請注意,上述配置將在GPIO0上輸出DPICLK(未使用),在GPIO1上輸出DE(PIO需要監聽),并排除在這些引腳上使用I2C/DDC。其他HATs可能需要自定義覆蓋,以在GPIO1上啟用DE輸出(這樣做是安全的)。
復合同步
VGA線有單獨的線用于水平和垂直同步,但電視將所有內容合并在一個信號中(復合視頻)。SCART中使用的中間站是“復合同步”,它多路復用兩個同步信號,但保持它們與RGB分離。
大多數現有的SCART HATs都有產生復合同步的電路,但是PIO也能做到!為了減少代碼量,它不在內核驅動中;PIO代碼樣本可以在這里找到。要測試它,您很可能需要修改硬件,這次您需要一個不在GPIO1上輸出DE的引腳控制。選擇隔行掃描視頻模式,然后用sudo和幾個參數運行示例PIO程序。
記住RP1的DPI不能在隔行模式下生成VSync。相反,我們讓它輸出一個在單線和雙線脈沖之間交替的“輔助信號”。PIO監視HSync和輔助信號以合成CSync。

PIO 使用 HSync 和一個 “輔助信號”(改進的 VSync)來實現隔行掃描 CSync
詳情
你可能想知道為什么PIO不能完全取代DPI。這主要取決于帶寬和時鐘。DPI塊具有更大的FIFOs,可以更高效地通過PCIe鏈路傳輸數據。DPI得益于專用時鐘,可生成任意像素速率。PIO也將與一些像素格式轉換斗爭。
幸運的是,DPI可以處理像素,讓PIO來處理同步信號。

PIO有兩種方法可以幫助DPI: (a)修復隔行掃描的垂直同步;(b)生成復合同步
這兩個模塊僅通過GPIO引腳通信,通常是GPIOs 1、2和3。
我們希望這有助于人們在真正的CRT電視上享受他們最喜愛的電視節目和游戲的真實復古體驗!
-
接口
+關注
關注
33文章
8971瀏覽量
153466 -
DPI
+關注
關注
0文章
39瀏覽量
11697 -
樹莓派
+關注
關注
121文章
1978瀏覽量
107216
發布評論請先 登錄
樹莓派5,Raspberry Pi 5 評測
例說FPGA連載70:AV視頻采集之去隔行處理實現
用于視頻應用的去隔行處理和格式重定處理的優化方案

電視機消除隔行掃描圖像缺陷的方法

微雪電子5寸樹莓派IPS顯示屏5inch DPI LCD簡介
使用Resizer在DM6446上進行去隔行掃描和YUV 4:2:2到4:2:0轉換

評論