1. 程式人生 > >藍芽技術瞭解

藍芽技術瞭解

1、概念

1)無線通訊

無線通訊是利用電波訊號可以在自由空間那種傳播的特性進行資訊交換的一種通訊方式。在移動中實現的無線通訊又通稱為行動通訊,人們把二者合稱為無線行動通訊。簡單講,無線通訊是僅利用電磁波而不通過線纜進行的通訊方式。電子訊號從發射器到達天線,然後天線將訊號作為一系列電磁波發射到空氣中,訊號通過空氣傳播,直到它到達目標位置為止。在目標位置,另一個天線接收訊號,一個接收器將它轉換回電流訊號。

2)藍芽(Bluetooth)

藍芽:一種短距離無線通訊技術標準,可實現固定裝置、移動裝置和個人域網之間的短距離資料交換(使用2.4-2.485GHz的ISM波段的UHF無線電波)。(一般10m內)如今藍芽由藍芽技術聯盟(Bluetooth Special Interest Group,簡稱SIG)管理。

藍芽採用分散式網路結構以及快調頻和短包技術,支援點對點以及點對多點通訊,工作在全球通用的2.4GHZ的ISM頻段。其資料速率為1Mbps。採用時分雙工傳輸方案實現全雙工傳輸。

3)藍芽系統構成

1、無線射頻單元(Radio):負責射頻訊號的傳送和接收,特點是短距離、低功耗。藍芽天線一般體積小,重量輕,屬於微帶天線。

2、基帶或鏈路控制單元(Link Controller):進行射頻訊號與數字或語音訊號的相互轉化,實現基帶協議和其他的底層連線規程。

3、鏈路管理單元(Link Manager):負責管理藍芽裝置之間的通訊,實現鏈路的建立、驗證、鏈路配置等操作。

4、藍芽軟體協議實現:如上圖紫色部分

低耗電藍芽相關規範

 

2、藍芽協議

2.1藍芽協議架構

藍芽協議棧

藍芽協議體系中的協議按SIG的關注程度分為四層:

1、核心協議:BaseBand、LMP、L2CAP、SDP;

2、電纜替代協議:RFCOMM

3、電話傳送控制協議:TCS-Binary、AT命令集

4、選用協議:PPP、UDP/TCP/IP、OBEX、vCard、vCal、IrMC、WAE

除上述協議層之外,規範還定義了主機控制介面(HCI),它為基帶控制器、連線管理器、硬體狀態和控制暫存器提供了命令介面。圖中,HCI位於L2CAP的下層,但HCI也可位於L2CAP的上層。

 

藍芽核心協議由SIG指定的藍芽專用協議組成。絕大部分藍芽裝置都需要核心協議(加上無線部分),而其他協議則根據應用的需要而定。總之,電纜替代協議、電話控制協議和被採用的協議在核心協議基礎上構成了面向應用的協議。

藍芽協議棧允許採用多種方法,包括RFCOMM和Object Exchange(OBEX),在裝置之間傳送和接收檔案。如果想傳送和接收流資料(而且想採用傳統的串列埠應用程式,並給它加上藍芽支援),那麼 RFCOMM 更好。反過來,如果想傳送物件資料以及關於負載的上下文和元資料,則 OBEX 最好。

藍芽應用程式活動圖如下:

2.1.1串列埠模擬RFCOMM介紹

藍芽—RFCOMM協議

找到服務,RFCOMM通過不同的頻道(channel)來提供不同的profile的,所以需要找到要用的服務在裝置上的哪個頻道上,這是通過一個軟體包裡的sdptool來完成的,就是SDP,服務發現協議。

2.2藍芽profile

2.2.1藍芽profile概述

從3.0版本開始(據說2.1也是支援的。)藍芽才開始支援BluetoothProfile。Bluetoothprofile是藍芽裝置間資料通訊的無線介面規範。想要使用藍芽無線技術,裝置必須能夠翻譯特定藍芽配置檔案,配置檔案定義了可能的應用。

