TI BLE軟體開發者指導6 L2CAP(筆記)

2021-07-26 16:34:47 字數 2797 閱讀 2459

texas instruments cc2540/41

bluetooth® low energy

software developer』s guide

v1.3.2

document number:swru271f

《低功耗藍芽開發權威指南》

robin heydon著,陳燦峰、劉嘉 譯

機械工業出版社

2014.6

標籤:讀書筆記 ble

logical link control and adaptation protocol,l2cap是個復用層,可以讓ble復用三條不同的通道。也支援資料的分割和重組功能,使得較大的報文可以在底層無線電中傳輸。

和經典藍芽完全不同,低功耗藍芽的乙個基本概念在於無連線模式。使用者只在需要傳送資料的時候才建立連線,其他時候裝置可以長期處於斷開連線狀態。為了實現該功能,無連線模式必須擴充套件到l2cap層,並且只能使用固定通道。這是由於固定通道無需配置任何的引數,一旦底層鏈路建立連線,固定通道便可立即投入使用,免去了建立通道耗費的額外時間。

在經典藍芽中,通道分為兩種型別:固定通道和面向連線通道。只要兩個裝置建立連線,固定通道就已經存在。固定通道主要作為信令通道。面向連線通道可以隨時建立,只需要給對端傳送一些l2cap信令即可。

通道是指乙個資料報序列,連線兩個裝置上的一對服務。在兩個裝置間允許同時啟用多條通道。

ble只支援固定通道。固定通道指的是兩個裝置一建立連線就已經存在的、沒有任何配置引數的通道。得益於未來擴充套件的靈活性,還可以日後根據需要新增面向連線通道。

l2cap通道識別符號如下所示:

通道識別符號

用法0x0000

保留:不能使用

0x0001

經典藍芽信令通道

0x0002

「無連線」通道

0x0003

amp管理協議

0x0004

屬性協議

0x0005

低功耗信令通道

0x0006

安全管理協議

0x0007 ~ 0x003e

保留:日後可能使用

0x003f

amp測試協議

0x0040 ~ 0xffff

面向連線通道

通道識別符號0x0003用於當需要高速率傳輸資料時所使用的alternate mac/phy協議。通道識別符號0x003f用於測試alternate mac/phy控制器。

ble一共使用了3條通道:0x0004用於屬性協議;0x0005用於低功耗藍芽信令通道;0x0006用於安全管理。

每個l2cap資料報的淨荷前端都包含乙個32位位元報頭。假設使用分割和重組,那麼資料報的長度資訊必須包含在包頭中,以便判斷資料報的結束。使用分割和重組機制需要為每個通過hci介面的資料報打上標記,分為開始資料報還是延續資料報。

l2cap資料報結構如下所示:

長度字段表示報頭後的資訊載荷位元組數。在所有ble通道上,資訊載荷均始於23位元組的最大傳輸單元(maximum transmission unit,mtu)。mtu表示在乙個l2cap通道中資訊載荷的最大位元組數。這意味著,所有ble裝置必須支援在空間傳輸27位元組資料報——4位元組包頭+23位元組資訊載荷。

低功耗信令通道用於主機層級的信令。l2cap命令資料報如下所示:

每個低功耗信令通道的資料報均含有一操作碼,隨後為各種引數。低功耗信令通道支援的命令操作碼如下:

無論什麼時候傳送信令命令,其資訊載荷總是包含一識別符號。該識別符號長度僅1位元組,用於匹配請求和響應。例如,如果請求的識別符號為0x35,則響應該請求的資料報也必須使用0x35作為識別符號。如此一來,只要每個請求有不同的識別符號,多個請求便能同時傳送。由於在用完所有識別符號之前不允許重複使用,實現時一般會採用增量操作以確保符合該規定,但有乙個例外:不嗯能夠使用識別符號0x00.

在ble中,由於只定義一種請求命令型別,並且該請求命令僅用於沒有其他請求傳送的情況,識別符號的邏輯相對簡單。

「命令拒絕」用於拒絕裝置收到的不支援的資訊包。包含乙個原因**以及相關資訊。其中的原因**可以是「命令不理解」或「信令mtu溢位」。當接收到的命令大於23位元組時可以使用「信令mtu溢位」原因**。

「連線引數更新請求」命令可以讓從裝置更新鏈路層連線引數,這些引數包括連線事件間隔、從裝置延遲以及監控超時,過程如下:

participant 主裝置

participant 從裝置

從裝置->主裝置:l2cap連線引數更新請求

主裝置->從裝置:l2cap連線引數更新響應

從裝置->主裝置:鏈路層連線更新請求(瞬時)

note left of 主裝置:瞬時

note over 主裝置,從裝置:啟用新連線引數

在連線中,如果從裝置希望修改當前的連線引數則可以使用該命令。連線引數更新請求命令僅用於從裝置向主裝置傳送,因為主裝置隨時都能啟動鏈路層連線引數更新控制規程。如果該命令有主裝置傳送,從裝置會將其視為乙個錯誤,並返回帶有「命令不理解」原因**的「命令拒絕」命令。

從裝置可以在任何時候傳送給命令。收到該資訊的主裝置如果可以修改連線引數,則將返回「連線引數更新響應」,其中的結果**設為「接收」,隨後主裝置將會啟動鏈路層連線引數更新控制規程。如果主裝置不同意從裝置的請求引數,可以傳送結果**為「拒絕」的連線引數更新響應命令以拒絕請求。此時從裝置有兩個選擇,要麼接受主裝置希望的正在使用的連線引數,要麼終止連線。

軟體開發者面試百問

想僱到搞軟體開發的聰明人可不容易。萬一一不小心,就會搞到一堆低能大狒狒。我去年就碰到這種事了。你肯定不想這樣吧。聽我的,沒錯。在樹上開站立會議門都沒有。問點有難度的問題,能幫你把聰明人跟狒狒們分開。我決定把我自己整理出來的軟體開發者面試百問發出來,希望能幫到你們的忙。這個列表涵蓋了軟體工程知識體系中...

敏捷開發實踐(2) 敏捷軟體開發者的習慣

敏捷開發實踐 2 敏捷軟體開發者的習慣 敏捷開發的最小單位就是參與敏捷開發的個人。將這些敏捷開發者聚集起來,就形成了敏捷開發團隊。正如上回介紹的,敏捷開發是一種以人為核心 迭代 循序漸進的開發方法,它以最大可能地發揮團隊的作用為目的。根據需要,隨時改善,以降低軟體開發中的風險。敏捷開發者的態度 敏捷...

軟體開發者如何提高程式設計能力?

程式設計能力是乙個比較大的概念,是利用計算機程式語言實現軟體開發的能力的統稱。這個能力主要包括邏輯思維,學習能力。程式設計能力是軟體開發者的軟實力,可以靈活應用到其他任何地方。從上向下 學習,指從計算機高階語言開始學習到底層系統以及硬體的學習路徑。從下往上 路線剛好和 從上往下 相反。其實無論從 學...