在從事單片機(jī)的教學(xué)中,,由于學(xué)生對(duì)有聲音和顯示的制作項(xiàng)目更感興趣一些,。因此,在學(xué)習(xí)過程中這種興趣往往能讓他們完成項(xiàng)目,,獲得成就感,,從而學(xué)到更多的東西。
目前在技術(shù)上,,聲音的存儲(chǔ)大都使用大容量的NAND FLASH,,但一般按照文件系統(tǒng)的方式存儲(chǔ),這對(duì)學(xué)生有一定的難度,。本聲音播放器的聲音文件采用非文件方式存儲(chǔ)在NAND FLASH中,,這樣在不需要太多背景知識(shí)的情況下,可以比較簡(jiǎn)單地使用大容量的NAND FLASH存儲(chǔ)器,,降低了使用NAND FLASH存儲(chǔ)器的難度和成本,。
1 聲音播放器總體設(shè)計(jì)方案
聲音播放器總體設(shè)計(jì)框圖如圖l所示。其中存儲(chǔ)器用于存放聲音文件,,單片機(jī)將存儲(chǔ)器中的聲音文件名顯示在顯示器上,,并根據(jù)按鍵選擇要播放的聲音文件,從存儲(chǔ)器中將聲音文件的數(shù)據(jù)送到內(nèi)部的D/A轉(zhuǎn)換器,,D/A的輸出通過功放放大后送到喇叭放出聲音,。
圖1 聲音播放器總體設(shè)計(jì)框圖
其中,在選擇存儲(chǔ)器時(shí),,應(yīng)滿足大容量,、非易失、價(jià)格便宜等條件,,根據(jù)上述條件,,NAND FLASH為最佳選擇,這里選用K9G8G08型NAND FLASH,,其容量是1 G字節(jié),。對(duì)于WAV格式的語音信息,8 bit,、22.05 kHz,、單聲道足以滿足一般需求,,而對(duì)于音樂(歌曲)來講,44.1 kHz的采樣頻率也能達(dá)到較好效果,,因此,,該器件中能存儲(chǔ)約800 min語音或400 min音樂;顯示器采用122x32的LCM,,內(nèi)置控制器為SEDl520,,可以顯示14個(gè)漢字或28個(gè)英文字符;按鍵主要有放音/暫停,、停止,、上翻、下翻等,,采用獨(dú)立式按鍵,;單片機(jī)選用ELAN的EPG3231,該器件與5l系列單片機(jī)使用相似,。
設(shè)計(jì)聲音播放器關(guān)鍵需要考慮:聲音數(shù)據(jù)以何種格式,、何種方式載入K9G8G08。一種可直接用一個(gè)U盤,,通過計(jì)算機(jī)將數(shù)據(jù)下載到K9G8G08中,,聲音數(shù)據(jù)以文件方式存放。但這樣必須在單片機(jī)中完成與U盤的接口連接,,并且要熟悉計(jì)算機(jī)的文件格式,,這對(duì)單片機(jī)的初學(xué)者來講難度比較大。另一種是將聲音數(shù)據(jù)按順序存放在K9G8G08中(遇到壞塊時(shí)跳過即可),,這樣數(shù)據(jù)存放的物理地址對(duì)開發(fā)者來講是透明的,,再使用下載器就可以將聲音數(shù)據(jù)載入K9G8G08中。如果將下載器和聲音播放器做在一起,,同樣可以在線下載數(shù)據(jù),。
2 聲音播放器硬件電路設(shè)計(jì)
2.1 K9G8G08簡(jiǎn)介
K9G8G08是三星公司生產(chǎn)的1 Gx8 bit的NAND FLASH存儲(chǔ)器,工作電壓為2.7~3.6 V,,內(nèi)部存儲(chǔ)結(jié)構(gòu)為(2 K+64)字節(jié)/頁×128頁/塊×4096塊,。外部電路通過共用的8位I/0端口分時(shí)訪問其命令寄存器、地址寄存器和數(shù)據(jù)寄存器,,實(shí)現(xiàn)對(duì)器件讀,、寫和擦除等操作。其存儲(chǔ)器的命名方式參見文獻(xiàn),。K9G8G08采用48引腳的TSOP封裝,其引腳配置如圖2所示,。
圖2 K9G8G08引腳配置
2.2 EPG3231簡(jiǎn)介
EPG323l是ELAN公司的8位RISC單片機(jī),,它有11個(gè)8位并行口,、1個(gè)8位電流輸出型的D/A、1個(gè)10位逐次逼近型A/D,、1個(gè)通用異步收發(fā)器UART,、1個(gè)8,16,,24位的串行外設(shè)接口SPI,、3個(gè)定時(shí)器等,硬件資源豐富,,還支持手寫識(shí)別,、語音識(shí)別、ADPCM編解碼等功能,。另外,,EPG3-23l的速度較快,在時(shí)鐘頻率為16 MHz時(shí),,指令周期為125 ns,。
2.3 EPG3231與K9G8G08的電路連接
圖3為EPG3231與K9G8G08的電路連接圖。圖中沒有給出K9G8G08,,只給出了EPG323l的基本電路及用網(wǎng)絡(luò)標(biāo)號(hào)標(biāo)出的與K9G8G08的連接引腳,。K9G8G08的19引腳是寫保護(hù),在實(shí)際電路中接+3.3 V(不保護(hù)),。需要說明的是,,EPG323l的D/A輸出是48引腳(PBl),輸出電流信號(hào),,需要將其輸出轉(zhuǎn)換為電壓信號(hào)再送至后續(xù)的功放,。其中比較簡(jiǎn)單且可行的做法是在PBl與地之間接一只電阻來完成電流與電壓的轉(zhuǎn)換,關(guān)鍵是該電阻的取值,。若電阻阻值較大,,輸出波形的上部會(huì)出現(xiàn)限幅失真;若阻值較小,,則不能最大限度地利用D/A的動(dòng)態(tài)范圍,。因此確定該電阻阻值的方法是:先接一只可調(diào)電阻,寫一段測(cè)試程序,,向D/A反復(fù)連續(xù)地送00~FFH的數(shù)值,,通過示波器觀察PBl輸出,調(diào)整可調(diào)電阻,,使輸出為不失真的鋸齒波,,且最高點(diǎn)為3.3 V(即參考電源VREX(70引腳)電壓)。
圖3 EPG3231與K9G8G08的電路連接圖
另外,,圖3中使用EPG323l的D端口(PD0~PD7)與K9G8G08的I/O端口相連,,這個(gè)端口必須是雙向的,,使用其他的雙向端口也可以,但不要使用J端口和K端口,,這兩個(gè)端口適用按鍵的輸入/輸出(矩陣鍵盤時(shí)的掃描輸出),,速度比較慢,不能用于與K9G8G08的通信,。還需注意的是,,由于WAV文件中的編碼是無符號(hào)數(shù)(即OOH是最低電平,F(xiàn)FH是最高電平),,而EPG323l的D/A輸入是有符號(hào)數(shù)(即80H是最低電平,,7FH是最高電平),所以程序中應(yīng)將WAV聲音數(shù)據(jù)的最高位取反后送到D/A,。
3 聲音播放器軟件設(shè)計(jì)
在聲音播放器軟件設(shè)計(jì)之前,,應(yīng)確定好K9G8G08中數(shù)據(jù)存放的格式。
首先是地址的格式,。對(duì)K9G8G08內(nèi)部存儲(chǔ)單元操作的地址是分5個(gè)字節(jié)送出的,,所以地址的格式最好是按這5個(gè)字節(jié)編排,如表l所示,。
表一 地址的格式
其次,,根據(jù)NAND FLASH的特點(diǎn),其內(nèi)部是可能有壞塊(BAD BLOCK)存在的,,但BLOCK 0一定是有效塊(VALID BLl3CK),,所以將壞塊信息存在BLOCK 0中。而K9G8G08的有效塊的個(gè)數(shù)在3 99* 096之間,,也就是說,,壞塊的個(gè)數(shù)不大于100個(gè)。塊地址是由A19~A30決定的,,為方便程序的編寫,,將塊地址分3個(gè)字節(jié)存儲(chǔ),各個(gè)地址位的安排同表1中的第3,、4,、5個(gè)字節(jié),將A12~A18位放O,。壞塊信息存儲(chǔ)區(qū)最多占用300個(gè)字節(jié),。
第三,將聲音文件的目錄也存在BLOCK O中,。目錄中的每條記錄占用64字節(jié),,其中前5個(gè)字節(jié)是聲音文件的起始地址,同樣為了方便程序的編寫,每字節(jié)中包含的地址位與表1一致,;后面的59個(gè)字節(jié)是聲音的名字,,比如歌曲名等,,用0表示結(jié)束,,如表2所示。從表2中可知,,目錄區(qū)最多有4 088個(gè)記錄,,應(yīng)該能滿足一般的需要。
表二 存儲(chǔ)區(qū)分配
軟件設(shè)計(jì)中最關(guān)鍵的是對(duì)K9G8G08的操作,。該聲音播放器中,,程序只需對(duì)K9G8G08進(jìn)行讀操作即可。圖4為讀K9G8G08的軟件設(shè)計(jì)流程,。
圖4 K9G8G08的軟件設(shè)計(jì)流程
對(duì)K9G8G08讀操作的程序在定時(shí)器中斷中調(diào)用,。對(duì)于22.05 kHz或44.1 kHz的WAV文件,定時(shí)器的中斷周期分別為45.4μs或22.7μs,。對(duì)于單聲道,、8 bit的WAV文件,其頻率可以在文件頭的第18H,、19H字節(jié)得到,,對(duì)于22.05 kHz和44.1 kHz的WAV文件,這兩個(gè)字節(jié)的值分別是22H,、56H和44H,、ACH,聲音信息從第2CH個(gè)字節(jié)開始,。需要說明:1)寫入命令的操作包括送出命令字和在寫(WE)控制線上產(chǎn)生下降沿,;2)寫入5字節(jié)地址的操作要按表1中的順序向K9G8G08寫入5個(gè)字節(jié)的地址。每個(gè)地址的寫入包括送出地址和在寫(WE)控制線上產(chǎn)生下降沿,;3)輸入數(shù)據(jù)的操作包括在讀(RE)控制線上產(chǎn)生上升沿和讀入數(shù)據(jù),。
4 結(jié)束語
由于對(duì)不同型號(hào)的NAND FLASH的操作有可能略有差別,所以如果要使播放器同時(shí)能支持多種NAND FLASH,,應(yīng)該在程序中讀取器件的ID,,根據(jù)其ID選擇不同的讀NAND FLASH的程序。三星NAND FLASH的ID參見文獻(xiàn),。該聲音播放器具有盒式錄音機(jī)和復(fù)讀機(jī)的放音功能,,如果增加錄音功能,它完全可以是盒式錄音機(jī)和復(fù)讀機(jī)的替代品,,因?yàn)樗胁挥么艓Ш蜎]有復(fù)雜的,、易損壞的機(jī)械結(jié)構(gòu)的優(yōu)點(diǎn),是前兩者不能相比的。只是由于8 bit的量化分辨率略低了點(diǎn),,體現(xiàn)在播放音量較小的語音時(shí),,有點(diǎn)“嗚嗚”的噪音,這是量化誤差引起的,??梢圆捎迷诓シ牌髦惺褂?6 bit的WAV文件的方法來解決,但這會(huì)增加一倍的數(shù)據(jù)量,。也可以通過使用MP3文件的方法來解決,,這時(shí)它就是一臺(tái)MP3播放器了,但需要增加MP3解碼器(或用軟件解碼),。這里所提出的對(duì)NAND FLASH的使用方法簡(jiǎn)單易行,,基本上類似于對(duì)NOR FLASH或SRAM的使用,存儲(chǔ)器的物理地址對(duì)程序員來講是透明的,,易于理解和控制,。