藍芽配置檔案表達了一般行為,藍芽裝置可以通過這些行為與其他裝置進行通訊

藍芽技術定義了廣泛的配置檔案,描述了不同型別的使用安全。按藍芽規格中提供的指導,開發商可建立應用程式,用來與其他符合藍芽規格的裝置協同工作,在最低限度下,個配置檔案規格應包含下列主題的相關資訊。

①與其他配置檔案的相關性

②建議的使用者介面格式

③配置檔案使用的藍芽協議堆疊 的特定部分

為執行其任務,每個配置檔案都使用堆疊各層上的特定選項和引數。若需要,也可包括必須的服務記錄該概要。

profile API層分別對AUDIO、data、control等提供了不同的模組。目前已規範有四大類、十三種協議規格。

Bluetooth的一個很重要的特性,就是所有的Bluetooth產品都無須實現全部的Bluetooth規範,為了更容易的保持Bluetooth裝置之間的相容,Bluetooth規範中定義了profile。profile定義裝置如何實現一種連線或者應用,你可以吧profile理解為連線層或者 應用層協議。

 

常用的profile介紹請參考“藍芽profile的概念和常見種類”,幾種最基本的配置檔案為:

1、通用訪問配置檔案(Generic Access Profile,GAP)

GAP是所有其他配置檔案的基礎,它定義了在藍芽裝置間建立基帶鏈路的通用方法。除此之外,GAP還定義了下列內容:

1)必須在所有藍芽裝置中實施的功能

2)發現和連結裝置的通用步驟

3)基本使用者介面術語

GAP確保了應用程式和裝置間的高度互操作性,還允許開發人員利用現有的定義更加容易地定義新的配置檔案。GAP處理未連線的兩個裝置間的發現和建立連線過程。此配置檔案定義了一些通用的操作,這些操作可供引用GAP的配置檔案,以及實施多個配置檔案的裝置使用。GAP確保了兩個藍芽裝置可通過藍芽技術交換資訊,以發現彼此支援的應用程式,不符合任何其他藍芽配置檔案的藍芽裝置必須與GAP符合以確保基本的互操作性和共存。

2、服務發現應用配置檔案(Service Discovery Application Profile,SDAP)

SDAP描述了應用程式如何使用SDP發現遠端裝置上的服務。由於GAP 的要求,任何藍芽裝置都應能夠連線至其他藍芽裝置。基於此,SDAP要求任何應用程式都應當能夠發現它要連線的其他藍芽裝置上的可用服務。此配置檔案,可承擔搜尋已知和特定服務以及一般的任務。SDAP涉及了稱為“服務發現使用者應用程式”的一個應用程式,這是藍芽裝置查詢服務所必需的。此應用程式可與向/從其他藍芽裝置傳送/接收服務查詢的SDP相接。SDAP依賴於GAP,並可以重新使用部分GAP

3、串列埠配置檔案(Serial Port Profile,SPP)

SPP定義瞭如何設定虛擬串列埠以及連線兩個藍芽裝置。SPP基於ETSI TS 0.10規格,使用RFCOMM協議提供序列商品模擬。SPP提供了以無線方式替代現有的RS-232序列通訊應用程式和控制訊號的方法。SSP為DUN,FAX,HSP和LAN配置檔案提供了基礎。此配置檔案可以支援最高128kb/s的資料率。SSP依賴於GAP。

4、通用物件交換配置檔案(Generic Object Exchange Profile,GOEP)

GOEP可用於將物件從一個裝置傳輸到另一個裝置。物件可以使任意的。如圖片,文件,名片等。此配置檔案定義了兩個角色:提供拉提或者推送物件位置的伺服器以及啟動操作的客戶端。使用GOEP的應用程式假定鏈路和通道已按GAP的定義建立。GOEP依賴於序列口埠配置檔案。

