藍牙廣播數據格式和動態改變

 本文由嵌入式企鵝圈原創團隊成員黃鑫提供。 

廣播內容的自定義是藍牙BLE開發的基本技能,用戶最多能夠設置31字節。但是用戶定義是必須要遵循BLE協議的。另外,ibeacon應用和一些特定的應用要利用廣播來傳遞數據,而且不同時間段的廣播內容還會改變,如ibeacon的major/minor和電量顯示等待。本文即闡述藍牙的廣播數據格式和動態改變。

參考文檔:bluetooth specification version 4.0, p1735-p1738

一、廣播數據格式

總共31字節,由一個或者多個廣播結構單元組成,每個單元由長度Length、廣播內容類型AD Type、廣播數據AD Data組成;長度爲AD Type加上AD Data的長度,不包括長度自身所佔字節。

二、常見廣播內容類型AD Type

1.flag

AD Type是0x1,代表廣播模式。LElimited Discoverable(AD data是0x0)是有限時間廣播,而General Discoverable(AD data是0x1)是無限廣播,直到被主動停止廣播。

2. Manufacture specific data

AD Type是0xff,代表廠商數據,自定義的數據可以寫到這裏。很多第三方場景應用都是利用這個字段來進一步定義應用協議格式,如微信的airsync協議和ibeacon協議。

3. service

代表服務的UUID,一般用16bit的UUID。如微信airsync協議的ServiceUUID是0xFEE7。

4. TX POWER LEVEL

發射功率,主機根據它和RSSI就可以計算主機到從機的距離,ibeacon室內定位即是利用這點。


5. local name

設備名稱

常見的廣播內容類型就是上面五種,其他的不常見就不講了。

三、廣播動態改變

動態改變其實跟各個藍牙單芯片的sdk事件處理機制有關,但是對於CC2541、DA14580和nrf52832等平臺來說,他們的處理基本是一樣的:

1)要想改變廣播內容,必須先停止廣播,再進行廣播內容更新,然後重新廣播生效。

2)必須要等到底層BLE協議棧完全停止廣播後,發送確認信息給應用層之後,才能改變廣播內容並重新廣播。

以DA14580來舉例,其在一直廣播過程中,在需要改變廣播內容時,要先向GAPM(廣播屬於GAP層管理)發送GAPM_CANCEL_CMD取消廣播,底層處理完會受到一個GAPM_CMP_EVT完成的事件,在該事件處理中修改廣播內容,並重新發送GAPM_START_ADVERTISE_CMD命令開始廣播。

四、廣播TIMEOUT

       對於DA14580來說,其默認是一直廣播下去的,直到被取消或者轉到連接狀態。如果希望只廣播一定時間就進入睡眠,則需要定義一個timer。

       對於nrf52832來說,其接口內置一個定時器,可以設置無線廣播,也可以設置一個時間,時間到了就會收到一個TIMEOUT事件。

 

關注微信公衆號:嵌入式企鵝圈,獲得上百篇物聯網原創技術分享!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章