创新的视频接口转换器设计方案,助力超高清数字电视的发展
参会注册
长按识别左侧二维码,登录报名网站(先注册网站会员,然后提交报名信息)
会议微信号
福州大学物理与信息工程学院的研究人员张林铮、叶宇煌、黄荣铭,在2019年第8期《电气技术》杂志上撰文指出(论文标题为“基于STM32视频接口转换器的设计与实现”),目前我们处在一个视频大爆炸时代,各种新兴视频技术如雨后春笋般出现,形成多种视频接口标准共存的局面,因此视频接口的兼容性成为一个突出问题。
本文提出一种基于STM32,结合高速视频处理芯片对HDMI接口的4K视频流实时转LVDS接口的方案,并选用不同格式的码流进行测试验证。经过测试,该方案能实现音视频数据流的分离输出,同时支持音视频参数变换,达到预期设计要求,为超高清数字电视的推广推波助澜。
随着视频技术的高速发展,人们对视频质量的要求也越来越高。从最初的黑白或者彩色模拟视频,到现在主流的高清1080p、以及正在推广的超高清4K数字视频,各种新技术不断的出现,形成了多代设备、各种技术标准共存的局面。
在享受各种视频的同时,不同的设备也给人们的工作和生活带来了很多不便。通常一种设备支持的视频接口有限,如果视频接口不匹配,就会造成诸多问题,严重影响用户体验。因此本文设计的视频接口转换器的解决方案具有重要意义。
1 转换器及接口简介
接口转换器顾名思义就是能够实现不同视频接口之间的对接匹配,将一种视频接口标准的视频信号转换成为另外一种视频接口标准信号,转换过程中还可以实现视频分辨率、色彩空间、色深等转换,以满足不同设备对视频信号的要求。本文主要实现HDMI接口转LVDS接口,音频输出选用I2S接口协议,系统控制选用了I2C接口来控制专用芯片。
HDMI接口是一种支持高质量的高速传输高清视频和多声道数字音频数据的专用数字化接口,带有数字视频版权保护功能(HDCP)。目前通用的HDMI 2.0接口标准相比于上代HDMI1.4标准增强了对4K视频的支持,线缆速率由10.2Gbit/s增加到18Gbit/s,能够支持RGB 4:4:4的4K@60Hz的视频传输。
LVDS接口是一种低电压的差分信号传输模式,也是一种电平标准,它可以让信号在差分PCB线或者平衡电缆上面以几百Mbit/s的速率传输,具有低电压、低功耗、低噪声、高速传输等特点。
I2S总线是飞利浦公司定制的音频数据传输的一种总线标准,它采用三线制,由位时钟线(SCK)、声道选择线(WS)、串行数据线(SD)组成。该接口将数据信号和时钟信号分开传输,避免由于时差造成的失真。
2 系统硬件框架
视频接口转换器的实现是通过STM32主控模块来控制视频专用芯片实现输入HDMI信号转换成一路视频信号(LVDS信号)和一路音频信号(I2S信号),同时STM32检测端口输入视频格式信息,并在LCD屏幕上面显示出来,并检测按键输入情况,根据输入指令配置视频专用芯片的输出音视频格式和选择输出的接口,STM32通过I2C接口实现与视频专用芯片通信。
该系统由交互部分、STM32主控部分、视频处理芯片部分、输入输出部分组成,系统整体框图如图1所示。
图1 系统整体框图
系统的主控主要是对视频处理芯片进行一些初始化寄存器配置,检测按键输入和视频输入信号格式,获取相关数据进行判断,根据输入要求进行配置芯片输出。所以选用ST公司的STM32F103系列芯片作为本系统主控。
该系列芯片是基于Cortex-M3内核的32位嵌入式处理器,而RBT6属于该系列中容量芯片,片内Flash为128kB,片内SRAM为20kB,系统主频可以达到72MHz,具有丰富的外设资源,满足本系统设计需求,并选用I2C2(GPIOB.10、GPIOB.11)接口作为芯片控制通信接口。
系统的输入输出部分由HDMI_RX接口、LVDS_TX接口、I2S_TX接口组成。
系统的视频数据转换处理部分采用专门的视频处理芯片来完成,选用的视频处理芯片要求如下:芯片带有HDM2.0标准输入接口、支持Hot-plug、支持HDCP1.4/2.2、支持多种视频格式输入并能对输入视频格式进行检测反馈、最高可支持到4K分辨率的视频输入、能够将一路HDMI信号转换成一路LVDS视频信号和一路I2S音频信号输出。因此,系统选用日本索喜公司生产的某款高性能、低功耗的视频专用处理芯片,该芯片广泛应用于数字电视、数字机顶盒等,相对于其他视频专用处理芯片,价格较低,可以降低系统硬件设计成本。
系统交互部分由按键部分和LCD显示部分组成,按键部分选用4×4矩阵键盘,通过GPIOA.2- GPIOA.5口和主控模块相连,主控模块分析按键输入的指令,对视频处理芯片做出相应的配置。LCD显示部分选用2.8寸的TFTLCD屏幕作为显示,分辨率为320×240,显示屏驱动模块是ILI9320,16位的80并行接口,支持65k色显示,用FSMC接口连接控制。用来显示当前输入的信号源端口号、输入视频参数、音频参数和输出的视频参数、音频参数等系统状态信息。
3 软件的设计与实现
市面上常用的嵌入式ARM平台开发环境主要有两种,分别是Keil MDK和IAR。而Keil MDK v5是目前针对ARM系列的微控制器,尤其对ARM Cortex-M系列内核微控制器性能最佳的一款集成开发工具。所以本次系统设计选用Keil uVision5为软件开发环境,系统整体软件设计分为初始化和控制两个部分。
3.1 系统初始化部分软件设计
系统初始化主要是对STM32和视频专用芯片进行初始化,调用的初始化关键函数见表1。
表1 系统初始化关键函数
STM32的初始化:在Keil MDK v5建立的工程中可以直接使用ST公司编写的启动代码文件startup_ STM32f10x_md.s来进行控制芯片初始化,这个文件已经配置好芯片系统堆栈的初始化、中断向量表、配置系统时钟等,用户只需配置自己使用的相关模块。
此次使用的STM32资源有GPIOA、GPIOB、中断控制、systick定时器、I2C2接口等。首先进行NVIC_PriorityGroupConfig( )函数调用,设置系统中断优先级为分组4,子优先级为0,16个抢占优先级。配置systick计时器的参数,调用SysTick_Init( )函数并设置中断时间间隔为1ms,用于延时函数计时。
调用RCC_APB1PeriphClockCmd( )和RCC_ APB2PeriphClockCmd( )函数对挂载在APB1和APB2总线上面的外设I2C2和GPIOA、GPIOB口的时钟进行使能。然后调用KEY_Init( )和LCD_Init( )函数初始化按键和LCD显示模块,最后调用Hi_I2C_ Init( )函数,对控制通信接口I2C2进行初始化。
视频专用芯片初始化:由STM32通过I2C控制接口,对视频专用芯片的寄存器进行读写操作完成芯片的初始化配置。主要有系统时钟、锁相环、开机复位、接口物理参数配置等。之后调用hdmirx_ init( )、lvdstx_init( )、i2stx_init( )三个SDK库函数,分别对芯片的输入和输出端口进行初始化,从而完成整个系统的初始化操作。
3.2 系统控制部分软件设计
系统的控制部分代码包括端口状态检测、音视频格式检测、键盘检测、输出控制四个模块。
1)端口状态检测
(1)端口状态检测模块。
在系统初始化完成之后,由于HDMI接口要求即插即用和系统配置需自适应输出,所以系统设计要求实时检测输入端口状态,为后续的数据处理和输出配置提供参数。端口状态检测模块流程图如图2所示。
图2 端口检测流程图
(2)端口状态检测方法。
首先,将当前端口输入状态now_port_status和前一个时间的端口输入状态pre_port_status都置零,并定义一个端口计时变量port_status_tick,该变量随着时钟信号,每1ms自动增加1(由系统systick定时器中断触发),每200ms循环一次端口检测时间判断。
然后调用库函数getrx_port_status(&port_status)来获取当前端口输入状态,如果当前端口有信号接入则置now_port_ status=1,将now_port_status和上一个时间端口输入状态pre_port_status进行比较;如果不相等,则说明当前端口输入状态发生变化,对LCD显示的系统输入状态进行更新,并通知主控模块做相应的处理。
最后将now_port_status赋值给pre_port_status,同时更新端口的port_status_tick变量,等待下一次端口状态检测来临。四个输入端口都做同样的端口状态检测处理。
2)音视频格式检测
(1)音视频检测模块。
在实际应用中,用户会随机进行音视频格式切换操作,因此在端口状态检测之后,需要同步进行输入音视频格式状态的检测。音视频格式状态检测中涉及的库函数见表2。
表2 音视频状态检测相关库函数
(2)音视频格式检测的方法和端口检测方法类似。
首先构造两个结构体system_video和system_ audio,system_video用来存放输入视频的端口号、分辨率、采样格式、帧率以及色彩空间信息;system_audio用来存放音频的端口号、采样频率、量化位数、声道数等。定义一个音视频状态时间标志变量av_status_tick,该变量随着系统时钟信号每1ms自动增加1,每200ms音视频格式检测一次。
然后调用库函数getrx_av_status (&rx_av_ status)函数来获取当前输入的音视频状态rx_av_ status,将rx_av_status. video_format和上个输入的音视频状态变量pre_rx_av_status.video_format进行比较,如果不相等,则表示输入的音视频状态发生了改变,这时将音视频状态标志变量rx_av_status_change置1,同时调用getrx_video_ format((hdmirx_video*)&(vform.htx))函数获取当前输入的视频格式信息并更新LCD状态显示;将rx_av_status.audio_format和上个音频标志状态变量pre_rx_av_status.audio_format进行比较。
如果不相等,则表示输入的音频状态发生了改变,将音频状态标志变量rx_av_status_change置1,调用hdmirx_get_audio_format(((hdmirx_video*)&(vform. htx))函数获取当前输入的音频格式信息并更新LCD状态显示。接下来将rx_av_status赋值给pre_rx_av_status,等待下一次音频检测来临。
3)键盘检测
键盘设置16个按键,分为0—9数字键十个、lvds功能键、i2s功能键、取消键、确认键、上下键。STM32的所有GPIO口都支持外部中断功能,键盘检测采用外部中断方式触发。中断处理函数解析键盘输入视频格式指令并赋值给结构体成员vform.sys,解析视频和音频端口选择指令并分别赋值给变量lvds、i2s。
4)输出控制检测
输出控制模块根据一些标志变量取值,来调用库函数实现输出功能,使用的库函数列表见表3。当rx_av_change_status=1、lvds=0、i2s=0时,调用库函数lvdstx_set_video_for-mat ((lvdstx_video*)& (vform.sys))设置lvds视频输出格式,调用库函数lvdstx_video_mute(&tx_mute)和i2stx_audio_mute (&tx_mute)开启系统的LVDS接口和I2S接口输出并更新LCD显示状态信息;当rx_av_change_status=1、lvds=1、i2s=1时,即系统关闭LVDS接口和I2S接口输出并更新LCD显示状态信息。
表3 系统输出控制相关函数
系统整体流程图如图3所示,开机之后,首先系统对STM32和HV2芯片进行初始化操作,STM32通过I2C接口读写HV2的端口状态寄存器来检测输入端口变化情况,接下来检测输入音视频格式状态,并更新LCD显示的输入格式信息。然后根据状态标志变量和按键输入决定输出端口,并配置输出格式;最后开启输出并更新LCD显示的输出格式信息。
4 测试与分析
首先搭建测试环境,用一个机顶盒播放不同的测试码流进行测试。选用一个4K/60p的测试码流用机顶盒进行播放并通过HDMI接口输出,将其接入转换器的HDMI接口输入端,输入音频采样频率为48kHz,采样位数为20bit。用示波器测试输出端口的波形。实际测得的音频I2S接口输出波形和视频LVDS接口输出波形如图4和图5所示。
图3 系统整体流程图
图4 LVDS输出数据波形图
图5 I2S输出数据波形图
接下来,按着LVDS数据格式和I2S数据格式标准解析波形图得到输出的数据,与输入的音视频数据格式进行对比,得到输出分辨率4K/ 60P,输出音频采样率为48kHz,采样位数为20bit,对比输入的音视频数据可知转换器系统正常工作,然后换用4K/30p、4K/25p、4K/24p等不同码流进行测试并分析对比。
本次系统设计方案芯片选用意法半导体公司的STM32F103RBT6芯片、索喜公司的某款视频专用处理芯片、按键模块,LCD显示模块、接口模块等,完成视频接口转换器的系统设计。
经过一系列测试对比,该方案实现HDMI接口转LVDS接口输出以及音视频的分离输出,支持各种常用分辨率输入最高支持至4K分辨率。在进行接口转换的同时该转换器还能够实现不同接口之间的音视频制式参数转换,从而更好的解决接口匹配问题,达到预期设计的目标。
该转换器可靠性高、使用方便、功能强大,能有效解决数字电视应用中视频接口的兼容性问题,在数字电视方面应用广泛,值得深入研究与推广。