GOEP可用於為使用OBEX協議的其他配置檔案提供了通用藍圖,併為裝置定義了客戶端和伺服器角色。對於所有的OBEX事務,GOEP規定應由客戶端啟動所有事務。但是此配置檔案並沒有描述應用程式就如何定義要交換的物件或如何實施交換。這些細節留給屬於GOEP的配置檔案,即OPP,FTP和SYNC 去完成。通常使用此配置檔案的藍芽裝置為電腦,PDA ,手機以及智慧電話。

 

注意:藍芽1.1版本規範所有藍芽裝置的最小實現必須支援通用訪問配置檔案,服務發現應用配置檔案和序列口埠配置檔案。

在兩臺電腦或者Labtop 之間就可以建立這種連線,如下圖所示:

SPP是基於RFCOMM的,SPP協議處於RFCOMM的上層,SPP的應用需走RFCOMM層。如果你使用RFCOMM能夠實現,那麼也就不需要使用SPP,而且速度還會比SPP來做快,因為省略了採用profile的一些資料包頭等。不過,還是推薦採用SPP來做,相容性有保證,這也是為什麼藍芽本質上資料和語音的傳送卻出現HFP,HSP,SPP,OPP等諸多具體應用profile的原因。

2.2.2藍芽profile框架

每個attribute屬性被UUID(通用唯一識別符號)唯一標識,UUID是標準128-bit格式的ID用來唯一標識資訊。attribute被ATT格式化 characteristics 和 services 形式進行傳送。

特徵(characteristics ):一個characteristics 包含一個單獨的value值和0-n個用來描述characteristics 值(value)的descriptors。一個characteristics 可以被認定是一種型別的,類似與一個類。

描述符(descriptor):descriptor 是被定義的attributes ,用來描述一個characteristics 的值。例如,一個descriptor可以指定一個人類可讀的描述中,在可接受範圍裡characteristics值,或者是測量單位,用來明確characteristics的值。

服務(service):service 是characteristics 的集合。例如,你可以有一個所謂的“Heart RateMonitor”service,其中包括characteristic,如“heart rate measurement”。你可以在bluetooth.org找到關於一系列基於GATT的profile和service。

如上圖所示:藍芽裝置可以包括多個profile,一個profile中有多個service,一個service中有多個characteristics,一個characteristics中包括一個value和多個descriptor。

 

2.3藍芽4.0和4.1

藍芽4.0實際是一個三位一體的藍芽技術,它將傳統藍芽、低功耗藍芽和高速藍芽技術融合在一起,這三個規格可以組合或者單獨使用。也就是說 BLE是藍芽4.0增加的,之前沒有

藍芽4.0專門面向對成本和功耗都有較高要求的無線方案,其主打特性就是省電、省電、省電。極低的執行和待機功耗,使得一粒鈕釦電池甚至可連續工作一年之久。它有低功耗、經典、高速三種協議模式。其中:高速藍芽主攻資料交換與傳輸;經典藍芽則以資訊溝通、裝置連線為重點;低功耗藍芽以不需要佔用太多頻寬的裝置連線為主。這三種協議規範能夠互相組合搭配,從而適應更廣泛的應用模式。正因為有了三種可以互相組合搭配的協議,藍芽4.0因此可以成為唯一一個綜合協議規範。它有著極低的執行和待機功耗。此外,低成本和跨廠商互操作性,3毫秒低延遲、AES-128加密等諸多特色,可以用於計步器、心率監視器、智慧儀表、感測器物聯網等眾多領域,大大擴充套件藍芽技術的應用範圍。

藍芽4.1主打IOT(Internet of Things),最新的藍芽4.1標準是個很有前途的技術,其智慧、低功耗、高傳輸速度、連線簡單的特性將適用在許多新興裝置上。

