CC254x--BLE
BLE協議棧
BLE體系結構,著重了解GAP和GATT。
- PHY物理層在2.4GHz的ISM頻段中跳頻識別。
- LL連接層:控制設備的狀態。設備可能有5中狀態:就緒standby,廣播advertising,搜索scanning,初始化initiating和連接connected。廣播者傳播數據,使得瀏覽者可以接收到。initiator就是一個對廣播者回復連接請求的設備。如果廣播者接受請求,廣播者和initiator初始者就會進入connected連接狀態。一個處于連接狀態的設備會有一個角色:master和slave。初始化這個連接的為master,接受這個連接請求的為slave。
- ?HCI層為host和controller之間通過一個標準接口進行通信提供了一些方法。這一層可以通過一個軟件API或者是硬件接口如UART,SPI和USB。
- ?L2CAP為上層數據提供封裝服務。
- ?SM:定義了建立連接和KEY的方法。
- GAP:直接與profile和app進行接觸,解決設備的發現和連接相關的服務,此外GAP也會初始化安全相關的特色。
- ATT:允許一個設備去顯示一些數據,對于其他設備稱之為“Attribute屬性”,在ATT中,那些顯示這些屬性的設備被稱為server,同等的另一個設備稱為client。LL層的狀態master和slave和ATT層的這兩個狀態無關。
- GATT層:是一個服務框架定義了對ATT應用的子程序。GATT指定了profile的結構。在BLE中,由profile或者是服務所使用的所有類型的數據都稱為characteristic。發生于兩個設備間通過BLE連接進行交換的數據都需經過GATT子程序處理。因此,app和profile會直接使用GATT。
要開發app,真正接觸的是GAP和GATT,GAP用來建立連接,GATT用來數據傳送。
GAP
一個從設備只能鏈接一個主設備。
低功耗藍牙設備定義了四類GAP角色:
- 廣播者
- 觀察者
- 外圍設備
- 中央設備
GATT
建立連接的流程
應用數據傳輸流程
PROFILE、SERVICE、CHARACTERISTIC、UUID
藍牙BLE有自己的協議標準,一個產品可以有很多服務service,一個藍牙服務service包括一個或者多個characteristics,而每個characteristics都包含對應UUID、屬性描述(如可讀、可寫、長度等)、屬性值value、屬性配置(代表訂閱信息)等等。
每一個屬性都有一個地址——句柄。為了簡化后續的數據處理,一般framework會設置一個handle來對應一個characteristics。服務是一種或多種特性的組合;特性則由一種或多種屬性組成。
特征字主要包含write、read、notify和indicate等主要通信方式。
- 對于藍牙外設的write特征字,主設備(如手機)可以進行寫操作;
- 對于read,主設備則可以從中讀取信息;
- write和read對于藍牙外設來說,其屬于被動控制,即藍牙外設被動接受主控制的通信控制。
- 而notify和indicate則是藍牙外設主動向主設備傳輸數據,前提是主設備要預先訂閱對應的characteristics的信息更新。Notify數據后,主設備不需要應答響應,而indicate則需要應答響應。
屬性
屬性概述
| 2字節 | 2或6字節 | 0~512字節 |
| 屬性句柄 | 屬性類型 | 屬性值 |
屬性句柄
有效的句柄范圍從0x0001~0xFFFF。0x0000為無效句柄,不能用于尋址屬性。你可以根據自己在軟件硬件或嵌入式方面的背景,把句柄相應地想象為內存地址、端口號、屬性值對應的硬件寄存器地址。
屬性類型
可以被公開的數據有許許多多的類型:溫度、壓強、體積、距離、功率、時間、充電狀態、開關狀態、狀態機的狀態等。所公開的數據的種類稱作屬性類型。為了區分如此多的數據類型,一串128位的數字被用來標識屬性的類型。這個唯一的標識碼就叫做通用唯一識別碼(UUID)。
藍牙UUID基數如下:
00000000-0000-1000-8000-00805F9B34FB
0x1800 ~ 0x26FF 用于服務類通用唯一識別碼
0x2700 ~ 0x27FF 用于標識計量單位
0x2800 ~ 0x28FF 用于區分屬性類型
0x2900 ~ 0x29FF 用于特征描述
0x2A00 ~ 0x7FFF 用于區分特性類型
屬性值
屬性值用于標識設備公開的狀態信息。屬性值的長度可以從0字節到最長512字節,但某些類型的屬性值的長度則是固定的。屬性值對屬性協議來說并不重要,但它對于上層,包括通用屬性規范和其之上的服務于規范來說有著相當重要的意義。
最小的屬性數據庫必須包含以下的六種屬性:《GAP服務》的《首要服務》、《設備名》的《特性》、《設備名》的值、《外觀》的《特性》、《外觀》的值、《GATT服務》的《首要服務》。但這樣的數據庫沒能公開足夠的狀態,故沒有實用價值。綁定
如果客戶端想與其他設備建立長期通信關系,首先應連接該設備,找到一些能用的服務,然后啟動一個安全連接。這些安全連接先是認證該設備為正確的設備,再對連接進行加密以確保機密。最后,設備交換一些配對信息——這是關鍵的一部:如果客戶端存儲了該配對信息,就與對端設備完成了“綁定”。
綁定的重要性在于,當客戶端重新連接到該設備時,并不需要再次認證身份或交換配對信息,而只需要將部分的綁定信息用于連接加密。于是設備之間便建立了一個認證的、保密的數據連接。
綁定也提供了一些其他好處。設備綁定之后,服務器將為此客戶端保存其配置數據。這種模式將使重連設備立刻收到通知,而不需要重新配置服務器。
這種方法的另一個主要優勢是,客戶端可以記住外圍設備的屬性句柄燈信息。也就是說,一旦中央設備了解了外圍設備的服務集,并且完成了配置,就能記住相關的屬性句柄。當中央設備重新連接到外圍設備,它可以讀取和寫入這些屬性句柄,而不用再做一次服務掃描。這減少了從連接到使用設備之間所需要的時間。
應注意,服務變更只與邦定的設備密切相關。如果中央設備沒有和外圍設備綁定,則不能緩存屬性句柄,也收不到任何服務變更的通知。換言之,對兩個未綁定設備來說,客戶端必須在每次連接時刷新服務器對的整個服務列表和特性列表。總結
以上是生活随笔為你收集整理的CC254x--BLE的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无线安全***--启程
- 下一篇: 2020五一建模:C题 饲料混合加工问题