基于音頻接口的數(shù)據(jù)傳輸模塊設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要 由于移動(dòng)終端數(shù)據(jù)接口各不相同,使數(shù)據(jù)交換不便利。為了嘗試拓展音頻接口的應(yīng)用,文中設(shè)計(jì)了一種通信協(xié)議以保證模擬信號(hào)的可靠傳輸。開(kāi)發(fā)了可下載手機(jī)軟件,通過(guò)程序?qū)囊纛l輸入接口采集到的音頻信號(hào)進(jìn)行差分曼徹斯特解碼,并送到音頻輸出接口。程序由3個(gè)線程構(gòu)成,當(dāng)數(shù)據(jù)傳輸服務(wù)程序在手機(jī)上啟動(dòng)后形成,應(yīng)用嵌入式系統(tǒng)和控制軟件實(shí)現(xiàn)數(shù)字?jǐn)?shù)據(jù)的編解碼,數(shù)據(jù)信號(hào)在主控模塊中進(jìn)行編解碼處理,再通過(guò)控制裝置讀取、寫(xiě)入外部介質(zhì),并存儲(chǔ)數(shù)據(jù),設(shè)計(jì)中對(duì)線程設(shè)計(jì)、傳輸算法和協(xié)議格式進(jìn)行了研究。實(shí)驗(yàn)證明,設(shè)計(jì)能滿足串行通信的同步要求,保障了數(shù)據(jù)傳輸?shù)姆€(wěn)定性。
關(guān)鍵詞 音頻接口;數(shù)據(jù)傳輸;模塊設(shè)計(jì);數(shù)據(jù)格式
移動(dòng)終端操作系統(tǒng)應(yīng)用軟件功能強(qiáng)大,智能手機(jī)應(yīng)用已超出通話的原始功能,各種移動(dòng)應(yīng)用的開(kāi)發(fā)更充分體現(xiàn)了智能化、開(kāi)放式的趨勢(shì)。在移動(dòng)應(yīng)用中,如果要與外部設(shè)備交換信息,要通過(guò)專用的數(shù)據(jù)接口,但手機(jī)廠商的數(shù)據(jù)接口各不相同,外部設(shè)備難以兼顧,一些廠家限制數(shù)據(jù)接口的開(kāi)放,或收取高昂的使用費(fèi),或?qū)ν庠O(shè)生產(chǎn)方有嚴(yán)格的資質(zhì)要求,種種限制,制約了智能終端與外部設(shè)備的直接交流。
1 數(shù)據(jù)傳輸模塊的結(jié)構(gòu)設(shè)計(jì)
接口是智能終端系統(tǒng)與外界的連接電路,具有如下功能:(1)尋址能力。對(duì)送來(lái)的片選信號(hào)進(jìn)行識(shí)別。(2)輸入/輸出功能。根據(jù)讀/寫(xiě)信號(hào)決定當(dāng)前進(jìn)行的是輸入操作還是輸出操作。(3)數(shù)據(jù)轉(zhuǎn)換功能。并行數(shù)據(jù)與串行數(shù)據(jù)的轉(zhuǎn)換或兩種不同數(shù)據(jù)格式之間的轉(zhuǎn)換。(4)信號(hào)識(shí)別。識(shí)別就緒信號(hào)、忙信號(hào)等。(5)中斷管理。發(fā)出中斷請(qǐng)求信號(hào)、接收中斷響應(yīng)信號(hào)、發(fā)送中斷類型碼的功能。(6)復(fù)位。接收復(fù)位信號(hào),從而使接口本身以及所連的外設(shè)進(jìn)行重新啟動(dòng)。(7)可編程。用軟件來(lái)決定其工作方式,用軟件來(lái)設(shè)置有關(guān)的控制信號(hào)。(8)檢測(cè)信息。一些接口還可根據(jù)具體情況設(shè)置其檢測(cè)信息。
基于音頻輸入輸出接口的數(shù)據(jù)傳輸方法可以彌補(bǔ)數(shù)據(jù)接口不一致的缺點(diǎn),并擴(kuò)充音頻接口的應(yīng)用。在實(shí)現(xiàn)傳輸音頻模擬信號(hào)的系統(tǒng)上交換數(shù)字信號(hào),設(shè)計(jì)難點(diǎn)是如何通過(guò)模擬信號(hào)進(jìn)行數(shù)據(jù)通信,需要專門(mén)設(shè)計(jì)一種嚴(yán)格的通信機(jī)制或通信協(xié)議,保證基于手機(jī)音頻輸入輸出接口的數(shù)據(jù)傳輸可靠。
如果把終端作為主導(dǎo)裝置,由其產(chǎn)生位時(shí)鐘信號(hào)、命令選擇信號(hào)和數(shù)據(jù),但在綜合系統(tǒng)中,識(shí)別發(fā)送端比較困難。設(shè)計(jì)采用差分曼徹斯特編碼的數(shù)據(jù)傳輸協(xié)議,開(kāi)發(fā)了可下載手機(jī)軟件,并為外設(shè)存儲(chǔ)設(shè)備設(shè)計(jì)了實(shí)現(xiàn)編解碼及傳輸協(xié)議的嵌入式系統(tǒng)。模塊結(jié)構(gòu)示意如圖1所示。
外部裝置通過(guò)音頻輸入輸出接口與智能終端進(jìn)行數(shù)據(jù)通信,數(shù)據(jù)信號(hào)在主控模塊中進(jìn)行編解碼處理,再通過(guò)控制裝置讀取、寫(xiě)入外部介質(zhì),并存儲(chǔ)數(shù)據(jù)。數(shù)據(jù)傳輸?shù)木唧w方式中,外設(shè)裝置通過(guò)插入手機(jī)外置話筒音頻輸入接口或音頻線路輸入接口的連接線發(fā)送數(shù)據(jù)信號(hào)給手機(jī),外設(shè)裝置通過(guò)插入手機(jī)的外置耳機(jī)音頻接口或音頻線路輸出接口的連接插線,接收手機(jī)發(fā)送出的數(shù)據(jù)信號(hào)。
2 數(shù)據(jù)傳輸模塊的硬件設(shè)計(jì)
外部數(shù)據(jù)傳輸裝置由濾波電路、主控模塊、編解碼電路、讀寫(xiě)裝置組成。濾波電路分離固定頻率交流信號(hào)與數(shù)據(jù)信號(hào);讀寫(xiě)裝置包含一個(gè)標(biāo)準(zhǔn)曼徹斯特編解碼電路,讀寫(xiě)解碼電路采用BS730Q讀寫(xiě)專用解碼芯片,采用單軌道讀寫(xiě);實(shí)現(xiàn)的主控模塊電路選用低功耗的ARM微控制器,內(nèi)部有可編程工作寄存器,可以方便地與主機(jī)通信,但要有自己的數(shù)據(jù)協(xié)議,主控模塊對(duì)雙向信號(hào)進(jìn)行編解碼處理的過(guò)程是:(1)主控電路模塊將讀寫(xiě)裝置傳入的曼徹斯特編碼數(shù)據(jù)信息解碼成國(guó)標(biāo)數(shù)據(jù),再編碼為差分曼徹斯特編碼數(shù)據(jù)信號(hào),送到連接手機(jī)話筒接口或線路音頻輸入接口的傳輸線上。(2)主控電路模塊從連接手機(jī)耳機(jī)接口或線路音頻輸出接口的傳輸線上接收差分曼徹斯特編碼數(shù)據(jù)信號(hào),解碼成國(guó)標(biāo)數(shù)據(jù),再編碼為標(biāo)準(zhǔn)曼徹斯特編碼數(shù)據(jù)信息,送入讀寫(xiě)裝置。電路設(shè)計(jì)如圖2所示。
3 數(shù)據(jù)傳輸模塊的軟件設(shè)計(jì)
3.1 設(shè)計(jì)線程
通信雙方的手機(jī)終端采用軟件方法實(shí)現(xiàn),結(jié)構(gòu)如圖3所示。通過(guò)程序?qū)囊纛l輸入接口采集到的音頻信號(hào)進(jìn)行差分曼徹斯特解碼,并送到音頻輸出接口,程序由3個(gè)線程構(gòu)成,當(dāng)數(shù)據(jù)傳輸服務(wù)程序在手機(jī)上啟動(dòng)后形成3個(gè)線程:(1)創(chuàng)建一個(gè)音頻交流發(fā)送線程,負(fù)責(zé)設(shè)置輸出最大音量,生成固定頻率音頻交流信號(hào)并發(fā)送到音頻輸出線路上。(2)創(chuàng)建一個(gè)監(jiān)聽(tīng)音頻輸入接口數(shù)據(jù)的線程,負(fù)責(zé)對(duì)從音頻輸入接口采集到的音頻信號(hào),進(jìn)行差分曼徹斯特解碼,解碼輸出數(shù)據(jù)存放在接收數(shù)據(jù)緩存,通過(guò)調(diào)用外部業(yè)務(wù)程序注冊(cè)的回調(diào)函數(shù),通知外部業(yè)務(wù)程序注冊(cè)取得傳入的數(shù)據(jù)。(3)主線程循環(huán)等待發(fā)送數(shù)據(jù)緩存中的數(shù)據(jù)存入事件,當(dāng)外部業(yè)務(wù)程序在數(shù)據(jù)要發(fā)送時(shí),將要發(fā)送的數(shù)據(jù)放入共享的發(fā)送數(shù)據(jù)緩存時(shí),數(shù)據(jù)存入事件發(fā)生,所述的主線程取到要發(fā)送的數(shù)據(jù),進(jìn)行差分曼徹斯特編碼,再用操作系統(tǒng)的音頻控制接口函數(shù)發(fā)送到音頻輸出接口。
3.2 數(shù)據(jù)格式
音頻輸入輸出線路上傳輸?shù)臄?shù)據(jù)信號(hào)采用差分曼徹斯特編碼,不進(jìn)行載波調(diào)制與解調(diào),直接在音頻線路上傳輸數(shù)據(jù)編碼信號(hào)。具體協(xié)議機(jī)制如下:
(1)基于音頻輸入輸出接口的數(shù)據(jù)傳輸方法是一種串行通訊方法,參考標(biāo)準(zhǔn)同步串行通訊協(xié)議,采用差分曼徹斯特編碼,其特點(diǎn)為每發(fā)送一位至少有一個(gè)跳變,以適應(yīng)在只能傳輸交流的音頻輸入輸出線路上傳輸數(shù)據(jù)。通信信號(hào)中使用中間時(shí)刻的跳變來(lái)表示發(fā)送的0或1,第一個(gè)跳變的如果是正跳變表示1,如果是負(fù)跳變表示0,之后的跳變與前一個(gè)跳變進(jìn)行差分,由相比較的結(jié)果決定是1或0,如果當(dāng)前位跳變方向與前一位的跳變方向相同,則表示為0,否則表示為1。采用差分曼徹斯特編碼,通信雙方的同步允許差半位時(shí)間,同步差半位時(shí)間內(nèi)接收的數(shù)據(jù)也不受影響。
(2)數(shù)據(jù)傳輸是雙工方式,從手機(jī)輸出數(shù)據(jù)的傳輸使用音頻輸出線路,進(jìn)入手機(jī)的數(shù)據(jù)傳輸使用音頻輸入線路,發(fā)送數(shù)據(jù)前讓總線空閑準(zhǔn)備,提示接收方做好接收準(zhǔn)備??偩€空閑準(zhǔn)備是用連續(xù)發(fā)送8位以上的0來(lái)表示。
(3)串行通訊采用幀起始標(biāo)志進(jìn)行同步,幀起始可以從任意一位開(kāi)始,串行通訊的幀起始標(biāo)志采用與標(biāo)準(zhǔn)串口通信同步中一樣的標(biāo)識(shí),即連續(xù)發(fā)送6個(gè)1,即發(fā)送字符0x7e表示發(fā)送了幀起始標(biāo)志。
(4)串行通訊采用幀結(jié)束標(biāo)志表示本次數(shù)據(jù)發(fā)送結(jié)束,進(jìn)入總線空閑狀態(tài)。連續(xù)發(fā)送7個(gè)1,即發(fā)送字符0x7f表示發(fā)送了幀結(jié)束。串行通訊中,線路上傳輸?shù)臄?shù)據(jù)的單位為位,發(fā)送Byte時(shí)首先發(fā)送最高位,最后發(fā)送最低位,發(fā)送數(shù)據(jù)時(shí)字節(jié)間沒(méi)有間隔。發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)中很可能有連續(xù)的6個(gè)1,這與幀起始標(biāo)志和幀結(jié)束標(biāo)志相同,會(huì)造成通訊歧義。為消除歧義,規(guī)定當(dāng)發(fā)送數(shù)據(jù)時(shí),連續(xù)發(fā)送5個(gè)1后,必須發(fā)送一位無(wú)效的0,再接著發(fā)送其他數(shù)據(jù)。而接收到連續(xù)的5個(gè)1后,需要?jiǎng)h除接著收到的0。這連續(xù)的5個(gè)1并非一定在1個(gè)Byte中,例如,兩個(gè)Byte 0x0f和0xc0,每個(gè)Byte都沒(méi)有連續(xù)的5個(gè)1,但先發(fā)送0x0f后發(fā)送0xc0時(shí),就有連續(xù)的5個(gè)1了,需要?jiǎng)討B(tài)插入、刪除一位0。
(5)所述基于音頻輸入輸出接口的串行通訊中,編碼信息流一般以塊形式表示,一個(gè)信息流塊包含:塊頭和塊負(fù)載信息,線路上傳輸?shù)臄?shù)據(jù)幀格式如圖4所示。
4 結(jié)束語(yǔ)
根據(jù)嵌入式開(kāi)發(fā)的一般原理,設(shè)計(jì)了數(shù)據(jù)傳輸模塊的結(jié)構(gòu),進(jìn)而完成數(shù)據(jù)傳輸模塊的硬件設(shè)計(jì),軟件設(shè)計(jì)中完成了主控系統(tǒng)、各相關(guān)電路的控制程序,采用差分曼徹斯特碼傳輸數(shù)據(jù),能滿足串行通信的同步要求,保障了數(shù)據(jù)傳輸?shù)姆€(wěn)定性。