藍芽4.1裝置可以同時作為傳送方和接受方,並且可以連線到多個裝置上。舉個例子,智慧手錶可以作為發射方向手機手機發送身體健康指數,同時作為接受方連線到藍芽耳機、手環或其他裝置上。藍芽4.1使得批量資料可以以更高的速率傳輸,當然這並不 意味著可以用藍芽告訴傳輸流媒體視訊,這一改進的主要針對的還是剛剛興起的可穿戴裝置。

例如已經比較常見的健康手環,其傳送出的資料流並不大,通過藍芽4.1能夠更快速地將跑步、游泳、汽車過程中收到。因為新標準加入了對IPV6專用通道聯機的支援,通過IPV6連線到網路,實現與WIFI相同的功能,解決可穿戴裝置上網不易的問題。

 

藍芽4.0與藍芽4.1的比較

 

2.3.1藍芽4.0低功耗(LTE)

 1)低功耗藍芽Bluetooth Low Energy(BLE)是藍芽4.9增加的。蘋果系列都支援藍芽4.0

2)Android4.3(API級別18)引入內建支援BLE的central角色,同時提供API和app應用程式用來發現裝置,查詢服務,和讀/寫characteristics。與傳統藍芽(Classic Bluetooth)不同,藍芽低功耗(BLE)的目的是提供更加顯著的低功耗。這使得Android應用程式可以和具有低功耗要求的BLE裝置,如接近感測器,心臟速率監視器,健身裝置等進行通訊。

3)BLE低功耗藍芽軟體有2個主要組成:OSAL作業系統抽象層和HAL硬體抽象層,多個Task任務和事件在OSAL管理下工作,而每個任務和事件又包括3個組成:BLE協議棧,Profiles和應用程式。

BLE藍芽協議棧結構

分為兩部分:控制器和主機。對於4.0以前的藍芽,這兩部分是分開的。所有profile(姑且稱為劇本吧,用來定義裝置或元件的角色)和應用都建構在GAP或GATT之上。下面由底層元件開始介紹。

BEL低功耗藍芽系統架構圖,圖中的Task用附圖BLE藍芽協議棧結構圖來描述

通用屬性規範(GATT)—GATTProfile是一個通用規範用於在BLE鏈路傳送和接收被稱為“屬性(attribute)”的資料片。目前所有的低功耗應用profile都是基於GATT。

藍芽SIG定義了許多profile用於低功耗裝置。profile(配置檔案)是一個規劃,規劃了裝置如何工作在一個特定的應用場景。注意:一個裝置可以實現多個profile。例如,一個裝置可以包含一個心臟檢測儀和電池電平檢測器。

主從機連線建立過程:

 

2.3.2藍芽4.0(BLE)主從通訊透傳模組

低功耗藍芽模組主透穿協議是針對低功耗藍芽模組從透傳協議設計的,通過本協議模組可替代手機裝置從透傳協議模組連線,實現透傳功能或直驅控制功能。

此協議模組可用作透傳協議模組開發過程中的輔助工具。

BLE主透傳協議模組(以下簡稱MTTM)可以工作在透傳模式(TTM)或指令模式(CM)。

MTTM上電啟動後,處於待機模式(SBM),此時處於空閒狀態,無睡眠,需要使用者通過AT指令控制模組連線裝置。在成功與從裝置建立連線後,MTTM會自動查詢裝置的透傳通道,如果從裝置屬於BLE從透傳協議模組(STTM),MTTM預設進入透傳模式,否則預設進入指令模式。

透傳模式下,使用者CPU可以通過模組的通用串列埠與STM進行雙向通訊。從MTTM串列埠輸入的資料將轉發到STTM,並從STTM的串列埠輸入;從STTM輸入的資料將轉發到MTTM,並從MTTM的串列埠輸出,從而實現透明傳輸功能,使用者資料的具體含義由上層應用程式自行定義。

