基于TMS320DM355的VGA视频采集系统的设计与实现

    技术2025-05-31  13

     

    基于TMS320DM355VGA视频采集系统的设计与实现

     

    【摘要】本文提出了以TMS320DM355为核心,对VGA信号进行实时采集及显示的系统方案。系统采用AD9883芯片将VGA信号数字化,利用FPGA芯片进行时序转换,修改了DM355的视频处理前端的驱动,最后利用linux操作系统提供的V4L2,编写应用程序,实现VGA数据的实时采集,编码传输。同时,本系统采用ADV7123芯片将VGA信号还原,在本地的显示器输出。

    【关键词】TMS320DM355AD9883FPGA,采集,V4L2

    一、       引言

    随着计算机的广泛使用,对输出的VGA信号进行实时监控、存储及传输的应用需求越来越迫切。本文基于Ti公司的TMS320DM355处理器(简称DM355)、AD公司的AD9883芯片,结合FPGA技术,提出了一种支持分辨率较高、性能优良的视频信号采集和接口电路方案。

    该系统对计算机输出的XGA1024x768)信号进行实时采集、编码、传输,同时利用ADV7123芯片将VGA信号还原,在本地的显示器进行输出,主要应用于视频会议,视频教学系统中。由于VGA信号的采集涉及到AD9883[1] [2]芯片和FPGA中信号时序的转换,及DM355的视频处理前端(VPFEVideo ProcessingFront End)驱动的修改,比较复杂,本文将对此作重点阐述。

    二、       系统整体设计

    1.  方案选择

           本文采用TI公司的达芬奇系列芯片TMS320DM355来实现,这一方案的优点在于:

    1DM355内部集成了ARM926EJ-S内核、协处理器(MJCP)、视频处理子系统及多种外设。ARM中移植嵌入式linux后可构成一个良好的基于网络的嵌入式产品开发平台,能方便的实现Web服务器的构建和功能的扩展。协处理器(MJCP)可实现对多媒体数据的编解码。

    2DM355是一款低功耗的芯片,待机功耗仅为1mW,其电池的使用寿命是当今业界相当的便携式产品的2倍。

           3DM355TI公司的一款中低档芯片,在满足性能要求的同时,其价格与同类芯片相比也很有优势。因此,广泛应用于数码相机,IP摄像机,数码相片,医学成像及视频监控系统中。

           DM355的视频处理子系统包括视频处理前端(VPFE)和视频处理后端(VPBEVideo ProcessingBack End),视频处理前端[3]用于接收外部传感器或视频译码器等输入的图像信息,由CCD控制器、硬件图像信号处理器、自动曝光/聚焦模块H3A和寄存器组成,支持的视频输入格式有如下三种:

    1) RAW格式。

    2) BT.656格式。

    3) YUV格式。

    其中,RAW格式对于每个像素点只存储RGB三原色中某一种颜色的值,在进行色彩还原时因插值运算会导致莫尔纹效应;BT.656格式支持的视频分辨率太低,因此,本系统的DM355处理器的视频处理前端采用YUV格式进行视频采集,须将VGA信号通过硬件电路转换为YUV信号格式。

    2.  系统总体设计

    1所示为VGA视频采集系统框图。

    1 VGA视频采集系统框图

           1VGA输入模块。将RGB模拟信号及行同步信号(Hsync)、场同步信号(Vsync)输入给A/D转换模块。由于该模块由模拟电路组成,易产生噪声,因此布线时接口器件应尽量靠近A/D转换芯片。

           2A/D转换模块。首先根据行、场同步信号确定采样的行频和场频,接着由行频和内部寄存器确定像素同步时钟,然后通过配置AD9883芯片内部的锁相环(PLL)产生同步时钟。该模块可将输入的VGA模拟信号转换为8bit×3路的数字视频信号,并通过一系列寄存器调整图像的采样效果。

           3FPGA转换控制模块。一方面FPGA通过I2C总线向AD9883的寄存器写入控制信息;另一方面将输入的RGB信号转换为DM355支持的YUV信号格式,将视频信号送给DM355的视频采集前端。

           4D/A输出显示模块。该模块采用ADV7123芯片将8bit×3RGB数字信号还原为模拟信号,并结合行、场同步信号构成VGA信号,供本地计算机显示输出。

    三、       系统硬件设计

    1VGA接口

           VGA是一种D型接口,可传输VGASVGAXGASXGA等图像格式。VGA接口共有15条线,分为3组:一是RGB三色模拟信号输入线;二是RGB三色地线,接地处理;三是时序信号线,分别是行同步信号线(HorizonSynchronizingHS)和场同步信号线(Vertical SynchronizingVS),这两条线控制了VGA的显示时序。

    显示器采用逐行扫描的方式进行扫描,阴极射线枪发出的电子束打在涂有荧光粉的屏幕上,产生RGB三基色,由此合成一个彩色图像。VGA显示可分为行扫描和场扫描,从屏幕左上方开始扫描,从左到右,由上至下。每行扫描结束时,用行同步信号进行行同步;当整个屏幕的所有行扫描结束后,用场同步信号进行场同步,如图2所示。在扫描过程中,CRT对电子束进行消隐控制,在消隐过程中不发送电子束。在每行结束后,电子枪回扫的过程进行行消隐;在每场结束后,电子枪回扫的过程进行场消隐,整个屏幕变黑,光栅在这段内重新回到屏幕的左上角,开始下一帧图像的扫描。

    2 VGA扫描时序

    2. A/D转换模块

    本系统的A/D转换器采用AD9883,该芯片专门用于采集模拟RGB信号,将其数字化显示或作为中间转换器件使用。该芯片具有采样精度为8bit×3路通道,最高采样率为140MSPS/s300MB的模拟带宽,支持最高分辨率为SXGA1280x1024),刷新率为75Hz的视频信号。基于AD9883的电路可为高清电视提供良好的接口,或作为高性能视频设备的前端扫描转换器,它的内部结构如图3所示,主要包括A/D转换电路、时钟产生电路、同步信号产生电路、I2C总线接口四个部分。

    3  AD9883的内部结构图

    AD9883内部的寄存器通过I2C总线完全可编程,芯片按照寄存器设定的模式进行工作。如AD9883支持多种VGA格式,但不能自动检测实现自适应,需要通过I2C接口进行寄存器配置,指定芯片采集的视频格式。

    AD9883转换后,数字视频信号输出的时序如图4所示。在数据输出时钟DATACK的下降沿对应信号的采样及量化,量化的数据在时钟上升沿稳定的输出;接口电路可在DATACK的上升沿准确地锁存图像数据,从而实现数字化图像的采集。值得注意的是,AD9883有一个数据输出通道,在输出数据有效之前必须清空通道,从而导致每行输出有效数据之前将输出4组无效的数据,可通过行同步信号HSOUT避免输出这些无效数据。

    4  AD9883数据输出时序图

    3FPGA设计

    本系统采用EP1C3T144C8将输入的数字化的RGB信号转换为YUV信号,送给DM355的视频采集前端。FPGAAD9883输出的像素时钟PCLK作为全局同步时钟.

    RGBYUV是两种常用的色彩空间。RGB色彩空间是采用RGB三个色彩分量来表示一个像素,常见的RGB格式有RGB565RGB555RGB24,本文中AD9883转换输出的数据格式为RGB24,即每个像素用24位表示,RGB分量各使用8位。

    YUV色彩空间是视频传输中常采用的一种方法,其特点为亮度信号与色差信号分离。Y表示亮度信息,U表示蓝色色差(即蓝色信号与亮度信号的差值),V表示红色色差(即红色信号与亮度信号的差值)。常见的YUV格式有YUV 4:4:4YUV4:2:2YUV4:2:0,本系统中DM355的视频处理前端接收的采集信号格式为YUV4:2:2。该格式为每个像素保留Y分量,而UV分量在水平方向上每两个像素采样一次,在图像数据流中,YUV分量排列如下:Y0 U0 Y1 V0 Y2 U1Y3 V1 Y4 U2 Y5 V2 … …

    5所示为FPGA进行色彩转换的工作框图,该模块将输入的8bit×3RGB信号转换为16bitYUV信号。在YUV 16Bit的工作模式下,在一个时钟周期内,高八位用于间隔传递U分量或V分量,低8位用于传输Y分量。

    5 FPGA芯片色彩转换框图

    除色彩空间的转换外,FPGA模块将像素同步时钟及行、场同步信号送给A /D转换模块及DM355处理器,方便其他模块进行信号同步操作。

    4D/A输出显示设计

    本设计采用ADV7123作为视频转换芯片,将数字视频信号转换为VGA模拟信号,供本地计算机显示输出。ADV7123具有三路高速、10位输入的视频DA转换器,具有330Mhz的最大采样速度,与多种高精度的显示系统兼容,可充分满足本系统的转换需求。当RGB三通道的输入比特数少于10位时,可将高位用于数据比特传输,低位接地处理。ADV7123芯片产生三路模拟输出后,结合FPGA传来的行、场同步信号完成视频的显示。

    四、       系统软件设计

    1. FPGA软件设计

    FPGA[4]模块的软件设计主要实现以下3方面的功能:

    1I2C接口配置

           在上一小节中提到,AD9883芯片内部的寄存器通过I2C总线完全可编程,本小节将讲述FPGA通过I2C接口对这些寄存器的具体配置。通过这些具体参数的配置,可实现对AD9883视频采集格式、视频转换效果等的控制。

    AD9883内部共25个寄存器,其中00H14H为只读寄存器,15~18H为测试用寄存器,01H~13H为功能寄存器。FPGA芯片对主要功能寄存器的配置如表1所示:

    1 AD9883寄存器配置

    功能

    寄存器

    配置值

    锁相环分频控制

    01H

    F0H

    时钟产生器控制

    03H

    70H

    04H

    80H

    箝位控制

    05H

    09H

     

     

    增益和偏置控制

    08H

    90H

    09H

    90H

    0aH

    90H

    0bH

    80H

    0cH

    80H

    0dH

    80H

    2RGBYUV的转换

           本系统中的FPGA模块的另一功能是将RGB信号转换为YUV信号,二者转换的公式为(RGB取值范围均为0-255):

                        (式 1

           由于FPGA芯片进行浮点运算时,运算步骤繁琐并且硬件资源消耗较大,故将式1中的参数均乘以256后取整,转换如下:

                                 (式2

           经过运算后,得到式2中的Y’U’V’分量后,分别取数据的高八位即为YUV分量的实际值。

    3VPFE接口时序的实现

    由于AD9883芯片输出的同步信号与DM355要求的输入同步信号格式不匹配,因此需要将同步信号进行转换。AD9883芯片输出的同步信号周期包括行消隐前肩、行消隐后肩、同步信号和图像数据四个部分,而实际传输给DM355的视频处理前端的信号仅包括同步信号和图像数据两个部分,因此需要对信号周期进行转换,如图6所示。

    6 VGA行、场同步时序示意图

    2DM355软件设计

    1)视频处理前端驱动的修改

           为了采集转换后的YUV信号,本文对DM355的视频处理前端的驱动进行了修改,配置视频采集设备的工作模式为YUV输入模式。主要修改的驱动文件为dm355_vpfe.c,部分代码解析如下:

    static vpfe_objvpfe_device_ycbcr = {   

             ……                     

             .vwin= {0,0,1024,768},//VPFE_WIN_VGA,

             .bounds= {0,0,1024,768},//VPFE_WIN_VGA,

    //设置采集的YUV信号的分辨率

             .pixelaspect= VPFE_PIXELASPECT_NTSC,

             .pixelfmt= V4L2_PIX_FMT_UYVY,

             .field= V4L2_FIELD_NONE,

             //设置V4L2的工作模式为逐行扫描格式

             ……

             .capture_device= TVP5146,

             .ccdc_params_ycbcr= {

                                      .pix_fmt = CCDC_PIXFMT_YCBCR_16BIT,

                                         //采用16位数据总线传输YUV信号

                                             ……

                                      .bt656_enable = FALSE,

                                        //不采用BT.656采集模式

                                      .pix_order = CCDC_PIXORDER_CBYCRY,

                                      .buf_type = CCDC_BUFTYPE_FLD_SEPARATED

    //该设置相对于CCDC_BUFTYPE_FLD_INTERLEAVED而言,设置buffer为独立的

    },

     

             .tvp5146_params= {

                                   .mode = TVP5146_MODE_AUTO,

                                   .amuxmode = TVP5146_AMUX_COMPOSITE,

                                   .enablebt656sync = FALSE,

                                   //不采用BT.656同步模式

                                  .data_width = TVP5146_WIDTH_16BIT

                                   //数据总线宽度为16bit

    },

             .irqlock= SPIN_LOCK_UNLOCKED

    };

    2)视频信号采集程序设计

    DM355的应用程序设计中,视音频数据的采集、编码、输出分别通过Capture ThreadVideo Thread,Writer Thread独立线程来实现。其中,视频采集线程的主要作用是对采集设备进行初始化,开辟缓冲区,以帧为单位往其中写入数据,为Video Thread做准备。

           视频采集程序通过调用V4L2[5]Video For Linux 2)来实现,V4L2Linux中提供的关于视频设备的内核驱动,它为针对视频设备的应用程序变成提供一系列的接口函数,如VIDIOC_REQBUFS,分配内存;VIDIOC_QUERYBUF,将VIDIOC_REQBUFS中分配的数据缓存转换成物理地址;VIDIOC_QUERYCAP,查询采集设备功能;VIDIOC_S_FMT,设置当前驱动的视频捕获格式;VIDIOC_STREAMON,开始视频采集等。

    5 采集设备初始化流程图

    5为视频采集线程对采集设备进行初始化的流程图。在Linux中,视频采集设备的设备文件名为/dev/video0,可通过函数open(“/dev/video0”, O_RDWR | O_NONBLOCK, 0)来打开视频设备。打开设备文件后,利用ioctl函数,设置不同的V4L2参数,来调用底层的V4L2驱动程序,获取视频采集设备的参数,根据实际应用需求设置视频格式,同时为采集设备分配帧缓冲区,并将该缓冲区映射到用户空间。这样,当缓冲区中存储了一帧视频数据后,VIDIOC_DQBUF就把数据从缓冲区中读取出来,VIDIOC_DQBUF把数据放入视频数据缓存队列继续下一帧的采集。当接收到结束采集命令时,通过ioctl函数发送VIDIOC_STREAMOFF命令,停止视频采集。

    五、系统测试和结束语

           本系统对VGA信号采集成功后,利用MPEG4算法进行编码,并利用开源的JRTP库实现网络传输功能,客户端可实时观看和存储接收到的码流。在进行VGA信号采集编码的同时,可利用ADV7123芯片将VGA信号还原,在本地的显示器进行输出。经过实验测试,本系统具有较好的实时性,解码后的图像主观质量也很好。

    本文提出的基于TMS320DM355处理器,采用AD9883ADV7123转换芯片,结合FPGA技术的VGA信号采集方案,能够对XGA信号进行实时采集。该系统可广泛应用于雷达、天气预报、航空航天、通信等领域的图像数据实时记录。

     

    【参考文献】

    [1] Analog Devices.AD9883A/AD9883AData sheet[EB/OL].2007.http://www.analog.com/static/imported- files/data_sheets/ AD9883A.pdf.

    [2] 胡建民,郭太良,林志贤. AD9883在平板显示视频接口中的应用[J].现代电子技术, 20072):25-27.

    [3] TexasInstruments Incorporated. TMS320DM35x digital media system-on-chip videoprocessing front endVPFE RG spruf71a[EB/OL].[2009-08-10].http://focus.ti.com/lit/ug/spruf71a/spruf71a.pdf .

    [4] 朱文伟,许忠仁,基于FPGAV GA图像控制器的设计与实现[J ] .贵州大学学报:自然科学版,2009 ,30 (2):109- 111.

    [5] SCHIMEK Michael HDIRKS BillVERKUIL Hanset al. Video for LinuxTwo API specification [EB/OL]. [2009-10-20].http://www.soezblog.com/plate/web/bookmarkmsg.jsp?UI=cherng64&CI =368&p =1&BI=199102.

     

     

    最新回复(0)