- 相關推薦
嵌入式藍牙PSTN語音接入點的設計與實現(xiàn)
摘要:首先,闡述藍牙在公共交換電話網絡PSTN中的一種應用——三合一電話。然后,分別從硬件、驅動程序、應用軟件三個方面進行詳細介紹。最后,給出測試結果,并提出改進方案。關鍵詞:藍牙公共交換電話網絡PSTN接入點μClinux設備驅動程序
引言
源碼開放的μClinux由于其強大的網絡功能和較低的成本,得到了廣泛的應用。嵌入式藍牙公共交換電話網絡PSTN(PublicSwitchedTelephoneNetwork)語音接入點,就是我們和廣東省電信科學研究院合作,在μClinux系統(tǒng)上開發(fā)的一種具有廣闊前景的應用。其應用場景如圖1所示。
藍牙GSM雙模手機在進入藍牙PSTN語音接入點的信號覆蓋范圍后,即自動通過接入點在PSTN網絡上登記,這樣用戶的話務就被轉移到PSTN網絡,使用時只需繳納固定電話費;網關具有小型交換機的功能,可以為多個藍牙手機提供類似的服務;而且同一個接入點信號覆蓋范圍之內的藍牙手機間,還可以不經過PSTN直接進行相互間通話,就像對講機一樣,不用付費。本文主要介紹接入點軟硬件以及設備驅動程序的設計與實現(xiàn)。
1硬件的設計與實現(xiàn)
嵌入式藍牙PSTN語音接入點的硬件系統(tǒng)框圖如圖2所示。整個接入點主要由網關控制模塊、電話線路接口模塊和藍牙收發(fā)模塊組成。
1.1網關控制模塊
網關控制模塊是整個網關軟件的運行平臺。ΜClinux操作系統(tǒng)運行于此硬件平臺之上,而所有應用軟件又運行于操作系統(tǒng)之上。復雜的控制流程以及大量的外擴模塊要求MPU具有較強的處理能力。經多方權衡,本設計最終選用了Motorola公司的ColdFire嵌入式處理器MCF5272。
MCF5272內部的SRAM和ROM對于運行μClinux操作系統(tǒng)是遠遠不夠的。本設計對MCF5272的RAM和ROM進行了擴充,外擴了16MB的SDRAM和4MB的FlashROM。這樣的存儲器配置不僅滿足了語音接入點軟件的需要,還為網關增加各種功能留有較多的余地。
1.2電話線路接口模塊
電話線路接口模塊是網關和PSTN的接口,由線路切換繼電器、電話線接口芯片、DTMF接收電路、DTMF發(fā)送電路和FSK解調及振鈴接收電路組成。它通過MCF5272的12根GPIO線和4個外部中斷線和網關控制模塊相連。線路切換繼電器用于實現(xiàn)電話線上的信號在振鈴接收電路和語音電路之間的切換,即實現(xiàn)摘機掛機的功能。在待機狀態(tài)下繼電器觸點切換在振鈴接收電路一側,等待接收振鈴信號。當需要摘機時,MCF5272控制繼電器切換到話音電路一側。
電話線路接口芯片選用Philips公司的TEA1062A。TEA1062A把電話線上送來的模擬語音信號放大后發(fā)送到藍牙收到模塊的PCM編解碼器;相反,也把PCM編解碼器送來的語音信號放大后,放到電話線上傳輸。此外,它還提供了消側音、自動增益控制等功能。
網關還需具備轉發(fā)來電顯示信息的功能。常見的來電顯示標準分為DTMF和FSK兩種。我國的來電顯示國家標準是FSK制式的,大部分PSTN交換機也支持FSK標準的來電顯示信息;但是也有少量PSTN交換機和一些用戶內部交換機發(fā)送的是DTMF標準的來電顯示信息。我們HOLTEK的HT9170D以及HT9032C芯片分別接收DTMF及FSK來電顯示信息。
網關向PSTN交換機撥號和普通的電話一樣,采用DTMF信號,同時也可以用DTMF信號向PSTN交換機發(fā)送一些信令信息。網關的DTMF發(fā)送選用FOLTEK的HT9200A芯片。
1.3藍牙收發(fā)模塊
藍牙收發(fā)模塊包括藍牙射頻電路、基帶處理電路和PCM編解碼電路,通過MCF5272的UART1和網關控制模塊相連。語音信號通過PCM編解碼器MC145483和電話接口芯片TEA1062A連接。語音信號通過PCM編解碼器MC145483和電話接口芯片TEA1062A連接。MCF5272把藍牙模塊接收到的數據通過協(xié)議棧解釋為摘機、掛機、撥號、來電顯示等命令,并通過數據線控制電話語音接收與撥叫電路的各種操作。PSTN市話網用戶線與電話線路接口模塊連接,電話線路接口模塊把外部PSTN電話網的振鈴信號和來電顯示信息通過數據線傳遞給MCF5272。MCF5272再把這些信號通過藍牙軟件棧打成數據包并送給藍牙模塊,由藍牙模塊通過無線信道發(fā)送給終端。電話線上的模擬語音信息通過PCM編解碼器編碼后經藍牙模塊發(fā)送給終端,同時藍牙模塊接收終端發(fā)送過來的語音數據,經過PCM編解碼器解
碼,形成模擬語音信號,通過電話接口芯發(fā)送到電話線上。本設計中的藍牙基帶和射頻電路由CSR的BlueCore01b芯片加上功放、低噪放、收發(fā)切換開關、濾波器和一些外圍電路組成。
2驅動程序的設計與實現(xiàn)
2.1μClinux設備驅動程序概述
在μClinux下,所有的硬件設備都被視為文件,從設備接收輸入數據和將輸出送到設備就像從普通文件接收輸入和將輸出送到文件一樣,可以使用read()、write()等系統(tǒng)調用。應用程序通過系統(tǒng)調用和內核交互,而內核則通過設備驅動程序和具體硬件交互,如圖3所示。一般來說,操作系統(tǒng)內核需要訪問三類主要設備:字符型設備、塊型設備以及網絡設備。本接入點的驅動程序屬于字符設備驅動程序。
每個驅動都有一個稱為file_operations的數據結構,包含指向驅動程序內部大多數函數的指針。當系統(tǒng)引導時,驅動程序初始化函數將file_operations結構的指針送給內核,內核就可以通過該指針訪問驅動程序內的函數。因而,這些函數就是進入驅動程序的基本入口點。當用戶程序執(zhí)行系統(tǒng)調用時,將導致驅動程序內相應的函數被調用。
2.2需求分析
嵌入式藍牙PSTN語音接入點的硬件設計中,電話線路接口模塊、藍牙收發(fā)模塊是外擴的模塊,需要在μClinux內核為基提供支持。
藍牙收發(fā)模塊通過MCF5272的串口2和網關控制模塊相連,因而直接使用μClinux自帶的串口驅動程序就可以完成對此模塊的控制;而電話線路接口模塊通過GPIO口以及外部中斷線與網關控制模塊相連,必須由我們自由提供驅動程序。
2.3FSK來電顯示芯片驅動的設計與實現(xiàn)
FSK來電顯示驅動的主要任務就是完成FSK來電顯示信息的接收,總工作流程如圖4所示。其主要功能由設備驅動程序基本入口點中的open、release、read、ioctl、select函數,以及設備初始化函數、中斷處理函數、下半部分處理函數、定時器超時處理函數完成。下面對其中一些關鍵的函數進行簡要介紹。
。1)read函數
read、write稱為對設備的I/O操作。當用戶進程對設備執(zhí)行I/O操作時,設備可能并不具備進行I/O操作的條件。這些情況下,用戶進程可以選擇繼續(xù)等待,即通過interruptible_sleep_on()函數讓用戶進程進入睡眠狀態(tài);也可以選擇不等待,立即返回。這就產生一兩種類型的I/O操作,即阻塞型I/O和非阻塞型I/O。我們的驅動同時支持阻塞型和非阻塞型的讀操作。
圖4
。2)ioctl函數
設備特殊文件之所以特殊就是因為它代表一個設備,可以通過它對設備的屬性進行設置,這和對設備的I/O操作不同。我們通過ioct1函數來實現(xiàn),ioct1的實質就是向設備發(fā)送命令來改變設備的屬性。在實現(xiàn)此驅動的過程中發(fā)現(xiàn),F(xiàn)SK來電顯示芯片在沒有真正的FSK數據的時候也會受到干擾,使數據線上有電平的跳動,從而產生不應該產生的中斷對系統(tǒng)的性能造成影響,因而提供了2個ioct1命令給用戶進程,來控制FSK中斷的打開與關閉。
(3)select函數
為了使用戶進程可以使用I/O多路轉接技術,在驅動程序中實現(xiàn)了select函數。當用戶進程執(zhí)行select系統(tǒng)調用的時候,每一個加入select測試集合的設備的select函數都被調用,如果其中任何一個或多個設備可以進行要求的I/O操作,則select返回;否則,通過select_wait()函數讓用戶進程進入睡眠狀態(tài),直到有任何一個設備可以進行要求的I/O操作或超時為止。
(4)中斷處理函數及下半部分處理函數
FSK來電顯示芯片只有1根數據線連接到CPU的GPIO口上。這根數據線的每一字節(jié)數據都以0開始、以1結束,中間是8位的ASCII碼,最低位最先發(fā)送,在沒有數的時候數據線一直保護高電平。由于FSK來電顯示數據具有這種特殊的格式,把這根數據線同時接到CPU的外部中斷線上,并設置為下降沿觸發(fā),這樣每來1字節(jié)數據就會產生一次中斷。FSK數據幀由若干字節(jié)這樣的數據組成。FSK數據速率是1.2kb/s,因而1個bit延續(xù)約0.83ms。這樣收一個字節(jié)的數據就需要耗費約8.3ms的時間。顯然在中斷處理程序里面接收數據是不合適的,所以在中斷處理程序中只調用mark_up函數標記數據的到來,而把接收及處理數據的任務留到下半部分程序中完成。
下半部分程序負責接收1字節(jié)的FSK來電顯示數據,由于1字節(jié)數據中可能有多個下降延,所以在進入處理函數后首先要關閉FSK中斷,然后每0.83ms讀一次GPIO口,接收一位的數據,收完1字節(jié)數據后要打開FSK中斷,以接收下一字節(jié)的數據。
根據本次FSK中斷是否為此次通信的每一個中斷,可以判斷本次接收的是否為FSK數據幀的第一個字節(jié),如果是,那么將啟動一個內核定時器,其超時時間設為1s(因為一個FSK數據幀的傳輸時間不會超過1s)。在定時器超時后,內核將調用定時器超過時處理函數,提取出主叫用戶的電話號碼,并通過wake_u
p函數喚醒任何等待讀此設備的用戶進程。
圖5
2.4DTMF語音撥號、來電顯示驅動的設計與實現(xiàn)
由于DTMF芯片要提供雙音多頻撥號的功能,所以與FSK芯片驅動相比,DTMF芯片驅動中多了一個write函數。DTMF芯片的多音多頻撥號部分有2根線和CPU相連:1根數據線、1根時鐘線。Write函數實際上就是根據芯片的寫時序把用戶進程發(fā)來的數據傳送到芯片上去。
相比于FSK來電顯示信息的接收而言,DTMF來電顯示信息的接收就比較容易了。DTMF來電顯示芯片提供了1根中斷信號線和4根并行數據線,每次中斷來只需要讀并行信號線,并進行簡單的解碼、緩存工作就可以了。此外為了方便,把摘、掛機,抬高、拉低靜音等命令者包含此驅動的iotcl命令集中了;和FSK驅動一樣,為了防止干擾對DTMF來電顯示信息的影響,也在iotcl命令提供了打開、關閉DTMF來電顯示中斷的命令。
3應用軟件的設計與實現(xiàn)
接入點應用程序位于前面介紹的硬件平臺以及設備驅動程序之上,三者之間的關系如圖5所示。接入點應用程序是整個軟件的核心,它與串口驅動程序、FSK來電顯示驅動程序、DTMF來電顯示驅動程序、DTMF撥號驅動程序、Flash驅動程序、振鈴驅動程序交互,并通過后五個驅動程序控制具體硬件完成相關功能。
接入點可以對允許接入的藍牙終端屬性進行設備,只有被授權的藍牙終端才能通過接入點訪問PSTN。接入點的Flash可設置多個允許接入的藍牙終端,并可通過與網關并聯(lián)的電話進行增添、刪除一個或全部刪除終端設置的操作。
對于設置為雙模的藍牙手機,必須先向網絡登記,網絡返回成功信息的方可與網關建立物理和邏輯鏈路;而在雙模手機主動與網關拆開物理鏈路時,也必須向網絡登記。接入點可以發(fā)現(xiàn)已登記的雙模手機是否離開本網關信號覆蓋范圍,并自動向網絡登記,將雙模手機的話務切換回移動網絡中,而并模終端無需這樣的操作。網關可同時與7個藍牙終端建立ACL(AsynchronousConnectionLess)
對于不同調制方式(FSK及DTMF)來電均能接收號碼以及振鈴,并根據來電號碼分析被呼叫方,根據藍牙無繩電話協(xié)議CTP(CordlessTelephonyProfile)建立起TCS(TelephoneControlSpecification)鏈路、SCO(SynchronousConnectionOriented)鏈路。當來電顯示為非特服號開頭的號碼時,表示來電來普通電話,所有與網關相連的分機終端都振鈴。某一終端接聽后,其它終端停止振鈴,回到空閑狀態(tài)。當來電顯示為特服號開頭的時候,表示來電為訪問特定終端的話務,可以分析來電顯示的格式得到接入順序號,并使對應的藍牙終端振鈴。藍牙雙;蛘邌文=K端能通過網關、PSTN網絡撥打外部電話,網關支持終端多次撥號,并且外部電話能收到來電顯示。
圖6
我們設計的應用程序流程如圖6所示。在μClinux系統(tǒng)中,此應用程序被視為一個用戶進程。在系統(tǒng)啟動rc腳本文件的末尾添加該進程,則系統(tǒng)在完成初始化工作后會自動啟動該進程。對用戶進程而言,硬件設備被視為設備描述文件,它和普通的文件沒有區(qū)別,可用文件描述符(一個非負整數)表示。在程序啟動時,用Linux系統(tǒng)提供的open函數打開這些設備,同時設置這些設備的工作方式;啟動藍牙協(xié)議棧,并設置工作模式、服務發(fā)現(xiàn)數據庫和其它參數,使網關始終處于被發(fā)現(xiàn)和被動建鏈的一方。
此后應用程序地偵聽、等待各設備數據的到來,我們采用了I/O多咱轉接的技術來實現(xiàn)對多個描述符的讀、寫和管理。該技術的基本思想是:先構造一張有關描述符的表,然后調用一個函數,它要到描述符中的一個已準備好表示I/O時才返回。在返回時,它告訴進程哪一個描述符已準備好可以進行I/O。select函數可以執(zhí)行I/O多路轉換,傳向該函數的參數告訴內核我們所關心的描述符、對于每個描述符我們所關心的條件(是否讀一個給定的描述符?是否想寫一個給定的描述符?是否關心一個描述符的異常條件?)以及希望等待的時間(可以永遠等待、等待固定時間或完全不等待)。我們在程序中設置了永遠等待,即只有所指定的描述符中的一個已準備好或捕捉到一個信號才返回。從select返回時,內核告訴我們已準備好的描述符的數量和哪一個描述符已準備好讀、寫或異常條件,應用程序這個信息進入相應的處理子模塊。
結語
基于嵌入式μClinux系統(tǒng)的藍牙PSTN網關實現(xiàn)了上術的所有功能,使藍牙三合一電話的應用成為現(xiàn)實。最多7個藍牙終端能同時與該網關建立物理和邏輯鏈路,網關能建立起一條語音鏈路。經實測,在傳輸距離不超過10m的前提下,話音質量良好,清晰無失真;在傳輸距離超過10m后,由于藍牙的自動功率控制功能,會增大發(fā)射功率,模擬語音電路部分引入的電磁干擾噪聲增加,影響通話效果,此問題可以通過調整PCB布局布線和對易干擾電路增加屏蔽來消除。根據標準藍牙協(xié)議,藍牙終端和網關之間最多可建立起3條語音鏈路,這將在下一個版本中加以改進。
【嵌入式藍牙PSTN語音接入點的設計與實現(xiàn)】相關文章:
嵌入式MPEG—4解碼系統(tǒng)的設計與實現(xiàn)08-06
藍牙技術硬件實現(xiàn)模式分析08-06
用MSP430實現(xiàn)的嵌入式因特網終端設計08-06
基于Winodws CE的嵌入式網絡監(jiān)控系統(tǒng)的設計與實現(xiàn)08-06
藍牙芯片ROK 101 007在語音系統(tǒng)中的應用08-06
多制式語音編碼及其DSP實現(xiàn)08-06