透傳,即透明傳輸(pass-through),指的是在通訊中不管傳輸的業務內容如何,只負責將傳輸的內容由源地址傳輸到目的地址,而不對業務內容做任何改變。

透傳中資料的格式也是profile,或藍芽標準profile或自定義simple profile。基本結構依然是:

1)profile

  profile可以理解為一種規範,一個標準的通訊協議,它存在於從機中。藍芽組織規定了一些標準的profile,例如HID OVER GATT,防丟器,心率計等。每個profile中會包含多個service,每個service代表從機的一種能力。

2)service

  service可以理解為一個服務,在BLE從機中,通過多個服務,例如電量服務、資訊系統服務等,每個service中又包含多個characteristic特徵值。每個具體的characteristics特徵值才是BLE通訊的主題。比如當前的電量是80%,所以會通過電量的characteristic特徵值存在從機的profile裡,這樣主機就可以通過這個characteristic來讀取80%這個資料

3)characteristic

characteristic特徵值,BLE主從機通訊均是通過characteristic來實現,可以理解為一個標籤,通過這個標籤可以獲取或者寫入想要的內容

4)UUID

  UUID,統一識別碼,我們剛才提到的service和characteristic,都需要一個唯一的UUID來標識

每一個從機都會有 一個叫做profile的東西存在,不管是上面的自定義的simple profile 還是標準的防丟器profile,他們都是由一系列service,然後每個service 又包含多個characteristic值,主從機之間的通訊,均是通過characteristic來實現。

實際產品中,每個藍芽4.0的裝置都是通過服務和特徵(service和characteristic)來展示自己的,service和characteristic都是用UUID來唯一標識的。一個裝置必然包含一個或多個服務,每個服務下面又包含若干個特徵。特徵(characteristic)是與外界互動的最小單位。藍芽裝置硬體廠商通常都會提供他們裝置裡的各個service和characteristic的功能,比如說哪些是用來互動(讀寫),哪些可獲取模組資訊(只讀)。比如說,一臺藍芽4.0裝置,用特徵A來描述自己的出廠資訊,用特徵B來收發資料等。

服務和特徵都是用UUID來唯一標識的,UUID的概念如果不清楚請自行google,SIG為一些典型的裝置(比如測量心跳和血壓的裝置)規定了標準的service UUID (特徵的UUID比較多),這裡就不列舉了。

3.Android Bluetooth 架構

1)面向庫的架構檢視

 

2)面向程序的架構檢視

IOS有兩個框架支援藍芽與外設連線

一個是ExternalAccessory。從IOS3.0就開始支援,也是在iphone出來之前用的比較多的一種模式,但是它有個不好的地方,External Accessory 需要拿到蘋果公司的MFT認證。

另一個框架則是本文要介紹的CoreBluetooth,在藍芽4.0出來之後(注意,硬體上要4s以上,系統要IOS6以上才支援4.0),蘋果開放了BLE通道,專門用於與BLE裝置通訊(因為它的API都是基於BLE的)。這個不需要MFI,並且現在很多藍芽裝置都支援4.0,所以也是在IOS比較推薦的一種開發方法。現CoreBluetooth在的開發幾乎全部基於該框架,本節只介紹CoreBluetooth。

1)CoreBluetooth介紹

CoreBluetooth框架的核心其實是兩個東西,peripheral 和 central,可以理解成外設和中心。對應他們分別有一組相關的API和類,如下圖所示:

如果你要程式設計的裝置是手機的central,那麼你大部分用到peripheral API。反之亦然,裝置是peripheral,iphone手機是central,所以大部分使用central API。使用peripheral程式設計的例子也有很多,比如像用一個ipad和一個iphone通訊,ipad可以認為是central,iphone端是peripheral,這種情況下在iphone端就要使用上圖右邊部分的類來開發了。

作為一箇中心(central)要實現完整的通訊,一般要經過這樣幾個步驟:

1)建立中心角色

