單片機(jī)控制下的ISD芯片內(nèi)容復(fù)制電路的解決方案
摘 要:針對(duì)ISD系列語音錄放芯片內(nèi)容復(fù)制難的問題,較為全面地給出了源芯片多信息段起始地址的獲取方法,同時(shí)給出了一個(gè)單片機(jī)控制下的ISD芯片內(nèi)容復(fù)制電路的解決方案。
1 引言
ISD系列語音芯片是美國(guó)ISD公司(于1998年底被臺(tái)灣華邦兼并)推出的高品質(zhì)隨錄隨放型語音芯片。憑借該公司獨(dú)有的模擬語音及多層式儲(chǔ)存技術(shù)(analog speech & multilevel storage technology),ISD芯片將語音信號(hào)以模擬信號(hào)形態(tài)直接存儲(chǔ)于非易失性多級(jí)存儲(chǔ)陣列(一種E2PROM)里,使聲音的存儲(chǔ)與播放有別于一般電子合成語音,從而在錄放過程中無需經(jīng)過傳統(tǒng)形式的A/D、D/A轉(zhuǎn)換,進(jìn)而更能達(dá)到原音重現(xiàn)的效果。同時(shí),ISD芯片外圍控制電路簡(jiǎn)單,控制信號(hào)與TTL電平兼容,易于與微處理器配合使用,具有抗斷電功能,信息存放不易揮發(fā),支持多次錄放操作,可單獨(dú)應(yīng)用、多片級(jí)聯(lián),具有很好的使用靈活性。因此,ISD芯片可廣泛應(yīng)用于語音警報(bào)、信息提示、語音留言等消費(fèi)性、通信及工業(yè)控制、智能儀表等產(chǎn)品中。
然而,由于ISD芯片是模擬與數(shù)字電路的結(jié)合,對(duì)其內(nèi)部E2PROM中存放的電平信息不能像傳統(tǒng)數(shù)字量存儲(chǔ)器那樣通過編程器讀取,因此進(jìn)行批量復(fù)制較為困難。同時(shí),ISD芯片提供地址輸入線,支持直接地址操作,可分段存儲(chǔ)語音信息并精確控制語音的錄放,這就使得批量復(fù)制的一致性問題也很突出。雖然通過專用ISD器件開發(fā)設(shè)備可以解決這些問題,但對(duì)于少量應(yīng)用者,其成本偏高。因此,本文以ISD2532系列為例,給出了一種關(guān)于ISD系列語音芯片內(nèi)容復(fù)制的簡(jiǎn)單解決方案。
本文第2部分簡(jiǎn)單分析了ISD2532語音芯片原理,第3部分詳細(xì)敘述了ISD2532語音芯片內(nèi)容復(fù)制的實(shí)現(xiàn)。
2 ISD2532語音芯片原理[1]
ISD2532是ISD系列單片語音錄放集成電路的一種,錄音時(shí)間為32s,采樣頻率為8KHz,可提供優(yōu)于電話的音質(zhì),其內(nèi)部結(jié)構(gòu)如圖1所示。
ISD2532工作在錄音狀態(tài)時(shí),麥克風(fēng)采集到的小信號(hào)從MIC進(jìn)入,經(jīng)前置放大后從ANA OUT(模擬量輸出)輸出,經(jīng)過隔直電容后送入ANA IN(模擬量輸入)。這種輸入配置方式可以方便用戶自行設(shè)計(jì)性能更加優(yōu)良的前置放大器代替芯片內(nèi)部已有的功能部件,另外ANA IN可作為線輸入口(Line In),直接輸入電聲信號(hào)。進(jìn)入ANA IN的信號(hào)經(jīng)過放大器、自動(dòng)增益控制(AGC)以及低通濾波器,將被調(diào)整到存儲(chǔ)電路動(dòng)態(tài)范圍的最佳電平,最終將通過模擬收發(fā)器寫入E2PROM中。在ISD2532的放音模式下,錄入的模擬電壓在采樣時(shí)鐘的控制下,順序的從模擬存儲(chǔ)陣列讀出,并經(jīng)輸出通道上的平滑濾波器去掉采樣頻率分量后恢復(fù)出原始波形,送入多路器,以便與外界其他信號(hào)混合,而后送入功率放大器,并由SP+、SP-端輸出,進(jìn)而可直接驅(qū)動(dòng)揚(yáng)聲器。
ISD2532的典型錄放電路見圖2,外圍電路包括:麥克風(fēng)、揚(yáng)聲器、開關(guān)和少數(shù)電阻、電容,以及常用5V電源。其基本控制過程極為簡(jiǎn)單。首先將PD調(diào)為低電平,使芯片上電準(zhǔn)備工作,同時(shí)設(shè)置P/R電平(高電平為放音,低電平為錄音);然后輸入地址,制定錄放操作的起始地址;最后使CE為低電平,即在其下降沿啟動(dòng)放音操作,在低電平狀態(tài)啟動(dòng)錄音操作。一般情況下,放音操作自動(dòng)結(jié)束;當(dāng)PD或CE變?yōu)楦唠娖綍r(shí),即刻停止錄音操作。
ISD2532芯片可互斥工作于地址和模式兩種方式,這取決于地址引腳最高兩位的輸入狀態(tài)。當(dāng)最高兩位都為高電平時(shí),其余地址引腳就作為操作模式選擇端,芯片可按預(yù)設(shè)的多種模式進(jìn)行錄放,以便用最少的外圍器件實(shí)現(xiàn)最多的功能。否則,所有地址引腳的輸入均被解釋為地址位,用作當(dāng)前錄放操作的起始地址。由此可見,ISD2532芯片中的9位地址最多只能提供384個(gè)地址。好在ISD器件中的E2PROM存儲(chǔ)空間不是按字節(jié)編址的,而是以行為基本單位進(jìn)行編址。ISD2532內(nèi)部的256K E2PROM存儲(chǔ)器被均勻地規(guī)劃為320行,從0開始的每個(gè)地址指向其中的一行。ISD2532的錄放時(shí)間是32s,因此它的地址分辨率為100ms。
ISD器件可以進(jìn)行多段錄放操作,每段稱為一個(gè)信息段,占用一行或多行存儲(chǔ)空間,其中存放音頻數(shù)據(jù)和一個(gè)結(jié)束標(biāo)志(EOM)。錄音及放音功能均從設(shè)定的起始地址開始,錄音結(jié)束時(shí)芯片內(nèi)部自動(dòng)在該段的結(jié)束位置插入一個(gè)EOM標(biāo)志;而放音時(shí)遇到EOM標(biāo)志即自動(dòng)停止本段放音。
3 ISD2532芯片內(nèi)容復(fù)制的實(shí)現(xiàn)
和數(shù)字存儲(chǔ)器復(fù)制不同的是,ISD芯片中存儲(chǔ)的是連續(xù)變化的聲音模擬量,因而對(duì)于ISD芯片的內(nèi)容復(fù)制標(biāo)準(zhǔn)可放寬到只要求根據(jù)存儲(chǔ)信息回放的聲音信息聽起來相同即可。鑒于此,在控制源芯片放音的同時(shí),讓目的芯片錄音可達(dá)到內(nèi)容復(fù)制的目的,參見圖3,在單片機(jī)控制下,向源芯片和目的芯片發(fā)出相同的起始地址,同時(shí)控制兩個(gè)芯片的錄放操作即可實(shí)現(xiàn)復(fù)制目標(biāo)。
由于ISD芯片可以指定起始地址進(jìn)行錄放,所以,內(nèi)容復(fù)制必須保證在相同的起始地址處,源芯片和新復(fù)制的芯片存儲(chǔ)有聽起來相同的聲音信息。換句話說,復(fù)制過程必須保證兩芯片中存儲(chǔ)的信息段要實(shí)現(xiàn)地址對(duì)齊。因此,獲取源芯片中所有信息段的起始地址對(duì)于完成內(nèi)容復(fù)制任務(wù)是至關(guān)重要的。
3.1 源芯片地址信息獲取
ISD芯片的地址引腳只能作為輸入使用,因而在沒有專業(yè)開發(fā)設(shè)備的情況下,其內(nèi)部信息段的起始地址無法直接讀出[2]。然而在一般情況下,為充分利用存儲(chǔ)空間,芯片中第一個(gè)信息段的起始地址為0,并且上一段信息結(jié)束后的下一個(gè)地址就是當(dāng)前段的起始地址。所以,對(duì)于ISD2532芯片,設(shè)第i信息段的起始地址為Add[i],并占Len[i]行存儲(chǔ)空間,則有:
這樣,要獲得Add[i]就必須知道Len[i]。由于已知ISD2532的地址分辨率是100ms,所以第i信息段的時(shí)間長(zhǎng)度應(yīng)介于(Len[i]-1)x 100ms和Len[i] x 100ms。在源芯片播放時(shí),通過捕捉其輸出的EOM信號(hào)可以獲知某個(gè)信息段的結(jié)束[2]。因此,通過對(duì)每個(gè)信息段的播放時(shí)間進(jìn)行計(jì)時(shí)可確定該信息段占用的存儲(chǔ)空間大小,從而可得每個(gè)信息段的起始地址。
在芯片中信息段不連續(xù)存儲(chǔ)的情況下,我們不妨將第i信息段和第i+1信息段之間的空白行看為第i+1信息段的組成部分,這相當(dāng)于第i+1段的前面部分記錄了聽不到聲音的信息,并不影響聽覺。另外,由于ISD芯片在播放過程中,輸入地址保持不變,因此,如果源芯片所在系統(tǒng)電路便于測(cè)試,可直接通過測(cè)量的方法獲得所有信息段的起始地址。
3.2 內(nèi)容復(fù)制電路設(shè)計(jì)要點(diǎn)
ISD芯片內(nèi)容復(fù)制電路如圖4所示。圖中略去電源、自動(dòng)增益控制、XCLK等相關(guān)外圍電路,這部分可參考圖2。地址信號(hào)、控制信號(hào)和狀態(tài)信號(hào)均為數(shù)字信號(hào),可直接接至單片機(jī)(如MSC51系列)I/O端口,但考慮到有些單片機(jī)引腳的驅(qū)動(dòng)能力有限,一般應(yīng)加上拉電阻。例如,89C2051的P1口中的P1.0和P1.1是比較器端,沒有內(nèi)部上拉電阻,而P1口的其它端均有內(nèi)部上拉,因此用P1口控制ISD芯片的地址線時(shí),P1.0和P1.1兩端應(yīng)外接上拉電阻,否則地址控制會(huì)出錯(cuò)。
在圖4的復(fù)制電路中,源芯片工作在放音狀態(tài),從SP+輸出的聲音波形經(jīng)過分壓電阻R和隔直電容C的簡(jiǎn)單調(diào)整,即可被送入目的芯片的ANA IN輸入端,在錄音過程中被存儲(chǔ)在目的芯片的E2PROM中。
在單片機(jī)程序設(shè)計(jì)中,通常把源芯片中所有信息段的起始地址放在一張表中,這樣可以通過查表指令獲取起始地址,便于對(duì)每個(gè)信息段進(jìn)行放音錄音操作。同時(shí),應(yīng)該注意程序中的延時(shí)處理,通常在給出啟動(dòng)錄放操作的CE低電平之前,應(yīng)插入1~10ms的延時(shí),以確保PD、P/R和地址信號(hào)穩(wěn)定;在查詢到源芯片有效的EOM輸出狀態(tài)時(shí),考慮到ISD2532芯片的EOM低電平寬度為12.5ms,這里也應(yīng)加入12ms左右的延時(shí);最后,在進(jìn)入另一次循環(huán)處理下一信息段的復(fù)制之前,應(yīng)相應(yīng)地加入一些延時(shí),以確保芯片能穩(wěn)定工作。
4 結(jié)束語
本文在介紹ISD2532語音芯片原理的基礎(chǔ)上,針對(duì)ISD2532芯片內(nèi)容復(fù)制的問題,較為全面地給出了源芯片多信息段起始地址的獲取方法,同時(shí)給出了一個(gè)簡(jiǎn)單單片機(jī)控制下的ISD芯片內(nèi)容復(fù)制電路的解決方案。在調(diào)整相關(guān)參數(shù)情況下,該方案可適用于處理原理相近的ISD系列芯片的復(fù)制拷貝問題。
由于 ISD芯片具有現(xiàn)場(chǎng)錄音功能,ISD芯片在供電電源不穩(wěn)定,特別是上、下電期間可能會(huì)出現(xiàn)誤錄音問題;同時(shí),在允許用戶自定義錄音時(shí)可能存在錄錯(cuò)音問題。針對(duì)以上問題,本文提出的內(nèi)容復(fù)制電路也可作為一個(gè)模塊嵌入到實(shí)際系統(tǒng)中,作為恢復(fù)原始錄音的一種解決方案。