BLE藍芽協議 BLE連線建立過程梳理(一)

2021-08-20 13:17:03 字數 2714 閱讀 8028

應付比廣播更為複雜的資料傳輸,或者要在裝置之間實現可靠的資料交付,這些都要依賴於連線。連線使用資料通道在兩個裝置之間可靠地傳送資訊。它採取了自適應跳頻增強魯棒性,同時使用了非常低的占空比,盡可能地降低功率消耗。

裝置建立連線的過程如下圖所示。簡言之,裝置首先廣播可連線廣播事件,其他裝置收到之後即可發起連線。在此過程中,廣播者傳送的事件型別要麼是通用廣播事件,要麼是直接廣播事件。發起者收到正確的廣播報文時,將向廣播者傳送乙個連線請求,其中包括了連線開始時需要的所有資訊。

下面來了解連線過程中涉及到的一些主要知識點:

1.連線中使用的接入位址

2.crc初始值

3.傳送視窗

4.連線事件和連線引數

5.自適應跳頻信道圖

6.睡眠時鐘精度

一旦收到或發出連線請求報文,裝置即建立了連線,資料交換隨之開始。

連線使用的接入位址總是由主裝置來提供。位址通過隨機生成,但是需要遵循一些規則。如果主裝置有多個從裝置,它會為每個從裝置選擇不同的隨機接入位址。位址的隨機性確保了在不同的主從裝置之間發生的碰撞概率會很低。隨機性也增強了隱私,掃瞄者無法得知是哪兩個裝置正在通訊。

crc初始值是另乙個由主裝置提供的隨機數。隨機的意義在於,如果在同乙個區域有兩個主裝置正在和不同從裝置通訊,那麼使用相同的接入位址的概率將會很低。如果確實發生了這種情況,從裝置會從錯誤的主裝置收到干擾資料報。因此,為每個從裝置設定隨機的crc初始值,主從裝置既有相同的接入位址又有相同的crc初始值的概率就會變得微乎其微。

從裝置可以自行決定廣播的時間,它們是最需要儲存電量的裝置,這樣的設計並無不妥。但是,如果主裝置已經在做其他事情,也許是一些更重要的事情,那麼它必須讓低功耗藍芽錯開當前的活動。在連線建立期間,有兩個引數用來傳遞上述資訊:視窗大小和視窗間隔。

當連線請求資料報傳送完畢,存在乙個

1.25ms

的強制時延,緊接著是傳送視窗偏移和傳送視窗。傳送視窗偏移可以是

0到連線間隔之間的任意值,但必須為

1.25ms

的整數倍。從傳送視窗開始,從裝置開啟其接收器,並等待來自主裝置的資料報。如果到傳送視窗結束時仍未收到資料報,從裝置終止偵聽,並會在乙個連線的間隔後再次嘗試。

關於連線過程,最有趣的乙個地方是,一旦傳送了連線請求,主裝置便認為自身有了連線;該連線已經建立(created),但還不能算是完全確立(established)。當從裝置收到連線請求時,它也認為自己已經處在連線之中;連線已經建立,但不能證明完全確立。

出於效率的考慮,連線已經建立,主機就會立即收到通知。連線可能不會成功,從裝置也許收不到連線請求,或者兩個裝置的距離很遠。這些情況如果發生,連線失敗的概率將變得很高。然而,由於主機收到了連線已建立的通知,它可以開始將資料發給控制器從而為首個無線資料報的傳輸做好準備,並且節約時間和能量。因為第乙個資料報的傳送至少會在

1.25ms

延遲之後,主機堆疊應該有足夠的時間向控制器提供資料,以便在第一時間傳送出去。這種強制性的延遲為裝置提供了喘息的機會:在繁重的廣播規程與連線正式確立之間,電池獲得了寶貴的恢復時間。

只有收到了資料報確認,連線才能視為正式確立。確立不改變連線的工作方式,但它改變了鏈路監控超時的時間

從之前的

6個連線間隔,變為了在連線請求中設定的值。這樣一來,如果連線不能迅速確立的話將會立即終止。

自適應跳頻信道圖是資料通道的位掩碼,用來標記通道的好壞。由於共有37個資料通道,通道圖的長度於是設為37位。如果某一位被設定為1,表明該通道良好,可用於資料通訊;如果該位為0,表明該通道很糟,不可用於資料通訊。

跳頻演算法的跳數值是在

5 ~ 16

之間的乙個隨機數。跳數值被用在自適應重對映之前的跳頻演算法中。顯然,跳數值不能為

0,否則頻率永遠不會改變。

非常低的跳數也是不可取的,因為大多數的干擾一般會佔據好幾兆頻寬,使用非常小的跳數值將不會快速地將傳輸帶離干擾源,可能造成持續干擾。同樣的邏輯也適用於

17或更高的值。試想,如果增量為

17,由於跳頻演算法中要對

37個通道取模,每兩個頻率之間的差距將緊緊只有

3個通道。

最後,主裝置發往從裝置的資訊中還包括睡眠時間精度值。該值定義了時鐘能夠保證的精度範圍。如果時鐘由晶振提供,晶振有乙個根據溫度變化的精度範圍,比如在室溫下為 20ppm,在 0℃ 或 85℃ 時為 50ppm 。如此一來,裝置可以宣告其時鐘精度達到 50ppm 。

時鐘精度可以幫助從裝置消除連線事件的不穩定性。如果從裝置與主裝置的不同步時間達到 

1s,而這兩個裝置的定時精度均為 

500ppm

,那麼,將合併的不確定性 

1000ppm 

乘以上述時間,就得到乙個 

1ms 

的不確定視窗。也就是說,從裝置必須提早 

1ms醒來,並在這額外的 

1ms 

內保持偵聽,以仿主裝置和從裝置的時鐘在不同的方向發生了最大漂移。

更精確的時鐘可以降低功耗。還是以使用晶振的裝置為例,如果兩個裝置的時鐘精度分別為 

50ppm 

和 150ppm 

,二者合併後的精度只有 

200ppm 

。一秒鐘之後,從裝置只需要提前 

200μ

s 醒來並保持偵聽。如果裝置被喚醒的頻率不高,他們的可用工作時間將 

5 倍於兩個使用 

500ppm 

晶振的裝置。因此,如果對降低功耗有特別的要求,建議在裝置中使用高精度的晶振。

低功耗藍芽BLE之連線建立

應付比廣播更為複雜的資料傳輸,或者要在裝置之間實現可靠的資料交付,這些都要依賴於連線。連線使用資料通道在兩個裝置之間可靠地傳送資訊。它採取了自適應跳頻增強魯棒性,同時使用了非常低的占空比,盡可能地降低功率消耗。裝置建立連線的過程如下圖所示。簡言之,裝置首先廣播可連線廣播事件,其他裝置收到之後即可發起...

藍芽ble讀寫

手機上可以獲取對應的返回值 但是如果用手機給藍芽ble傳送指定指令,則沒辦法接收到任何資料,請問用官方ble二次開發可不可以實現手機同ble裝置的讀寫通訊?傳送指令 如下 datacharacteristic.setvalue 123 getbytes datacharacteristic.setw...

藍芽 ble 總結

藍芽ble是藍芽4.0 以上低功耗藍芽的意思,同時區別於基本的藍芽。藍芽ble有自己的協議,同時在使用時基本上使用gatt就可以滿足基本的通訊任務。藍芽ble在除錯時需要使用基本的工具 藍芽的基本工具可以使用bluez這軟體包來編譯。同時這個軟體包裡面也有一些事例可以檢視,和使用。推薦使用5.5版本...