2)掃描外設(discover)(通過接收從裝置廣播來掃描、發現裝置,獲得peripheral ID)—

  a、如果資料中已經和某些藍芽裝置繫結,可以使用BluetoothAdapter.getBondedDevices();方法獲得已經繫結的藍芽裝置列表。通過指定特定的peripheral的UUID,central只會discover這個特定的裝置。

  b、搜尋周圍的藍芽裝置受用BluetoothAdapter.startDiscovery()方法

  c、搜尋到的藍芽裝置都是通過廣播返回,so,需要註冊廣播接收器來獲得已經搜尋到的藍芽裝置

3)連線外設(connect)(根據peripheral ID連線指定的外設)—

4)掃描外設中的服務和特徵(discover)(一個裝置裡的服務和特徵往往比較多,一般會在發現服務和特徵的回撥裡通過service、characteristic、UUID去匹配我們關心的那些)

5)與外設做資料互動

6)斷開連線(disconnect)

 

2、裝置ID描述DID

  每個與蘋果裝置相容的藍芽接入都必須:

支援藍芽裝置ID描述,1.3版本或者更高;

使用藍芽SIG分配的Assigned Numbers 文件中的公司標識作為他的Vendor ID值,也就是VID,如果生產商沒有藍芽藍芽SIG公司標識,那麼藍芽HID描述接入可能會使用USB Implementers Forum分配的VID;使用他的VID來標識最終的產品生產商;使用版本值來唯一標識軟體的版本;使用Product ID值唯一標識產品。Device ID描述使得蘋果產品能夠識別遠端的藍芽接入,該資訊可以用來與遠端接入互動的時候連線藍芽描述間的交替互操作。因此Device ID中的資訊記錄非常重要。

理想情況下,這兩個裝置應該有不同的產品ID。但是,當他們擁有完全相同的硬體、軟體和特性的時候擁有相同的ProductID也是可以允許的。如果他們有任何的不同,就都應該有不同的Product ID。

 

3、IOS的藍芽低功耗

  藍芽4.0標準引入了藍芽低功耗,一種針對有限電池資源的藍芽接入的無線技術。如果支援藍芽低功耗的話,接入點需要支援下面的這些特性。(這裡更多的是藍芽晶片商要做的事情)

 

  角色:藍芽接入需要實現藍芽4.0標準中定義的外圍角色

  廣告通道:藍芽接入需要在所有三個廣告中針對每個廣告事件進行廣告

  廣告PDU:藍芽接入需要使用如下廣告PDU中的一個:ADV_IND;ADV_NOCONN_IND;ADV_SCAN_IND.

