官方文檔
specifications
assigned-numbers
藍牙傳輸頻段
低功耗藍牙一共有40個信道,頻段范圍從2402MHz到2480MHz,其中37,38,39是廣播信道,剩余的是數(shù)據(jù)信道。

為什么要選擇37,38,39做廣播通道呢?
我們可以看看wifi傳輸信道情況,這樣設(shè)計可能是為了最大程度避開wifi傳輸信道的干擾,影響廣播掃描配對。配對成功后,藍牙傳輸支持channel hop功能來做抗干擾。

為什么是2.4G頻段呢?
2.4GHz 頻率屬于 ISM(工業(yè)、科學及醫(yī)療設(shè)備)頻率,無需經(jīng)過當局許可便可使用,屬于全球通用。
藍牙廣播數(shù)據(jù)
藍牙廣播數(shù)據(jù)包長度37個字節(jié),其中前6個字節(jié)固定是Mac地址,剩余31個字節(jié)根據(jù)實際情況定義。

來看一個具體的例子,如下是一個廣播數(shù)據(jù)包的兩個結(jié)構(gòu)體,第一個占用5個字節(jié),第二個占用4個字節(jié),剩余不足31個字節(jié)的位置補零。

上面知道了廣播數(shù)據(jù)結(jié)構(gòu)體的組織方式,下面來看看如何解釋這些數(shù)據(jù)結(jié)構(gòu)體。我們可以在官方提供的Generic Access Profile文檔中查看完整的廣播類型定義,這里列舉幾個常用的類型說明:

說了 這么多,我們來實踐一下,如下是通過nRF Connect抓取自研遙控器廣播數(shù)據(jù)包字段,我們來解析一下看看:


很多字段都是需要在藍牙官方資料中查詢,這里羅列幾個常用查詢地址:
藍牙掃描,廣播時長和窗口期
- scan 指的是central端在掃描周邊藍牙設(shè)備,必須設(shè)置scan interval(掃描周期:2.5ms~10.24s)Advertising 指的是peripheral端廣播信息,需設(shè)定Advertising interval(廣播周期:20ms~10.24s)
- Interval時間越長,越省點,反之越耗電
- 設(shè)定Time out時間,避免長期scan或者Advertising造成產(chǎn)品耗電。

藍牙廣播分類和掃描
藍牙廣播分類主要從三個維度出發(fā):
- connectability可連接性:Connectable vs Non-connectable
- scannability可被掃描性:Scannable vs Non-scannable,可掃描的意思是scanner可以發(fā)送scan request,advertiser發(fā)送scan response data
- directability定向性:Directed vs Undirected,定向的意思是指定scanner的地址,其他scaner不能連接上來
另外一個維度是discoverable,分為non-discoverable vs discoverable(general or limited),non-discoverable可以理解,就是不可發(fā)現(xiàn)。
| 廣播類型 | 使用 | 連接支持 | 掃描響應(yīng) |
|---|---|---|---|
| 可連接非定向 | 常用普通廣播方式 | 是 | 支持 |
| 可連接定向 | 用于已配對過,快速回連廣播 | 指定設(shè)備可連 | 不支持 |
| 不可連接非定向 | 常用于信標,傳感器 | 否 | 不支持 |
| 可掃描非定向 | 在3的基礎(chǔ),添加可以掃描響應(yīng),用來承載更多數(shù)據(jù) | 否 | 支持 |
藍牙廣播和掃描
藍牙廣播和掃描數(shù)據(jù)格式是一樣的,不同的是廣播是從機設(shè)備主動發(fā)出,而掃描是從機設(shè)備響應(yīng)主機設(shè)備的掃描請求后發(fā)出。有時藍牙廣播數(shù)據(jù)長度超過31個字節(jié),我們會把其他數(shù)據(jù)通過掃描響應(yīng)反饋給主機設(shè)備。

藍牙連接
在連接配對期間peripheral 需要提供四個參數(shù)給到central:
. MIN_CONN_INTERVAL
. MAX_CONN_INTERVAL
. SALVE_LATENCY
. CONN_SUP_TIMEOUT
central 會參考這四個參數(shù),并傳輸connect event給peripheral當做彼此溝通的時間。
connect interval:標準位7.5ms~4s(IOS interval:20ms~2s)
slave latency: 為了節(jié)省peripheral的功耗,central可以接受peripheral幾次不會傳。
supervision Timeout:設(shè)定當多久沒用收到任何通訊要求時,中斷連接。

藍牙服務(wù)和特性
藍牙協(xié)議框圖

藍牙設(shè)備服務(wù)和特性關(guān)系

藍牙服務(wù)和特性UUID

可以看到上面128bit的uuid非常長,而我們在實際使用或者在nrfconnect里看到的uuid是沒有這么長的,是因為藍牙聯(lián)盟組織為了方便,給出了一個基地址,用戶可以在基地址的基礎(chǔ)上修改16bit來作為自己需要的uuid。

在低功耗藍牙中,所有的數(shù)據(jù)通信都依賴于各個服務(wù)中的特性,根據(jù)特性的可讀,可寫,通知等不同類型進行劃分。每個特性可以同時賦值為多個不同的權(quán)限。


16-bit UUIDs

這是因為從0x1800開始,是藍牙聯(lián)盟官方定義好的一些通用服務(wù)的UUID,每個藍牙設(shè)備如果需要使用,都需要遵守這個UUID定義,這樣在藍牙主機端則可以非常方便的獲取從機藍牙設(shè)備的相關(guān)屬性數(shù)據(jù)。

從0x2A00開始,則是定義好的特性UUID
