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

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

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

一、廣播數據格式

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

Advertisements

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

1. flag

AD Type是0x1,代表廣播模式。LE limited 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。

Advertisements

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事件。

關注微信公眾號:嵌入式企鵝圈,獲取上百篇物聯網原創技術分享,資深工程師力作!

Advertisements

你可能會喜歡