Bluetooth 4.0 區分為 Basic Rate (BR) 與 Bluetooth Low Energy (BLE). BR 是我們過往認知的藍牙, BLE 則設計成每次傳送很小的封包資料, 相比 BR 裝置很省電, 適合用在穿戴裝置與物聯網. 能同時支援 BR 與 BLE 的裝置叫做雙模 (dual-mode), 例如智慧手機, 筆電等. 僅能支援 BLE 的則為單模 (single-mode).
BLE Protocol Stack architecture 長這樣..
Physical Layer, Link Layer 和 HCI 三層合稱做 Controller.
Physical Layer
實體層, 最底層.
Link Layer
主要處理底層網路連線狀態, 會有六種可能的狀態:
- Standby
- Advertiser
- Scanner
- Initiator
- Master
- Slave
Host/Controller Interface (HCI)
做上下層之間通信用途, 讓 Host 可以透過 UART, USB, SDIO 之類的標準介面和 Controller 溝通.
GAP, GATT, SMP, ATT, L2CP 合稱做 Host.
Generic Access Profile (GAP)
負責連線相關的服務, 包括:
- Device Discovery (裝置搜尋)
- Link Establishment/Management/Termination (連線 建立/維護/終止)
- Initiation of security features
這邊定義了四種 profile roles (角色), 包括:
- Broadcaster (廣播者)
只發送數據, 不能被連線的裝置. 例如溫度感測器.
- Observer (觀察者)
會接收數據, 但不會啟動連線的裝置. 例如溫度顯示面版.
- Peripheral (週邊)
會發送數據, 也能做為 slave 被連線的裝置. 例如智慧手錶.
- Central (中控)
能接收數據, 也能做為 master 來啟動連線. 例如智慧手機.
然後, 一個裝置是可以同時具有不同 profile roles 的. 例如
- Peripheral (週邊) + Broadcaster (廣播者)
- Peripheral (週邊) + Observer (觀察者)
- Central (中控) + Broadcaster (廣播者)
另外, GAP 這邊還定義了三種裝置搜尋模式, 包括:
- Non-discoverable Mode (不可被搜尋)
裝置不會發送廣告封包出來.
- Limited Discoverable Mode (有限度被搜尋)
裝置會在一定時限內發送廣告封包, 若沒進一步發生什麼事的話, 就進入 standby 模式.
- General Discoverable Mode (不限制)
裝置會持續發送廣告封包.
Security Manager Protocol (SMP)
負責加密與認證. 這邊定義了裝置之間會有三種關係:
- Pairing
- Authentication
- Bonding
Logical Link Control and Adaptation Protocol (L2CAP)
萊恩大兵不知該怎麼形容這部份.
Attribute Protocol (ATT)
這邊有定義了 client/server 的角色與兩邊資料傳遞讀寫機制.
Generic Attribute Profile (GATT)
萊恩大兵也不知該怎麼形容這部份, 只知道這邊有個叫做 Characteristic 的, 會在稍後的程式碼裡面有用到.
再來要說一下 TI 原廠的 BLE stack, 從官方的文件說明可以知道, 這 CC2540 是一顆整合了 8051 MCU, RF Transceiver, 8KB RAM 與 flash 的 SoC (System on chip). 官方有提供完整的 framework, 建議開發者儘量遵循 framework 的架構來做開發, 會比較少問題.
一隻 CC2540 應用程式, 可分成五大模塊:
- Operating System Abstraction layer (OSAL)
- Hardwar Abstraction Layer (HAL)
- KeyFobDemo Application, 例如, SimpleBLEPeripheral.
- BLE Protocol Stack
- Profiles: GAP Role, GAP Security 和 GATT Services
萊恩大兵對這些模塊的功能用途還模模糊糊的, 就不強作解釋了.
值得一提的還有 training slides 的 agenda:
- CC2540 Hardware Overview
- CC2540 BLE Software Architecture and Structure
- SimpleBLEPeripheral Project / Framework for Custom Applications
- GAP Role Profiles and Bond Manager
- GATT Profiles and Services
- CC2540DK-MINI Kit Overview
應該這些項目 (GAP Role Profiles, Bond Manager, GATT Profiles..) 就是未來在開發 BLE 程式時, 要重點關注的項目吧.
=-=-=-=- 分隔線 -=-=-=-=-=
找阿立聊一下才了解. 這研究會暫訂的走向, 是要把 SimpleBLECentral 放手機上執行, 來操控 SimpleBLEPeripheral 的裝置. 所以我們大家才需要深入了解 SimpleBLEPeripheral 的架構.
來看 SimpleBLEPeripheral 的 code.
(1) 程式裡面會用 compiler settings 的 symbol 來開關某些功能
(2) 初始值
這邊可以設定裝置預設的 discoverable mode.
也可以更改裝置的名稱.
(3) Profile callbacks
這邊可以填入自訂的 function, 讓某些狀況發生時, 會自動呼叫該 function.
順道說一下, GAP Peripheral Role Profile 會處理 advertisements, scan requests, connections 與 connection parameters. 而 GAP Peripheral Bond Manager 則是去回應 pairing 或 bonding requests, 以及 security keys 的儲存與維護.
(4) Events
這邊以後會有機會自訂 event 來處理某些狀況.
(5) Characteristic
這 characteristic, 我們可以拿 LightBlue 去連接一個 SimpleBLEPeripheral 裝置, 然後直接寫值給它.