藍牙及藍牙耳機工做原理

耳機原理 藍牙技術圖片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架構圖
相關文章
相關標籤/搜索