一種數字錄音與回放系統實(shí)現方案
關(guān)鍵詞:閃速存儲器 DSP 數字錄音 回放
閃速存儲器(FLASH)是可快速擦寫(xiě)的非易失性存儲器,自Intel公司于1988年推出Flash Memory技術(shù)以來(lái)就得到了非常迅速的發(fā)展。FLASH 最大的特點(diǎn)是在不加電的情況下能長(cháng)期保持存儲的信息。此外,它還具有不需要存儲電容器、集成度更高、制造成本低于DRAM、使用方便、讀寫(xiě)靈活、訪(fǎng)問(wèn)速度快、功耗低等特點(diǎn)。我們結合實(shí)現課題,在一個(gè)以DSP為核心的語(yǔ)音處理系統中,從存儲容量、存儲時(shí)間、回放音質(zhì)等衡量語(yǔ)音處理系統優(yōu)越性的這些重要指標出發(fā),選用FLASH作片外存儲器,實(shí)現了語(yǔ)音數據的數字錄音和回放,既保證了系統的高性能,又減少了系統成本。
1 系統組成
實(shí)際系統是一個(gè)以DSP為信心的總線(xiàn)型網(wǎng)絡(luò ),每一個(gè)單元以TMS320F206數字處理芯片作微處理器,實(shí)現語(yǔ)音的傳送、錄音、存儲和播放??驁D組成如圖1所示。
在系統中, 聲卡采集的語(yǔ)音數據和從網(wǎng)卡傳送過(guò)來(lái)的數據都可以存入FLASH。由于存儲的是數字信息,數據不會(huì )丟失和失真,因此也不會(huì )引進(jìn)任何噪聲。本系統使用的存儲器是兩片4M位的FLASH,錄音時(shí)間長(cháng)達2分多鐘。
2 DSP與FLASH的接口電路設計
2.1 芯片簡(jiǎn)介
系統使用的DSP為T(mén)MS320C2XX系列,是美國TI公司推出的16位定點(diǎn)運算數字信號處理器。它的性?xún)r(jià)比極高,目前已成為高檔單片機的理想替代品,在通信、語(yǔ)音處理、軍事、儀器儀表、圖像處理等領(lǐng)域得到了廣泛的應用。系統使用的存儲器是AMD公司生產(chǎn)的FLASH芯片,型號為Am29F040B。其容量為512K8bit,提供的存儲時(shí)間有55、70、90、120及150ns幾種,因此高速微處理器(如DSP)對其進(jìn)行操作時(shí)基本上不需要等待時(shí)間。為避免總線(xiàn)競爭,該器件有獨立的片選、寫(xiě)使能與輸出使能控制,器件命令集符合JEDEC單電源供電的Flash標準,用標準微處理器寫(xiě)時(shí)序寫(xiě) Flash命令寄存器就可以控制其基本操作。Am29F040B具有省電方式,在FLASH沒(méi)有被使用時(shí)進(jìn)入此方式可以大大降低功耗。Am29F040B 還可以分扇區進(jìn)行操作,默認劃分為8個(gè)扇區,每扇區容量64K字節。
2.2 接口電路設計
接口電路設計主要考慮的是存儲器地址空間的分配以及寫(xiě)入和讀出的時(shí)序要求。在系統中,共需要1M地址空間。我們使用了兩片FLASH,而DSP的地址線(xiàn)只有 16根,最大只能提供64K的尋址空間,所以必須分頁(yè)使用,才能合理分配地址空間。為此,我們將每一片存儲空間分成32頁(yè),每頁(yè)16K字節,片A每頁(yè)地址從#8000h~#0bfffh,片B每頁(yè)地址從#000~#0ffffh?;谏鲜龇治?,DSP與FLASH的接口電路如圖2所示。
圖中只現出了DSP與一片FLASH的接口電路,因為另一片大同小異,只是通過(guò)不同的譯碼得到不同的片選而已。DSP用D0~D4選擇分頁(yè),A12~A15通過(guò)適當的譯碼來(lái)分配兩片FLASH的尋址空間。
3 FLASH編程方法
通過(guò)把特定的命令或命令序列寫(xiě)入到FLASH命令寄存器就可對FLASH實(shí)現各種操作。表1給出了有效命令的定義,如果寫(xiě)入的地址和數據值不正確或者寫(xiě)入的順序不對,則會(huì )使器件復位到讀陣列數據狀態(tài)。表中除xxx指任意值外,其它值皆為16進(jìn)制數,RA指要讀出的存儲器地址,RD指讀出的數據,PA指編程寫(xiě)入存儲器的地址,PD指編程寫(xiě)入存儲器的數據。編程時(shí),地址在WE#或CE#的下降沿鎖定,而數據在WE#或CE#的上升沿鎖定,SA指扇區地址。
表1給出了所有操作命令的定義。在本系統中,DSP對FLASH的控制主要用到的讀、刷新和編程操作,下面分別予以說(shuō)明。
表1 Am29F040B命令定義表
命令序列 | 周期數 | 總 線(xiàn) 周 期 序 列 | ||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | |||||||||
地址 | 數據 | 地址 | 數據 | 地址 | 數據 | 地址 | 數據 | 地址 | 數據 | 地址 | 數據 | |||
讀 | 1 | RA | RD | |||||||||||
復位 | 1 | xxx | F0 | |||||||||||
自動(dòng)選擇 | 廠(chǎng)商ID號 | 4 | 555 | AA | 2AA | 55 | 555 | 90 | X00 | 01 | ||||
器件ID號 | 4 | 555 | AA | 2AA | 55 | 555 | 90 | X01 | A4 | |||||
扇區保護確認 | 4 | 555 | AA | 2AA | 55 | 555 | 90 | SA X02 | 00 | |||||
01 | ||||||||||||||
編程 | 4 | 555 | AA | 2AA | 55 | 555 | A0 | PA | PD | |||||
芯片刷新 | 6 | 555 | AA | 2AA | 55 | 555 | 80 | 555 | AA | 2AA | 55 | 666 | 10 | |
扇區刷新 | 6 | 555 | AA | 2AA | 55 | 555 | 80 | 555 | AA | 2AA | 55 | SA | 30 | |
刷新懸掛 | 1 | xxx | B0 | |||||||||||
刷新繼續 | 1 | xxx | 30 |
3.1 讀陣列數據
讀操作很簡(jiǎn)單,只需要一個(gè)總線(xiàn)周期,直接把FLASH相應單元的數據讀出即可。上電后,器件自動(dòng)處于讀陣列數據狀態(tài);在完成刷新和編程操作后,器件也處于讀陣列數據狀態(tài);給器件寫(xiě)復位命令也可以使器件復位到讀陣列數據狀態(tài)。讀操作主要用于回放錄音內容。
3.2 字節編程命令序列
編程命令要復雜一些,每一個(gè)單元的寫(xiě)入都需要四個(gè)總線(xiàn)周期。頭兩個(gè)解鎖命令,緊接著(zhù)是編程建立命令,最后才是要寫(xiě)入單元的地址和數據。圖3是編程操作的基本流程。如何判斷是否已經(jīng)正確寫(xiě)入呢?器件內部提供了一個(gè)嵌入式編程算法,通過(guò)查詢(xún)DQ7或DQ6位可以得知編程操作狀態(tài)。嵌入式編程算法完成后,器件自動(dòng)返回讀陣列數據狀態(tài),地址不再鎖定。字節編程命令是進(jìn)行錄音的基礎。這里需要特別指出的是:編程時(shí)不能將存儲單元的任一位從“0”改成“1”,只有刷新操作才可以。因此,在FLASH的某一段存儲區已經(jīng)錄音后,如果不刷新,則這一段存儲區不能再進(jìn)行錄音操作。
3.3 芯片刷新命令
芯片刷新操作需要6個(gè)總線(xiàn)周期。頭兩個(gè)依然是解鎖命令,然后是刷新建立命令,接著(zhù)兩個(gè)附加解鎖寫(xiě)周期,最后是芯片刷新命令。刷新操作與編程操作不同之處在于:刷新操作對整個(gè)芯片是一次性完成而編程則需要一個(gè)單元一個(gè)單元地寫(xiě)入。當然,如果不希望芯片全部刷新,可以采用扇區刷新命令。刷新完成與否也可以通過(guò)查詢(xún)DQ7、DQ6或DQ2位來(lái)判斷。圖4給出刷新操作流程。
編程操作和刷新操作都需要進(jìn)行數據查詢(xún),統稱(chēng)為寫(xiě)操作狀態(tài)查詢(xún),用以判斷寫(xiě)操作是否已經(jīng)正確完成。Am29F040B提供了DQ2、DQ3、DQ5、DQ6以及DQ7幾個(gè)位用于寫(xiě)操作狀態(tài)查詢(xún),表2給出了這些位的功能。
表2 寫(xiě)操作狀態(tài)
操 作 | DQ7 | DQ6 | DQ5 | DQ3 | DQ2 | |
標準方式 | 編程 | DQ7# | 0、1交替 | 0 | N/A | 不變化 |
刷新 | 0 | 0、1交替 | 0 | 1 | 0、1交替 | |
刷新懸掛方式 | 讀刷新 懸掛扇區 | 1 | 不變化 | 0 | N/A | 0、1交替 |
讀非刷新 懸掛扉區 | Data | Data | Data | Data | Data | |
刷新懸掛編程 | DQ7# | 0、1交替 | 0 | N/A | N/A |
根據具體情況可以查詢(xún)不同的位。需要注意的是:使用DQ7和DQ2查詢(xún)狀態(tài)信息時(shí)需要一個(gè)有效地址,而如果DQ5位讀出為1則說(shuō)明編程或刷新操作已經(jīng)超出最大時(shí)序限制。在筆者的實(shí)際應用中,編程操作查詢(xún)DQ7位。當讀出DQ7位與寫(xiě)入的DQ7位一致時(shí),則說(shuō)明寫(xiě)入成功,可以繼續寫(xiě)入下一單元;刷新操作時(shí),則查詢(xún)任一單元(一般取最后一個(gè)單元)是否已經(jīng)是0FFh,如果是則刷新正確完成。
解決了DSP與FLASH的硬件接口電路和DSP對FLASH的軟件編程方法后,通過(guò)適當的程序控制,就可以實(shí)現系統的數字錄音與回放功能。既可以錄下 DSP網(wǎng)絡(luò )中接收到的語(yǔ)音數據,也可以通過(guò)聲卡采樣錄下說(shuō)話(huà)人的話(huà)音。該系統應用到語(yǔ)音教室,能順利地實(shí)現學(xué)生機的跟讀和復讀,而且錄音內容只要不刷新,即使掉電也不會(huì )丟失。在其它電子產(chǎn)品中,這種方法也可以得到有效的應用。
評論