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

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

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

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

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

PIO有兩種方法可以幫助DPI: (a)修復(fù)隔行掃描的垂直同步;(b)生成復(fù)合同步
這兩個模塊僅通過GPIO引腳通信,通常是GPIOs 1、2和3。
我們希望這有助于人們在真正的CRT電視上享受他們最喜愛的電視節(jié)目和游戲的真實復(fù)古體驗!
-
接口
+關(guān)注
關(guān)注
33文章
9005瀏覽量
153762 -
DPI
+關(guān)注
關(guān)注
0文章
39瀏覽量
11714 -
樹莓派
+關(guān)注
關(guān)注
121文章
2009瀏覽量
107478
發(fā)布評論請先 登錄
樹莓派5,Raspberry Pi 5 評測
例說FPGA連載70:AV視頻采集之去隔行處理實現(xiàn)
樹莓派遙控視頻小車的方法
使用FPGA 實現(xiàn)高清晰視頻去隔行功能
用于視頻應(yīng)用的去隔行處理和格式重定處理的優(yōu)化方案

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

微雪電子5寸樹莓派IPS顯示屏5inch DPI LCD簡介
樹莓派遙控視頻小車(附代碼)

使用Resizer在DM6446上進行去隔行掃描和YUV 4:2:2到4:2:0轉(zhuǎn)換

評論