2016年8月11日 星期四

BLE 解析

Software: OSAL, HAL, BLE Protocol Stack (PS), profiles, application


[OSAL]
Operating System Abstraction Layer, 整個BLE 都是基於 OSAL 來做的, OSAL 不是一個完整的 OS, 但是他依然提供了不少 OS 會有的東西例如 Task, Event, Timer, Message Service...

[HAL]

HAL 為 Hardware Abstraction Layer, 他算是一個 HW/SW 中間的介面

[BLE Protocol Stack]

<Generic Access Profile (GAP)>

主要是處理 device access mode 和一些重要的 procedures 如
  • device discovery
  • link establishment
  • link termination
  • initiation of security features
  • device configuration.
GAP layer 可以扮演以下四種角色:
  • Broadcaster: 負責廣播資料, 無法被建立連線 (non-connectable)
  • Observer: 掃描並讀取其他裝置的廣播資訊 (advertisement), 但不能起始一個連線 (non-connectable)
  • Peripheral: 可以接受連線的 advertiser, 屬於一個 link layer slave 的角色
  • Central: 掃描 advertisement 並且可以起始和 peripheral 的連線, 是 link layer connection master 的角色. 目前的 TI BLE central stack 支援三個同時的連線.
<Generic Attribute Profile (GATT)>

  • GATT Client: 對 GATT Server 做 Read/Write data 的動作
  • GATT Server: 本身含有資料, 可以提供給 GATT Client 做 Read/Write 的動作
特別注意, GATT Role 和 GAP Role 是不相關的, GAP master/slave 都可以是 GATT Client/Server, GATT Role 是以資料放在誰那邊做區分, GAP Role 則是以誰發起連線需求做區分 (這邊非常容易搞混)

GATT Server 會包含多個 GATT Services, 也就是提供資料的服務集合, 那其中有兩個 Services 是 Mandatory (必要) 的:
  • Mandatory GAP Service: 裝置跟存取相關的資訊, 例如裝置名稱, 提供者, 產品ID 等等, 每個 BLE 裝置一定要有這個 GAP Service, TI BLE Lib 內建此 GAP Service, 不提供 source code.
  • Mandatory GATT Service: GAT Server 的資訊, 每個 GATT Server 一定要有這個 Service,TI BLE Lib 內建此 GAP Service, 不提供 source code.
Service 下面會有 Characteristics, 也就是此 Service 的 Value, GATT Server 的 Characteristics value 和其 properties/configurations (descriptors) 會放在 attribute table 內, 由很多 attribute 所組成, 除了資料本身外, 每個 attribute 包含了以下三個欄位:
  • Handle: 可以看成是此 attribute 的 address (unique)
  • Type: 哪一種資料型態, 通常會是一個 "UUID" (universal unique identifier), 對應到一個 predefined type (Bluetooth SIG 定義的), 但也可以是 custom type
  • Permissions: 說明 GATT client 如何存取資料 
GATT Server/Client 之間的通訊可以透過以下的 sub-procedures 達到:
  • Read Characteristic Value: 讀取某 handle 的資料
  • Read Using Characteristic UUID: 一次讀取某特定 Type (UUID) 的所有 Characteristics 資料, 會取得多組 handle/value, GATT client 不用知道 handle 就可以讀
  • Read Multiple Characteristic Values: 一次讀取多個 handles 的資料
  • Read Characteristic Descriptor: 由 handle 去讀取 characteristic descriptor 的資料
  • Discover Characteristic by UUID: GATT client 由 type 去取得 GATT server characteristic 的 handle
  • Write Characteristic Value: 寫入某個 handle 的資料值
  • Write Characteristic Descriptor: 寫入某個 characteristic descriptor 值, 藉由 handle
[Profile]



沒有留言:

張貼留言