基于CY7C68013A和 LGS一8GL5的USB电视棒设计
扫描二维码
随时随地手机看文章
图1为USB电视棒系统整体框图。虚线包含部分为电视棒主要数据流框图,从外部接收的数字电视射频信号经过调谐、解调后,以MPEG2并行形式传送给CY7C68013A芯片,再由芯片将其转为USB数据包传送给上位机。上位机的控制信息也经由USB数据包转发给CY7C68013A。该芯片将数据包转化为本地对各个外设(主要是调谐器和LGS一8GL5)的操作。除了正常的数据包,USB芯片还承担转发遥控器信息等其他扩展功能任务。系统主要功能模块分为tuner(调谐器)、demoduldator(LGS-8GL5解调器)、USB transceiver(CY7C68013A)。USB芯片作为I2C master控制调谐器的调谐和解调器的工作。LGS一8GL5解调后的TS流通过MPEG2接口传输给USB芯片转发给播放设备。电视棒设计工作主要包括处理TS流数据和控制各芯片进入对应的工作状态。下面分别论述TS流处理和芯片的控制。
2 TS流处理
2.1 TS流硬件连接
MPEG2视频传输接口标准分为异步串行接口标准ASI和同步并行接口标准SPI。ASI连线少,适合长距离传输但是处理复杂,CY7C68013A在硬件上没有提供接入异步串行标准的接口;SPI接口共有11位信号,分为8条数据线、1条时钟线、1条同步信号线和1条数据有效指示信号线,连线多但是处理简单。能否提供TS流硬件接口是在设计USB电视棒时选择USB芯片的一个关键因素。CY7C68013A具备可编程的slave FIF0接口,工作方式依据设置可为主或从。SPI方式符合其FIF0工作的一种模式,图2以LGS一8GL5并行SPI连接为例,给出了解调芯片和USB芯片之间的连接方式。
2.2 TS流数据处理
数据达到CY7C68013A后,可选是否需要USB芯片干预接收的数据或由USB自动提交数据到主机。前者的优点为可以通过USB芯片过滤部分错误和冗余数据包,或进行节目过滤以减小主机的负载,但是由于受USB芯片内部8051处理器性能的影响,对码流有一定限制;后者采用直通形式,能够有效发挥USB芯片的全速功能,但对主机端软件要求较多。由于TS流数据为持续的数据流而且对数据错误不敏感,由主机来对原始数据流处理具备较高的灵活性,在速度上也能适应更宽的要求。实际过程中设置CY7C68013A使其对slave FIF0中的数据自动转发。
3 控制信息的传递
控制信息包括通过I2C接口的对解调器和调谐器的控制命令、状态信息,以及从USB芯片接收的红外遥控命令。控制模式可采用两种方式:直接将各种控制打包成USB信息发送给主机,USB芯片仅保证基本数据通信的正确性,不对数据内容和返回信息做处理;另外一种方式为将对电视芯片的控制命令进行封装,重新定义和主机的通信命令,两种通信的数据流模型分别如图3(a)和3(b)所示。图3(a)中,主机对具体的控制命令不可见,其发送和接收的数据都是和USB固件约定的调用封装,数据的传输过程为:应用→库(将命令转换为USB包/USB解析出命令执行结果)→USB总线→CY7C68013A→USB固件(将命令转换为实际设备操作命令/将执行结果转换为和应用约定的返回值)→设备操作/应答。传输过程中实际的命令由CY7C68013A来完成。这种模式将对电视棒外围设备的操作都封装到USB固件中,简化了主机端驱动的操作。图3(b)对模块的控制和传输数据是透明的,实际通信内容的解析完全由主机的驱动完成,其数据传输过程为:应用→库→对虚拟设备的操作命令→对设备的操作转换为USB数据包/USB数据包转换为操作结果→USB总线→固件→固件执行I2C基本操作或红外操作→设备执行操作命令。该模式将设备的操作直接交给应用库完成,简化固件编程要求。
4 USB固件设计要求
USB固件设计考虑代码容量绝不能超过CY7C68013A代码空间的限制。虽然CY7C68013A的128脚封装可以扩展代码和数据空间,基于成本考虑,要求代码和数据不超过USB芯片内部SRAM的容量限制,这也是制约固件功能不能太复杂的一个关键因素。CY7C68013A支持从EEPROM或主机加载固件两种模式。直接将固件烧入EEPROM,对固件的升级相对比较繁琐,适合固件比较稳定的情况。采用动态加载固件的方法,能够方便地升级固件,是一种推荐的方法。USB固件的主要功能如下:初始化USB芯片状态,包括CPU时钟的设置、USB端点(EP)的设置以及针对实际物理连接的slave FIFO的设置;接收主机的I2C命令,转化为本地设备的操作;接收红外信息传送给主机。
TS流的传输因为设置为自动传输,发送过程中USB芯片中CPU不干预,故在流程图不可见。对遥控器的红外接收数据和I2C设备执行结果统一通过EPlIN采用中断模式上传给主机。
5 上位机控制要求
上位机对数字电视的应用针对不同操作系统已经定义出不同的架构。在常见的微软Windows平台上有TVand Broadcast Driver Architecture(简称BDA架构)。有关BDA详细信息请参考微软官方网站http://www.mi—crosoft.com/whdc/archive/broadcast.mspx;在Linux平台上有Linux Digital Video Broadcast(DVB) subsystem,其维护网站为http://linuxtv.org/。两种架构都对上层应用屏蔽了具体设备的细节,实现这种屏蔽需要编写相应的驱动完成从系统调用到自定义操作的转换过程。虚拟设备的操作直接暴露给操作系统以增强灵活性,而实际的操作转换为基本的I2C操作或红外操作,并经过USB进行包装发送给底层固件,固件剥离出原始数据后对模块执行实际的I2C操作或返回红外设备数据。针对不同操作系统,各自驱动的编写分别为:在Linux上主要为注册dvb_USB_devlceproperties结构中相关的方法;在BDA架构上主要为填充Bda—sup.1ib中要求的属性方法集。对主机的要求主要集中在两个方面:具备能够流畅解码当前数字电视压缩的音视频的能力;操作系统最好支持多线程,以方便解码和播放同步操作。