藍牙及藍牙耳機工作原理


耳機原理 藍牙技術圖片1 1 藍牙技術的特點 1.1 藍牙協議體系結構   整個藍牙協議體系結構可分為底層硬件模塊、中間協議層和高端應用層三大部分。鏈路管理層(LMP)、基帶層(BBP)和藍牙無線電信道構成藍牙的底層模塊。BBP層負責跳頻和藍牙數據及信息幀的傳輸。LMP層負責連接的建立和拆除以及鏈路的安全和控制,它們為上層軟件模塊提供了不同的訪問人口,但是兩個模塊接口之間的消息和數據傳遞必須通過藍牙主機控制器接口的解釋才能進行。也就是說,中間協議層包括邏輯鏈路控制與適配協議(L2CAP)、服務發現協議(SDP)、串口仿真協議(RFCOMM)和電話控制協議規范(TCS)。L2CAP完成數據拆裝、服務質量控制、協議復用和組提取等功能,是其他上層協議實現的基礎,因此也是藍牙協議棧的核心部分。SDP為上層應用程序提供一種機制來發現網絡中可用的服務及其特性。在藍牙協議棧的最上部是高端應用層,它對應於各種應用模型的剖面,是剖面的一部分。目前定義了13種剖面。   1.2 藍牙低層模塊   藍牙的低層模塊是藍牙技術的核心,是任何藍牙設備都必須包括的部分。   藍牙工作在2.4GHZ的ISM頻段。采用了藍牙結束的設備講能夠提供高達720kbit/s 的數據交換速率。   藍牙支持電路交換和分組交換兩種技術,分別定義了兩種鏈路類型,即面向連接的同步鏈路(SCO)和面向無連接的異步鏈路(ACL)。   為了在很低的功率狀態下也能使藍牙設備處於連接狀態,藍牙規定了三種節能狀態,即停等(Park)狀態、保持(Hold)狀態和呼吸(Sniff)狀態。這幾種工作模式按照節能效率以升序排依次是:Sniff模式、Hold模式、Park模式。   藍牙采用三種糾錯方案:1/3前向糾錯(FEC)、2/3前向糾錯和自動重發(ARQ)。前向糾錯的目的是減少重發的可能性,但同時也增加了額外開銷。然而在一個合理的無錯誤率環境中,多余的投標會減少輸出,故分組定義的本身也保持靈活的方式,因此,在軟件中可定義是否采用FEC。一般而言,在信道的噪聲干擾比較大時藍牙系統會使用前向糾錯方案,以保證通信質量:對於SCO鏈路,使用1/3前向糾錯;對於ACL鏈路,使用2/3前向糾錯。在無編號的自動請求重發方案中,一個時隙傳送的數據必須在下一個時隙得到收到的確認。只有數據在收端通過了報頭錯誤檢測和循環冗余校驗(CRC)后認為無錯時,才向發端發回確認消息,否則返回一個錯誤消息。   藍牙系統的移動性和開放性使得安全問題變得及其重要。雖然藍牙系統所采用的調頻技術就已經提供了一定的安全保障,但是藍牙系統仍然需要鏈路層和應用層的安全管理。在鏈路層中,藍牙系統提供了認證、加密和密鑰管理等功能。每個用戶都有一個個人標識碼(PIN),它會被譯成128bit的鏈路密鑰(Link Key)來進行單雙向認證。一旦認證完畢,鏈路就會以不同長度的密碼(Encryphon Key)來加密(此密碼以shit為單位增減,最大的長度為128bit)鏈路層安全機制提供了大量的認證方案和一個靈活的加密方案(即允許協商密碼的長度)。當來自不同國家的設備互相通信時,這種機制是極其重要的,因為某些國家會指定最大密碼長度。藍牙系統會選取微微網中各個設備的最小的最大允許密碼長度。例如,美國允許128bit的密碼長度,而西班牙僅允許48bit,這樣當兩國的設備互通時,將選擇48bit來加密。藍牙系統也支持高層協議棧的不同應用體內的特殊的安全機制。例如兩台計算機在進行商業卡信息交流時,一台計算機就只能訪問另一台計算機的該項業務,而無權訪問其他業務。藍牙安全機制依賴PIN在設備間建立信任關系,一旦這種關系建立起來了,這些PIN就可以存儲在設備中以便將來更快捷地連接。   1.3 軟件模塊   L2CAP是數據鏈路層的一部分,位於基帶協議之上。L2CAP向上層提供面向連接的和無連接的數據服務,它的功能包括:協議的復用能力、分組的分割和重新組裝(Segmentation And Reaassembly)以及提取(Group Abstraction)。L2CAP允許高層協議和應用發送和接受高達64K Byte的數據分組。   SDP為應用提供了一個發現可用協議和決定這些可用協議的特性的方法。藍牙環境下的服務發現與傳統的網絡環境下的服務發現有很大的不同,在藍牙環境下,移動的RF環境變化很大,因此業務的參數也是不斷變換的。SDP將強調藍牙環境的獨特的特性。藍牙使用基於客戶/服務器機制定義了根據藍牙服務類型和屬性發現服務的方法,還提供了服務瀏覽的方法。   RFCOMM是射頻通信協議,它可以仿真串行電纜接口協議,符合ETSI0710串口仿真協議。通過RFCOMM,藍牙可以在無線環境下實現對高層協議,如PPP、TCP/IP、WAP等的支持。另外,RFCOMM可以支持AT命令集,從而可以實現移動電話機和傳真機及調制解調器之間的無線連接。   藍牙對語音的支持是它與WLAN相區別的一個重要的標志。藍牙電話控制規范是一個基於ITU-T建議Q.931的采用面向比特的洗衣,它定義了用於藍牙設備間建立語音和數據呼叫的呼叫控制信令以及用於處理藍牙TCS設備的移動性管理過程。 2. 語音網關(Audio Gate) Windows Embedded CE supports Headset Profile and the Hands-Free Profile by providing the Audio Gateway (AG) service that links Bluetooth devices by using the Winsock interface to the Bluetooth Protocol Stack. This service provides the functionality to interface with TAPI to control a cellular phone and route audio to the Bluetooth chip. The AG service is implemented as a DLL, Btagsvc.dll that resides in Services.exe and can be controlled by external modules through IOCTLs provided by Services.exe. The AG service supports audio routing by using the audio driver message, WODM_BT_SCO_AUDIO_CONTROL, that routes audio to the Bluetooth chip. 由此可見,微軟已經提供了語音網關服務來支持藍牙耳機,所以,我們要做的也就是將語音網關服務(AG)Enable. 3.藍牙耳機的工作原理 下面重點講述下藍牙耳機的工作原理: 關於音頻流的藍牙傳輸可以通過兩個方式: 1) 通過PCM接口來傳送 2)通過模擬UART來傳送 下面分別來講述: 1)通過PCM接口來傳送 通過音頻播放器(eg: Media Player)來打開音頻文件,調用Audio驅動,音頻文件通過解碼后,由PCM輸出到Host端藍牙模塊的PCM輸入端,接着,經過藍牙模塊的處理后,由RF無線模塊發送給Client 端藍牙設備。 Client 端藍牙設備經由無線接收模塊后,濾波,穩壓,經微處理芯片處理后,直接由Speaker播放。 2)通過模擬UART來傳送 通過設置注冊表【HKEY_LOCAL_MACHINE\Services\BTAGSVC】 IsEnabled =1 使得系統引導時自動加載語音網關(AG)服務。 首先,通過手動配置建立Host端藍牙設備與Client端藍牙設備ACL鏈接(面向無連接的異步鏈路),接着在Applicaiton或Audio Driver中調用 IOCTL_AG_OPEN_AUDIO,重新建立Host端藍牙設備與Client端藍牙設備SCO鏈接(面向連接的同步鏈路),接着AG自動發送waveOutMessage((HWAVEOUT)i, WODM_BT_SCO_AUDIO_CONTROL, 0, TRUE); 從而建立了Audio至藍牙芯片之間的通道,也即,實現了音頻流到藍牙模塊的傳送。 然后,經由主機端藍牙模塊將音頻流打包經由RF模塊發送出去。 客戶端藍牙耳機接收到無線音頻包后,濾波,穩壓,經微處理芯片處理后,由PCM傳送給音頻編解碼器芯片,最后,由Speaker播放。 下面這段段碼是建立Host端藍牙設備與Client端藍牙設備SCO鏈路 HANDLE h = CreateFile(L"BAG0:",0,0,NULL,OPEN_EXISTING,0,NULL); if (INVALID_HANDLE_VALUE == h) { wprintf(L"Error calling CreateFile on Audio Gateway.\r\n"); return 0; } if (onaudio==1) { wprintf(L"Opening Bluetooth audio...\n"); BOOL fStatus = DeviceIoControl(h,IOCTL_AG_OPEN_AUDIO,NULL,0,NULL,0,NULL,NULL); if (FALSE == fStatus) { wprintf(L"Operation failed: %d.\n", GetLastError()); } else { wprintf(L"Operation successful.\n"); } CloseHandle(h); return 0; } else if (onaudio==0) { wprintf(L"Closing Bluetooth audio...\n"); BOOL fStatus = DeviceIoControl(h,IOCTL_AG_CLOSE_AUDIO,NULL,0,NULL,0,NULL,NULL); if (FALSE == fStatus) { wprintf(L"Operation failed: %d.\n", GetLastError()); } else { wprintf(L"Operation successful.\n"); } CloseHandle(h); return 0; } Headset and Hands-free Profiles架構圖 Headset and Hands-free Profiles架構圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM