最早的树莓派型号支持复合视频输出,所有配备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文章
9449浏览量
156155 -
DPI
+关注
关注
0文章
41浏览量
11859 -
树莓派
+关注
关注
122文章
2069浏览量
109730
发布评论请先 登录
树莓派5,Raspberry Pi 5 评测
例说FPGA连载70:AV视频采集之去隔行处理实现
用于视频应用的去隔行处理和格式重定处理的优化方案
微雪电子5寸树莓派IPS显示屏5inch DPI LCD简介
使用Resizer在DM6446上进行去隔行扫描和YUV 4:2:2到4:2:0转换

如何在树莓派5的DPI接口上实现隔行扫描视频?
评论