DVB-C数字电视接收系统的设计与实现
2011-09-04王志德王晶辉郭淑琴
王志德,王晶辉,郭淑琴
(浙江工业大学信息与通信工程系,浙江杭州310023)
0 引言
数字电视接收设备主要分为电视卡、电视盒和电视棒3类[1],它使我们在电脑上收看数字电视节目成为了可能,无需网络,甚至无需连线。国外市场相对成熟,国内主要生产厂家有圆刚、美如画等,但因技术不成熟、价格高、信号覆盖范围小等因素影响,市场并未得到推广。然而,我国的数字电视技术[2]在这10多年的时间里一直在努力发展,特别是基于有线的数字视频广播已成为广播电视业的支柱产业。因此,现阶段针对有线数字电视方面的应用有着广阔的前景和良好的市场。所以,以USB接口作为传输接口开发一个简单易用的个人电脑外扩设备来播放有线数字电视就是一种不错的方案。本文提出的DVB-C数字电视接收系统正是接收有线电视网的信号并转换成满足MPEG-2标准的TS流通过USB接口传送给PC机进行音视频解码等处理,最终实现数字电视节目的实时播放。
1 系统硬件设计
DVB-C数字电视接收系统硬件电路主要由3部分组成:调谐器芯片、信道解调芯片、USB控制芯片。系统的整体结构框图如图1所示:
图1 DVB-C电视接收系统功能框图
调谐器输入来自有线电视网的48-860MHz的RF信号,经过带通滤波器滤除带外干扰信号后,由前置放大器进行低噪声放大,然后送入变频器进行变频得到36MHz中频信号。信道解调芯片接收中频信号先进行滤波,再经移相电路分成两路相位相差90°的I、Q信号送至QAM解调电路中进行QAM解调,再经过维特比解码(内码)和里德-所罗门解码(外码)卷积去交织器等完成前向纠错恢复输出满足MPEG-2标准以188字节为一包的TS流送至USB芯片。而USB芯片采用内部的FIFO与USB2.0智能接口引擎直接将TS流传输至PC机,由PC机先接收一段数据进行缓冲,再将数据源源不断地传给播放器软件进行音/视频分离与解码,实现实时播放[3]。
2 硬件电路
硬件方面,由于希望设计的USB数字电视接收器是一种体积小,功耗低,移动性好的设备,并且符合DVB-C传输标准,所以在芯片的选择上进行了一定的研究。最终决定,高频头选择Infineon公司的TUA6039,信道解调芯片选择 ST公司的 Stv0297芯片,USB传输控制芯片选择 Cypress公司的CY7C68013A芯片。
2.1 调谐器芯片TUA6039
TUA6039的制程采用双极半导体,很适用于在设计上以低成本与低耗电为主要考量的固定广播接收器。它是一具完全三波段的射频调谐器IC,拥有整合式的中频自动增益控制扩大器与相位闭锁回路,其功耗只有330mW。而且,TUA6039可以支持地面无线电视与有线电视应用上所有主要模拟与数字标准。
2.2 信道解调芯片STV0297
Stv0297芯片内部包含有解调模块、前向纠错模块、下变频模块、A/D模块和载波恢复电路模块等,并且系统程序可以通过芯片提供的一些实时的质量监控参数和锁定状态参数知道STV0297当前的状态。STV0297的输出端还提供了AGC(自动增益控制电路)及I2C控制总线。通过这些控制电路和总线来控制前端的调谐器,同时也简化了程序的设计。
2.3 USB控制芯片CY7C68013A
CY7C68013A[4,5]是Cypress半导体公司推出的EZ-USB FX2LP系列芯片中的主要成员,它集成了USB2.0协议的微处理器,其内部还包括智能串行接口引擎(SIE)、增强型8051内核、16KB的RAM、4KB的FIFO存储器、I2C控制器和通用可编程接口(GPIF)等。
EZ-USB提供了3种可用的接口模式:端口(I/O)、可编程的GPIF方式和Slave FIFO方式。其中,为了保证USB数据的传输速率,要求在与主机通信时不需要EZ-USB的CPU干预,外部逻辑直接对芯片内部的端点FIFO缓冲区进行读操作或写操作。所以,对于数字电视接收设备来说,USB芯片必须工作在Slave FIFO模式下。此时,CY7C68013A芯片与QAM解调芯片的主要引脚连接如图2所示。
图2 USB芯片主要引脚连接
在Slave FIFO模式[6]下,用到的关键寄存器主要有接口配置寄存器IFCONFIG(用于选择接口方式和时钟源)、端点配置寄存器(用于设置端点2、4、6、8的类型、传输方向、缓冲区大小与数量)、端点的Slave FIFO配置寄存器(决定PD引脚上的字节或字FIFO)、Slave FIFO接口引脚极性寄存器(决定主要引脚的正反极性)等等。
3 USB固件程序设计
在USB接口设计中,USB固件编程是整个设计任务的重要部分。USB芯片的主要功能实现都集中在固件程序设计上,它不仅用来实现USB设备的主要功能,还需要和USB主机进行数据通信。
3.1 固件框架
在使用EZ-USB芯片进行应用开发中,利用EZ-USB固件框架可以简化和加速开发基于EZ-USB芯片的外围设备。
固件框架就是一个简单的任务循环。其流程是先初始化状态变量,然后调用初始化函数TD_Init()使USB接口到未配置状态并使能中断。然后每隔1s进行一次设备重枚举,直到端点0接受到一个SETUP包。然后调用用户函数TD_Poll(),实现USB外设的主要功能。当接收到设备请求时,分析该请求并响应之。接着判断USB内核是否收到USB挂起信号。如果接收到,则调用用户函数TD_Suspend()。该函数成功返回为TRUE时,再检测是否有USB唤醒事件。如果未检测到,则处理器进入挂起方式;反之,则调用用户函数TD_Resume()。如果从TD_Suspend()函数返回为FALSE,则程序继续运行。
3.2 固件主程序
固件程序的主要任务是完成一些功能寄存器的初始化设置;并修改描述符指针,实现设备的重枚举过程;最后根据实际需求,添加相应代码来完成数据的接收与发送等特殊功能。
其中,主要对固件框架中的periph.c(用户任务调度函数文件)和dscr.a51(描述符表)进行了修改。dscr.a51中包含各种描述符,根据设计需要修改设备的VID、PID。periph.c中主要包括TD_Init()和TD_Poll()函数,TD_Init()函数负责初始化端点状态变量,须在这里设置成Slave FIFO模式,而在TD_Poll()函数中添加自定义用户代码以实现数据通信。基本函数结构如下:
4 驱动与播放软件
整个接收系统采用Windows平台,所以驱动软件部分采用BDA体系架构。BDA(Broadcast Driver Architecture)是微软提供的一种广播驱动体系框架。这种框架支持用于接收数字电视的各种网络拓扑构成,它包含了用于网络构造和控制的软构件,多路选择,表分析和IP数据递送等以适用于主要的数字电视标准包括DVB和ATSC等。在我们的接收系统中,BDA驱动主要提供对前端调谐器、解调芯片、USB接口的的控制,获取和传输TS流,以及为上层应用提供应用程序接口。
应用软件部分采用DirectShow中的过滤器[7]结构,它是微软提供在Windows平台上进行多媒体串流处理的一套软件开发组件,使用DirectShow,可以很方便地从支持BDA驱动的硬件上捕获数据并进行处理与播放。在DirectShow技术中,一个播放器由多个功能不同的Filter连接而成,这些Filter不是独立工作,而是互相联系、互相配合。按照功能不同,Filter大致可分为Source Filter、Transform Filter、Decoder Filter和Render Filter。其中,Source Filter由BDA驱动程序生成,Decoder Filter可以由第三方提供,Transform Filter和Render Filter都由DirectShow开发包提供。本系统搭建的Filter Graph如图3所示:
图3 系统Filter Graph
5 结束语
本文首先介绍了USB数字电视接收系统的总体设计方案,然后分别介绍了系统实现的几个关键点:硬件电路连接、USB固件程序设计和PC主机应用软件架构。该设计符合USB2.0标准,系统传输速率高,稳定性好,可扩展性好。同时,合理的改变软硬件模块就可以做成符合其他传输标准的数字电视接收系统。因此,该设计具有一定的实际应用价值与市场前景。
[1] 宋欣.数字电视卡的设计与实现[D].天津:天津大学,2005.
[2] 刘达.数字电视技术[M].北京:电子工业出版社,2007:28-36.
[3] 潘云忠,潘宜漾.有线电视数字机顶盒的原理与维修[M].北京:人民邮电出版社,2009:79-81.
[4] 赛普拉斯公司.FX2LP DMB-T/H TV Dongle[DB/OL].http://cypress.com/?rID=37775,2010 -07 -09.
[5] 薛园园.USB应用开发技术大全[M].北京:人民邮电出版社,2007:185-197.
[6] 仝瑞普.基于Slave FIFO模式USB数据传输系统设计与实现[D].南京:南京理工大学,2008.
[7] 陆其明.DirectShow开发指南[M].北京:清华大学出版社,2004:8-13.