基于嵌入式Linux技术,提出一种智能无线多媒体数字播放系统的设计方案。介绍了系统功能、总体结构、主控CPU和无线模块。通过Linux系统中SPI接口的驱动对无线模块的控制,成功实现了区域位置自动识别 和音视频文件的受控播放以及与用户进行交互的图形化界面操作程序。
1、 系统组成
一种能够自动接收并识别无线地址码的嵌入式智能无线多媒体播放系统结构如图1所示,该系统由手持智能无线多媒体终端和地址码无线****机构成。
地址码无线****机安装在各个景点或展台处,周期性地向外****自身地址码,不同的景点/展台具有不同的地址码,同一景点/展台可以设置一个或多个相同地址码的****机,尽量让所****的信号覆盖整个景点/展台,同时通过****功率控制技术避免相邻景点/展台之间产生交叉干扰。随着用户的移动,所携带的手持智能无线多媒体终端在走近某景点/展台时会自动接收到对应该景点/展台的地址码,通过对该地址码的解析,接收终端调用并切换到该地址码对应的、预存在SD存储卡中的音视频文件进行播放,用户可通过LCD液晶触摸显示屏观看播放内容,也可以终止自动播放,手动选择其他的音视频文件进行播放。
2、 系统设计
2.1 系统设计指标
设计指标为:各景点/展台的覆盖范围5 m~25 m可调;各景点/展台之间互不干扰;景点识别编码****采用ISM频段;信号****功率在允许范围之内可调;能在温度湿度相对恶劣的环境下工作;使用智能化操作系统,可随时更新应用程序;自动实现不同景点/展台的音视频内容切换;拥有图形用户界面,用户可通过触摸屏手动选择音视频文件和语种;可存放音视频文件,大小及数量根据SD存储卡容量决定,可现场下载更新;支持音频MP3和MPEG1-4视频文件播放;****主机符合国家相关标准。
为了满足设计技术指标要求,对构成系统的主要器件选择如下:(1)地址码无线****机的主控芯片选用TI公司的MSP430F133;(2)手持智能无线多媒体终端的主控芯片选用三星公司的S3C2440A,该芯片典型主频为400 MHz,集成了NAND Flash控制器、SD/MMC控制器、LCD控制器、SPI接口控制器等;(3)无线收发模块选用CYWUSB6934;(4)Flash存储器采用三星公司的K9F1208UOB;(5)SDRAM采用Hynix公司的HY57561620T;(6)显示屏采用NEC 3.5′ TFT触摸屏;(7)音频解码芯片采用UDA1341TS。
嵌入式操作系统构成如下:(1)Bootloader使用三星公司专为其产品开发的启动代码VIVI;(2)内核采用Linux2.6.13版[3];(3)文件系统选择与NAND Flash兼容较好的YAFFS文件系统[4-6];(4)图形用户界面采用QTOPIA1.7[7]。
2.2 ARM9嵌入式微处理器S3C2440A
当前,嵌入式技术的应用越来越广泛,从航天科技到民用产品,嵌入式产品的身影无处不在,而这些嵌入式产品的核心——处理器决定了产品的市场和性能。在32位嵌入式处理器市场中,ARM处理器占有很大的份额。现在由于存储空间等原因,在嵌入式芯片上编程有较大的困难,选取合适的平台就显得很重要。Linux自出现以来,得到了迅猛的发展。Linux是开放源码的操作系统,吸引着全世界的程序员参与到发展和完善的工作中来,所以Linux保持了稳定而且卓越的性能。Linux在服务器领域已经占有很大的份额,在图形界面方面也不输于Windows。由于源码可以修改、移植,Linux在嵌入式领域中的应用也越来越广。
S3C2440A是三星公司基于ARM920T设计的一款处理器,主频400 MHz;扩展总线最大频率100 MHz;32 bit数据,27 bit外部数据线;完全静态设计(0~400 MHz);存储控制器(8个存储体),4个带有PWM的16 bit定时器;多达55个中断源的中断控制器;RTC;3个UART,支持IrDA 1.0;4个DMA通道支持外设DMA;8通道,500 kS/s,10 bit ADC;支持STN与TFT LCD控制器;看门狗;I2S音频接口;2个USB接口;I2C-Bus接口;2个串行外围接口电路(SPI);SD卡接口。选择ARM9芯片可以利用Linux操作系统来减少软件开发时间,而且S3C2440A对主流多媒体支持较好,很适合用于开发智能多媒体系统。
2.3 CYWUSB6934无线收发模块
无线收发模块选用Cypress公司的CYWUSB6934。该芯片既可用作****,也可用作接收,工作在2.4 GHz ISM 频段,频率范围为2.4 GHz~2.483 GHz。具有低功耗、低辐射的特点(辐射功率最大为0 dBm),且****功率可调(共7个等级);无线接收灵敏度高,可达-90 dBm;通信半径可达10 m(当输出最大功率且无障碍物阻挡时的直线通信距离可达15 m左右)。由于其近距离、低功耗等特点,非常适用于短距离无线传输。
2.4 地址码无线****机
地址码无线****机是以单片机为核心构成的控制系统,主要包括电源模块、无线****模块和****功率调整拨动开关,单片机与无线****模块的接口为SPI口。
2.5 手持智能无线多媒体终端
每个景点/展台的音视频内容都以特定格式存储在SD存储卡中,每一个文件以规定方式命名,且对应于一个地址码。
手持智能无线多媒体终端开机完成硬件初始化、Linux操作系统的启动、文件系统的挂载和图形用户界面的启动后,由用户点击图形桌面上的智能点播系统程序图标运行点播程序。系统查询到这个信息后,立即读取CYWUSB6934的数据寄存器以获得地址码。系统会将接收到的地址码与前一数据进行对比,若相同则继续播放,若不同则自动切换到对应该地址码的文件进行播放。
3、 智能无线点播的实现
微处理器S3C2440A和无线芯片CYWUSB6934之间通过SPI接口进行通信,在Linux系统中两者之间的通信就必须通过SPI驱动程序来实现。而智能点播则是在用户启动Linux系统中的点播程序时,系统识别接收到的数据后,自动调用音视频文件进行播放。
3.1 SPI驱动
在Linux操作系统中,所有外围设备的控制都是通过驱动程序实现的,设备驱动程序是操作系统内核与机器硬件之间的接口。
SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号****之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。手持智能无线多媒体终端需要通过SPI接口控制无线收发芯片,这就需使用SPI接口驱动程序来建立无线收发芯片与内核之间的通信桥梁。SPI接口以主从方式进行工作,其接口包括4种信号:(1)MOSI:主器件数据输出,从器件数据输入;(2)MISO:主器件数据输入,从器件数据输出;(3)SCLK:时钟信号,由主器件产生;(4)/SS:从器件使能信号,由主器件控制。
图2为S3C2440A与CYWUSB6934之间SPI接口的连接图。图中nSS控制CYWUSB6934作为从器件,SPIMOSI和SPIMISO是它们之间的数据传输通道,SPICLK为时钟信号。当SPI作为主控制器时,由SPPRE寄存器中相应的比特位控制。而当SPI为从设备时,时钟信号则是由其他设备提供。某些情况下,在将数据写入SPTDAT寄存器之前,nSS应该被置为高电平。在本系统中主要用到的S3C2440A内部与SPI相关的寄存器如下:
(1)SPCON寄存器:主要用于设置时钟开启、SPI传输格式、SPI传输模式。其中传输模式有3种,分别是polling模式、DMA模式、中断模式。
(2)SPSTA寄存器:SPI接口的状态寄存器,用于指示数据接收或发送是否已经完成。
(3)SPPIN寄存器:用于检测是否有多个主机。
(4)SPPRE寄存器:用于设置SPI传输时钟频率。其值通过如下计算式确定:
Baud rate=PCLK/2/(Prescaler value+1)
其中Prescaler value的初始值为0x00。
(5)SPTDAT和SPRDAT寄存器:****和接收数据寄存器。
在Linux系统启动时,要对以上寄存器进行赋值,就必须通过SPI驱动程序。而驱动程序就是作为系统和外部设备的一个桥梁,在这里只有将SPI通道正确打开,系统才能够通过这个桥梁对外部无线芯片的基本工作寄存器进行操作,完成数据的收发。
Linux中的I/O子系统向内核中的其他部分提供了一个统一的标准设备接口,这是通过include/linux/fs.h中的数据结构file_operaTIons完成的[11]。图3所示为本系统中SPI驱动设备描述符函数组成框图。
图3中驱动程序的struct file_operaTIons( )只使用了系统提供的4个子函数接口:open( )、write( )、ioctl( )和release( )。其中open( )用于完成SPI设备的打开、初始化相关寄存器、准备进行设备I/O操作;write( )完成通过SPI接口进行写操作;ioctl( )是进行读写以外的其他操作,通过对I/O口高低电平的改变实现不同功能;release( )用于关闭设备,释放占用内存[12]。
S3C2440A SPI的传输形式是由SPI控制寄存器SPCON中的1 bit位和2 bit位的值共同决定的。1 bit位是CPHA(Clock Phrase Select),它用来选择传输格式为Format A或Format B,置0为Format A,置1为Format B;2 bit位是CPOL(Clock Polarity),它决定时钟信号是高电平触发还是低电平触发,置0为acTIve high,置1为acTIve low。由图3可以看出,CYWUSB6934的SPI单字节读出时钟是高电平触发的,又如虚线箭头处时钟信号的上升沿正与图4中SPI时钟相吻合,而在图4中cmd的2 bit位是传输字节中的最高2位,再根据图5中 MOSI的MSB就应该是传输字节的最高2位,为00,所以选择方式为Format A高电平触发。
在确定了它们之间的传输格式以及触发方式后, SPI驱动的实现就是对这些寄存器进行正确的赋值。无线收发芯片CYWUSB6934通过SPI接口与ARM9主控芯片进行通信,需要对各个寄存器进行设置。根据系统要求,使用SPI1口实现SPI通信,其具体的编程实现如下:
(1)在open( )函数中,对SPI接口进行初始化,设置端口使用状态,设置SPI传输时钟和传输模式。其代码如下:
在对S3C2440A中的SPI相关寄存器进行初始化时,需要注意SPI的时钟是与主时钟相关联的,如果不首先开启主时钟,即使将SPI自身工作时钟开启也不能使接口正常工作。
(2)通过写函数write( )实现对无线收发芯片CYWUSB6934的数据及地址寄存器的操作。其代码如下:
static ssize_t spi_write(struct file*filp,const char*buf,size_t
count,loff_t*f_ops)
{
unsigned int tmp=0;
get_user(tmp,(char*)buf);/*获取CYWUSB6934中寄存器地址*/
while((readl(SPSTA1) & 0x1)==0);
writel(tmp,SPTDAT1);/*向寄存器中写预置数据*/
while((readl(SPSTA1) & 0x1)==0);
tmp=readl(SPRDAT1);/*再次从读出的数据才是有用数据*/
put_user(tmp,(char*)buf);
return 0;
}
(3)驱动中的ioctl( )函数通过改变I/O输出电平的高低控制CYWUSB6934的PD(Power Down)口。该端口电平为低时可以使无线芯片工作在休眠状态,以达到省电的目的。其代码如下:
3.2 智能点播界面
当手持智能无线多媒体终端接收到由地址码无线****机发出的地址码时,将其存储在数据寄存器中,主控芯片通过SPI接口读取该地址码信息,并以此为指针搜索对应的、预存在SD存储卡中的音视频文件,并按需调用终端中的音视频播放器解码播放。
软件界面有2个按钮,左边是自动播放按钮,右边是手动播放按钮。在用户启动点播软件时,终端处于自动播放状态,而自动播放按钮是当用户进行手动播放后,如需要再让其进行自动播放时使用此按钮。当用户点下手动播放按钮时,会立即终止自动播放,弹出文件选择菜单,手动选择需要播放的文件。
智能点播软件需要解决的是底层数据和上层应用程序的连接问题。而对地址码的判断是对底层进行操作,需调用C程序,则用户界面程序使用一个自定义的data外部变量,作为上层界面程序与底层应用程序的桥梁。为了使程序能准确地调用播放器,这里还设立了一个消息机制,定时查询CYWUSB6934的数据寄存器。一旦收到数据,就改变消息参数,上层界面程序查询到这个参数改变后,便立即调用播放器。
本文设计的基于嵌入式的无线智能多媒体数字播放系统将嵌入式应用技术与短距离无线通信技术相结合,构成一套既具有工程实用价值,又可按需扩展功能的系统,实现了智能化的区域识别与音视频播放,适用于各种景点及展台的音视频自动/手动受控播放,有很好的市场前景,能给厂商带来很大的利润。