摘 要: 基于嵌入式Linux技術(shù),,提出一種智能無線多媒體數(shù)字播放系統(tǒng)的設(shè)計方案,。介紹了系統(tǒng)功能、總體結(jié)構(gòu),、主控CPU和無線模塊,。通過Linux系統(tǒng)中SPI接口的驅(qū)動對無線模塊的控制,成功實現(xiàn)了區(qū)域位置自動識別和音視頻文件的受控播放以及與用戶進行交互的圖形化界面操作程序,。
關(guān)鍵詞: 嵌入式Linux,;SPI驅(qū)動;CYWUSB6934,;多媒體數(shù)字播放系統(tǒng)
隨著旅游業(yè)的進一步發(fā)展,,旅游市場電子產(chǎn)品更趨多樣性,以滿足不同消費人群的個性化需求,,目前常見的能提供語音服務(wù)的電子導(dǎo)游機只能提供單一的語音解說,,不能滿足游客追求視聽一體化享受的需求。如果在游客進入任一景點時,,可以通過手中的多媒體數(shù)字播放系統(tǒng),,在優(yōu)美的背景音樂中輕松聆聽富有內(nèi)涵的講解或在參觀、游覽的同時,,播放相應(yīng)景點的歷史畫面,,就能讓每一個游客得到深層次的精神享受。
嵌入式應(yīng)用技術(shù)已在消費類電子產(chǎn)品中得到廣泛應(yīng)用,,其高智能化,、可裁剪性、可移植性的特點已受到業(yè)界的推崇[1-2],。本文介紹一種智能無線多媒體播放系統(tǒng),,該產(chǎn)品將嵌入式應(yīng)用技術(shù)應(yīng)用于電子多媒體導(dǎo)游產(chǎn)品開發(fā),實現(xiàn)了視頻受控播放,,彌補了以往單一語音解說的不足,,也有重要的市場推廣價值。
1 系統(tǒng)組成
一種能夠自動接收并識別無線地址碼的嵌入式智能無線多媒體播放系統(tǒng)結(jié)構(gòu)如圖1所示,,該系統(tǒng)由手持智能無線多媒體終端和地址碼無線發(fā)射機構(gòu)成,。
地址碼無線發(fā)射機安裝在各個景點或展臺處,周期性地向外發(fā)射自身地址碼,,不同的景點/展臺具有不同的地址碼,,同一景點/展臺可以設(shè)置一個或多個相同地址碼的發(fā)射機,盡量讓所發(fā)射的信號覆蓋整個景點/展臺,,同時通過發(fā)射功率控制技術(shù)避免相鄰景點/展臺之間產(chǎn)生交叉干擾,。隨著用戶的移動,所攜帶的手持智能無線多媒體終端在走近某景點/展臺時會自動接收到對應(yīng)該景點/展臺的地址碼,,通過對該地址碼的解析,,接收終端調(diào)用并切換到該地址碼對應(yīng)的、預(yù)存在SD存儲卡中的音視頻文件進行播放,,用戶可通過LCD液晶觸摸顯示屏觀看播放內(nèi)容,,也可以終止自動播放,,手動選擇其他的音視頻文件進行播放。
2 系統(tǒng)設(shè)計
2.1 系統(tǒng)設(shè)計指標
設(shè)計指標為:各景點/展臺的覆蓋范圍5 m~25 m可調(diào),;各景點/展臺之間互不干擾,;景點識別編碼發(fā)射采用ISM頻段;信號發(fā)射功率在允許范圍之內(nèi)可調(diào),;能在溫度濕度相對惡劣的環(huán)境下工作,;使用智能化操作系統(tǒng),可隨時更新應(yīng)用程序,;自動實現(xiàn)不同景點/展臺的音視頻內(nèi)容切換,;擁有圖形用戶界面,用戶可通過觸摸屏手動選擇音視頻文件和語種,;可存放音視頻文件,,大小及數(shù)量根據(jù)SD存儲卡容量決定,可現(xiàn)場下載更新,;支持音頻MP3和MPEG1-4視頻文件播放,;發(fā)射主機符合國家相關(guān)標準。
為了滿足設(shè)計技術(shù)指標要求,,對構(gòu)成系統(tǒng)的主要器件選擇如下:(1)地址碼無線發(fā)射機的主控芯片選用TI公司的MSP430F133,;(2)手持智能無線多媒體終端的主控芯片選用三星公司的S3C2440A,該芯片典型主頻為400 MHz,,集成了NAND Flash控制器,、SD/MMC控制器、LCD控制器,、SPI接口控制器等,;(3)無線收發(fā)模塊選用CYWUSB6934;(4)Flash存儲器采用三星公司的K9F1208UOB,;(5)SDRAM采用Hynix公司的HY57561620T,;(6)顯示屏采用NEC 3.5′ TFT觸摸屏;(7)音頻解碼芯片采用UDA1341TS,。
嵌入式操作系統(tǒng)構(gòu)成如下:(1)Bootloader使用三星公司專為其產(chǎn)品開發(fā)的啟動代碼VIVI,;(2)內(nèi)核采用Linux2.6.13版[3];(3)文件系統(tǒng)選擇與NAND Flash兼容較好的YAFFS文件系統(tǒng)[4-6],;(4)圖形用戶界面采用QTOPIA1.7[7],。
2.2 ARM9嵌入式微處理器S3C2440A[8]
S3C2440A是三星公司基于ARM920T設(shè)計的一款處理器,主頻400 MHz,;擴展總線最大頻率100 MHz,;32 bit數(shù)據(jù),27 bit外部數(shù)據(jù)線,;完全靜態(tài)設(shè)計(0~400 MHz),;存儲控制器(8個存儲體),,4個帶有PWM的16 bit定時器;多達55個中斷源的中斷控制器,;RTC,;3個UART,,支持IrDA 1.0,;4個DMA通道支持外設(shè)DMA;8通道,,500 kS/s,,10 bit ADC;支持STN與TFT LCD控制器,;看門狗,;I2S音頻接口;2個USB接口,;I2C-Bus接口,;2個串行外圍接口電路(SPI);SD卡接口,。選擇ARM9芯片可以利用Linux操作系統(tǒng)來減少軟件開發(fā)時間,,而且S3C2440A對主流多媒體支持較好,很適合用于開發(fā)智能多媒體系統(tǒng),。
2.3 CYWUSB6934無線收發(fā)模塊[9]
無線收發(fā)模塊選用Cypress公司的CYWUSB6934,。該芯片既可用作發(fā)射,也可用作接收,,工作在2.4 GHz ISM 頻段,,頻率范圍為2.4 GHz~2.483 GHz。具有低功耗,、低輻射的特點(輻射功率最大為0 dBm),,且發(fā)射功率可調(diào)(共7個等級);無線接收靈敏度高,,可達-90 dBm,;通信半徑可達10 m(當輸出最大功率且無障礙物阻擋時的直線通信距離可達15 m左右)。采用直序擴頻(DSSS)技術(shù),,調(diào)制方式采用高斯頻移鍵控(GFSK),,與ARM之間接口為SPI口。由于其近距離,、低功耗等特點,,非常適用于短距離無線傳輸。
2.4 地址碼無線發(fā)射機[10]
地址碼無線發(fā)射機是以單片機為核心構(gòu)成的控制系統(tǒng),,主要包括電源模塊,、無線發(fā)射模塊和發(fā)射功率調(diào)整撥動開關(guān),,單片機與無線發(fā)射模塊的接口為SPI口。
2.5 手持智能無線多媒體終端
每個景點/展臺的音視頻內(nèi)容都以特定格式存儲在SD存儲卡中,,每一個文件以規(guī)定方式命名,,且對應(yīng)于一個地址碼。
手持智能無線多媒體終端開機完成硬件初始化,、Linux操作系統(tǒng)的啟動,、文件系統(tǒng)的掛載和圖形用戶界面的啟動后,由用戶點擊圖形桌面上的智能點播系統(tǒng)程序圖標運行點播程序,。該程序打開無線模塊,,開始監(jiān)聽信道,同時等待查詢信息的返回,。系統(tǒng)每隔1 s查詢一次CYWUSB6934的數(shù)據(jù)狀態(tài)寄存器,,當收到1 B的數(shù)據(jù)后,狀態(tài)字會自動改變,。系統(tǒng)查詢到這個信息后,,立即讀取CYWUSB6934的數(shù)據(jù)寄存器以獲得地址碼。系統(tǒng)會將接收到的地址碼與前一數(shù)據(jù)進行對比,,若相同則繼續(xù)播放,,若不同則自動切換到對應(yīng)該地址碼的文件進行播放。
3 智能無線點播的實現(xiàn)
微處理器S3C2440A和無線芯片CYWUSB6934之間通過SPI接口進行通信,,在Linux系統(tǒng)中兩者之間的通信就必須通過SPI驅(qū)動程序來實現(xiàn),。而智能點播則是在用戶啟動Linux系統(tǒng)中的點播程序時,系統(tǒng)識別接收到的數(shù)據(jù)后,,自動調(diào)用音視頻文件進行播放,。
3.1 SPI驅(qū)動
在Linux操作系統(tǒng)中,所有外圍設(shè)備的控制都是通過驅(qū)動程序?qū)崿F(xiàn)的,,設(shè)備驅(qū)動程序是操作系統(tǒng)內(nèi)核與機器硬件之間的接口,。
手持智能無線多媒體終端需要通過SPI接口控制無線收發(fā)芯片,這就需使用SPI接口驅(qū)動程序來建立無線收發(fā)芯片與內(nèi)核之間的通信橋梁,。SPI接口以主從方式進行工作,,其接口包括4種信號:(1)MOSI:主器件數(shù)據(jù)輸出,從器件數(shù)據(jù)輸入,;(2)MISO:主器件數(shù)據(jù)輸入,,從器件數(shù)據(jù)輸出;(3)SCLK:時鐘信號,,由主器件產(chǎn)生,;(4)/SS:從器件使能信號,由主器件控制。
圖2為S3C2440A與CYWUSB6934之間SPI接口的連接圖,。圖中nSS控制CYWUSB6934作為從器件,,SPIMOSI和SPIMISO是它們之間的數(shù)據(jù)傳輸通道,SPICLK為時鐘信號,。S3C2440A通過SPI接口與外部設(shè)備進行通信時,,可發(fā)送或接收8 bit同步數(shù)據(jù),其中兩路數(shù)據(jù)線信號的轉(zhuǎn)換與采樣由一路時鐘信號線進行同步,。SPI工作方式等的選擇由S3C2440A中的相關(guān)寄存器進行控制,。當SPI作為主控制器時,由SPPRE寄存器中相應(yīng)的比特位控制,。而當SPI為從設(shè)備時,,時鐘信號則是由其他設(shè)備提供。當程序?qū)?shù)據(jù)寫入SPTDAT寄存器時,,SPI的發(fā)送和接收操作同步進行。某些情況下,,在將數(shù)據(jù)寫入SPTDAT寄存器之前,,nSS應(yīng)該被置為高電平。在本系統(tǒng)中主要用到的S3C2440A內(nèi)部與SPI相關(guān)的寄存器如下:
(1)SPCON寄存器:主要用于設(shè)置時鐘開啟,、SPI傳輸格式,、SPI傳輸模式。其中傳輸模式有3種,,分別是polling模式,、DMA模式、中斷模式,。
(2)SPSTA寄存器:SPI接口的狀態(tài)寄存器,,用于指示數(shù)據(jù)接收或發(fā)送是否已經(jīng)完成。
(3)SPPIN寄存器:用于檢測是否有多個主機,。
(4)SPPRE寄存器:用于設(shè)置SPI傳輸時鐘頻率,。其值通過如下計算式確定:
Baud rate=PCLK/2/(Prescaler value+1)
其中Prescaler value的初始值為0x00。
(5)SPTDAT和SPRDAT寄存器:發(fā)射和接收數(shù)據(jù)寄存器,。
在Linux系統(tǒng)啟動時,,要對以上寄存器進行賦值,就必須通過SPI驅(qū)動程序,。而驅(qū)動程序就是作為系統(tǒng)和外部設(shè)備的一個橋梁,,在這里只有將SPI通道正確打開,系統(tǒng)才能夠通過這個橋梁對外部無線芯片的基本工作寄存器進行操作,,完成數(shù)據(jù)的收發(fā),。
Linux中的I/O子系統(tǒng)向內(nèi)核中的其他部分提供了一個統(tǒng)一的標準設(shè)備接口,這是通過include/linux/fs.h中的數(shù)據(jù)結(jié)構(gòu)file_operations完成的[11]。圖3所示為本系統(tǒng)中SPI驅(qū)動設(shè)備描述符函數(shù)組成框圖,。
圖3中驅(qū)動程序的struct file_operations( )只使用了系統(tǒng)提供的4個子函數(shù)接口:open( ),、write( )、ioctl( )和release( ),。其中open( )用于完成SPI設(shè)備的打開,、初始化相關(guān)寄存器、準備進行設(shè)備I/O操作,;write( )完成通過SPI接口進行寫操作,;ioctl( )是進行讀寫以外的其他操作,通過對I/O口高低電平的改變實現(xiàn)不同功能,;release( )用于關(guān)閉設(shè)備,,釋放占用內(nèi)存[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),它決定時鐘信號是高電平觸發(fā)還是低電平觸發(fā),,置0為active high,,置1為active low。根據(jù)這2個bit位的組合關(guān)系,,S3C2440A的SPI操作方式有4種[4]:Format A高電平觸發(fā),,F(xiàn)ormat A低電平觸發(fā),F(xiàn)ormat B高電平觸發(fā),,F(xiàn)ormat B低電平觸發(fā),。要使得S3C2440A能夠通過SPI接口對CYWUSB6934進行讀寫操作,,就必須讓它們的時鐘和傳輸形式都相同,。由圖3可以看出,CYWUSB6934的SPI單字節(jié)讀出時鐘是高電平觸發(fā)的,,又如虛線箭頭處時鐘信號的上升沿正與圖4中SPI時鐘相吻合,,而在圖4中cmd的2 bit位是傳輸字節(jié)中的最高2位,再根據(jù)圖5中 MOSI的MSB就應(yīng)該是傳輸字節(jié)的最高2位,,為00,,所以選擇方式為Format A高電平觸發(fā)。
在確定了它們之間的傳輸格式以及觸發(fā)方式后,, SPI驅(qū)動的實現(xiàn)就是對這些寄存器進行正確的賦值,。無線收發(fā)芯片CYWUSB6934通過SPI接口與ARM9主控芯片進行通信,,需要對各個寄存器進行設(shè)置。根據(jù)系統(tǒng)要求,,使用SPI1口實現(xiàn)SPI通信,,其具體的編程實現(xiàn)如下:
(1)在open( )函數(shù)中,對SPI接口進行初始化,,設(shè)置端口使用狀態(tài),,設(shè)置SPI傳輸時鐘和傳輸模式。其代碼如下:
在對S3C2440A中的SPI相關(guān)寄存器進行初始化時,,需要注意SPI的時鐘是與主時鐘相關(guān)聯(lián)的,,如果不首先開啟主時鐘,即使將SPI自身工作時鐘開啟也不能使接口正常工作,。
(2)通過寫函數(shù)write( )實現(xiàn)對無線收發(fā)芯片CYWUSB6934的數(shù)據(jù)及地址寄存器的操作,。其代碼如下:
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);/*向寄存器中寫預(yù)置數(shù)據(jù)*/
while((readl(SPSTA1) & 0x1)==0),;
tmp=readl(SPRDAT1),;/*再次從讀出的數(shù)據(jù)才是有用數(shù)據(jù)*/
put_user(tmp,(char*)buf),;
return 0,;
}
(3)驅(qū)動中的ioctl( )函數(shù)通過改變I/O輸出電平的高低控制CYWUSB6934的PD(Power Down)口。該端口電平為低時可以使無線芯片工作在休眠狀態(tài),,以達到省電的目的,。其代碼如下:
3.2 智能點播界面
當手持智能無線多媒體終端接收到由地址碼無線發(fā)射機發(fā)出的地址碼時,將其存儲在數(shù)據(jù)寄存器中,,主控芯片通過SPI接口讀取該地址碼信息,,并以此為指針搜索對應(yīng)的、預(yù)存在SD存儲卡中的音視頻文件,,并按需調(diào)用終端中的音視頻播放器解碼播放,。
軟件界面有2個按鈕,左邊是自動播放按鈕,,右邊是手動播放按鈕,。在用戶啟動點播軟件時,終端處于自動播放狀態(tài),而自動播放按鈕是當用戶進行手動播放后,,如需要再讓其進行自動播放時使用此按鈕,。當用戶點下手動播放按鈕時,會立即終止自動播放,,彈出文件選擇菜單,,手動選擇需要播放的文件。
智能點播軟件需要解決的是底層數(shù)據(jù)和上層應(yīng)用程序的連接問題,。因為該界面程序是建立在QTOPIA平臺[13-15]上的,,所以需要用Embedded C++程序完成主界面的建立和播放器的調(diào)用。而對地址碼的判斷是對底層進行操作,,需調(diào)用C程序,,則用戶界面程序使用一個自定義的data外部變量,作為上層界面程序與底層應(yīng)用程序的橋梁,。為了使程序能準確地調(diào)用播放器,,這里還設(shè)立了一個消息機制,定時查詢CYWUSB6934的數(shù)據(jù)寄存器,。一旦收到數(shù)據(jù),,就改變消息參數(shù),上層界面程序查詢到這個參數(shù)改變后,,便立即調(diào)用播放器,。
本文設(shè)計的基于嵌入式的無線智能多媒體數(shù)字播放系統(tǒng)將嵌入式應(yīng)用技術(shù)與短距離無線通信技術(shù)相結(jié)合,構(gòu)成一套既具有工程實用價值,,又可按需擴展功能的系統(tǒng),,實現(xiàn)了智能化的區(qū)域識別與音視頻播放,適用于各種景點及展臺的音視頻自動/手動受控播放,,有很好的市場前景,。
參考文獻
[1] 鄒思軼.嵌入式Linux設(shè)計與應(yīng)用[M].北京:清華大學(xué)出版社,2002.
[2] 管耀武,,楊宗德.嵌入式無線通信系統(tǒng)開發(fā).北京:電子工業(yè)出版社,,2006.
[3] O′REILLY.Building embedded linux systems[M].2003,4.
[4] Seokhyun Kim,,Yookun Cho.The design and implementation of flash cryptographic file system based on YAFFS[C]. School of Computer Science and Engineering,,Seoul National University,2008.
[5] Sudeep Jain,,Yann-Hang Lee.Real-time support of flash memory file system for embedded applications[C].Department of Computer Science and Engineering Arizona State University,,2006.
[6] CHEN Xing Wu,JIANG Xin Hua,,WANG Lei.Development on ARM9 system-on-chip embedded sensor node for urban intelligent transportation system[C].School of Information Science and Engineering,,Central South University,, 2006,6.
[7] 深圳市優(yōu)龍科技有限公司.Qt嵌入式圖形開發(fā)(實戰(zhàn)篇)[M]. 2004,,6.
[8] Samsung S3C2440X 32 Bit RISC microprocessor developer′s manual[M].Samsung Electronics,,2004.
[9] CYWUSB6934 datasheet[M].Cypress Corporation,2005.
[10] 馮文江,,邱宇,,張李鵬.智能無線電子解說系統(tǒng)的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2006(10).
[11] 孫天澤,,袁文菊,,張海峰.嵌入式設(shè)計及Linux驅(qū)動開發(fā)指南——基于ARM9處理器[M].北京:電子工業(yè)出版社,2006.
[12] O′REILLY.Linux device drivers third edition[M].2005,,2.
[13] BLANCHETTE J,,SUMMERFIELD M.C++ GUI programming with Qt 3[M].Prentice Hall Ptr,2004.
[14] 深圳市優(yōu)龍科技有限公司.Qt嵌入式圖形開發(fā)(入門篇)[M].2004,,6.
[15] 深圳市優(yōu)龍科技有限公司.Qt嵌入式圖形開發(fā)(基礎(chǔ)篇)[M].2004,,6.