其中ADV_DIRECT_IND不推薦使用。

  廣告資料:由藍芽接入傳送的廣告資訊至少應該包含藍芽4.0標準中包含的如下資訊:Flags;TX Power Level;Local Name;Services。如果需要降低電量消耗或者並不是所有的廣告資料都適合放入到廣告PDU中的時候,接入點可能將Local Name 和TX Power Level 資料方知道SCAN_RSP PDU中。需要注意的是根據它的狀態,蘋果產品可能不會總是執行啟用掃描。主要的服務應該總是放在廣告PDU中進行廣告。次要的服務不應該進行廣告。對於接入點不重要的服務資訊可能會因為廣告PDU中的空間不足而被忽略。廣告資料和SCAN_PDU中的掃描響應資料應該遵循藍芽4.0標準中的格式。

  廣告間隔:藍芽接入的廣告間隔應該慎重考慮,因為他會影響到發現和連結的效能。對於低功耗的接入,電池資源也應該被考慮在內。為了能夠被蘋果產品發現,藍芽接入應該首先使用推薦的廣告間隔20ms,並持續至少30s。如果這30s內沒有被發現,那麼接入點可能會選擇節省電池電量然後增加廣告間隔,蘋果推薦使用如下依次延長的事件間隔來發現藍芽接入點:645ms;768ms;961ms;1065ms;1294ms;

  連線引數:藍芽接入負責用來LE連線的連線引數。接入點需要請求合適的連結引數來在合適的時候傳送一個L2AP連線引數跟新請求。如果他沒有符合如下規則,那麼連線引數請求可能會被拒絕:Interval Max *(Slave Latency+1)<=2seconds;Interval Min>=20ms;Interval Min + 20ms <=Interval Max;Slave Latency<=4;connSupervisionTimeout<=6 s 以及Interval Max* (Slave Latency+1)*3<connSupervisionTimeout。蘋果裝置不會讀取或者使用Peripheral preferred Connection Parameters特性中的引數。

  隱私:藍芽接入應該在任何情況下都能夠滿足Resolve Private Address。因為隱私方面的考慮,蘋果裝置將會使用藍芽4.0標準中定義的隨機裝置地址。

  配對:藍芽接入不應該請求配對。如果處於安全考慮,接入點需要與中心建立繫結關係,外圍可以使用Insufficient Authentication錯誤碼在必要的時候拒絕ATT請求。因此蘋果裝置可能會需要按照既定的流程來執行過程。配對節能需要機遇蘋果產品的MFI使用者認證。

  服務:

  通用接入描述服務:藍芽接入應該實現按照藍芽標準4.0中的Device Name特性。

  通用屬性描述服務:只有當接入有能力在生命週期內更改他的服務的時候,該接入點才需要實現Service change 特性。蘋果產品可以使用Service Change服務特性來決定它是否可以使用之前讀取的或者快取的來自裝置的資訊。

  裝置資訊服務:藍芽接入應該實現裝置資訊服務,服務的UUID不應該包含在廣告資料中。如下的特性需要被支援:manufacture Name String;Model Number String;Firmware Revision String;Software Revision String。

 

4,IOS APP開發的藍芽操縱API

  手機APP要想獲得藍芽裝置的一些額外的資訊如電量或者操縱藍芽裝置,必須通過IOS API。那麼IOS底層必然有某種方式來與藍芽裝置互動。那麼電量通過什麼來讀寫呢?定義 service characteristic?

任何擴音的藍芽耳機都可以在IOS裝置的狀態列中顯示一個用來標識它電池電量的圖示。這個特性被所有的IOS裝置所支援,包括iPhone,iPod,iPad。耳機的藍芽只是通過兩個IOS藍芽HFP AT:HFP Command AT+XAPL

 

HFP命令AT+XAPL

1)描述:允許通過耳機自定義AT命令

2)發起者:耳機

3)格式:AT+XAPL=[vendorID]-[productID]-[version],[features]

4)引數:

  a、vendorID:標識生產商的vendorID的十六進位制表示,但是沒有0x字首

  b、productID:表示生產生的product ID的十六進位制表示,但是沒有0x字首

  c、version:軟體的版本

  d、features:用十進位制標識的位標識:

    1=耳機支援電池電量報告

    2=耳機暫停或正在充電

    其他值保留

  例子:AT+XAPL=ABCD-1234-0100,3

  響應:+XAPL=iPhone,[features]

HFP命令AT+IPHONEACCEV

1)描述:報告耳機的狀態變更

2)發起者:耳機

3)格式:AT+IPHONEACCEV=[Number of key/value pairs ],[key1 ],[value1 ],[key2 ],[value2 ],。。。

4)引數:

  a、Number of key/value pairs:接下來引數的數量

  b、key:被報告狀態變化的型別

      1=電量等級

      2=暫停狀態

  c、val:更改的值

      Battery events:0-9之間數字的字串 A string value between '0'-'9'.

      Dock state:0 = undocked,1=docked。

(五)硬體介面

一般藍芽晶片通過UART、USB、SDIO、I2S、PcCard和主控晶片通訊。如下圖所示,通過UART和主控晶片通訊。