2014/09/18


感謝鋼鐵人實作聯盟阿立的帶領.


這篇筆記純就記錄每次研究會的進展或心得, 萊恩大兵對 BLE 4.0 還所知不多, 寫出來的東西可能會比較沒系統一點. XD.



前幾回沒跟上的, 可以看這兩篇文來知道大概.

筆記, CC2540 Bluetooth Low Energy, (1) IAR 開發環境 架設 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (2) 跑第一個範例程式 (Bluetooth, CC2540)

今天 (2014/09/16, BLE4.0-4週二飛來鋼鐵人的進展, 則是在說明 SimpleBLEPeripheral 的程式架構. 
沒先作功課, 當場聽阿立說明這段 code 什麼功能, 那段 code 幹嘛用途, 萊恩大兵還真聽的霧茫茫. 


強烈建議, 初心者最好先去翻一下 BLE 軟件開發指南 (請搜尋 BLE软件开发指南) 或 training slides (請搜尋 BLE_CC2540_DeepDive_Training_2011.pdf), 了解一下 BLE 的架構與運作流程, 不求全盤了解, 但至少要知道 GAP, GATT 之類的技術名詞是啥意思, 再來看 code 會比較有感覺. 以下萊恩大兵儘量用自己的理解寫出來, 有些用詞或英文翻譯不一定精準, 純是自己的意思.


=-=-=-=- 分隔線 -=-=-=-=-=


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 裝置, 然後直接寫值給它.




萊恩大兵還沒法將 profile role 或 characteristic 等諸多名詞講清楚, 只好以後慢慢補上了. 
這週的進度就是這些, 下週開始要把程式放上手機, 大家得先準備好手機端的開發環境.


題外話, 當天聚會時, 有張照片的構圖很像四個小朋友的千元大鈔. 大家覺得呢?




[萊恩大兵的其它文章]

自製大四軸

自製大四軸, 零組件篇, (1) 遙控器 (Drone, Quadcopter, Futaba, Maker, Arduino, Animatronic Eye)
自製大四軸, 零組件篇, (2) 飛控板 (Drone, Quadcopter, MultiWii, Arduino, Futaba, Maker)
自製大四軸, 零組件篇, (3) 自行雷切木質機架 (Drone, Quadcopter, Maker, Laser Cut)

自動報球速的棒球


CC2540 Bluetooth Low Energy
筆記, CC2540 Bluetooth Low Energy, (1) 開發環境 架設 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (2) 跑第一個範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (3) SimpleBLEPeripheral 簡單介紹 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (4) 在智慧手機上執行範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (5) 偵測與發送 iBeacon 訊號 (Bluetooth, CC2540, iBeacon)
實作, iBeacon 發訊器 x 防丟器 (Bluetooth, CC2540, iBeacon)
實作, iBeacon 尋寶遊戲 (Bluetooth, CC2540, iBeacon, iOS app)
實作, BLE + iOS app, 遙控燈泡君 (Bluetooth, CC2540, iOS app)
做實驗, 用 iBeacon 做自動控制的可行性 (Bluetooth, iBeacon, CC2540, Automation, URL Scheme, iOS app)

藍色小鋪一起來做

藍色小鋪一起來做, 用 beacon 控制開關的枱燈
藍色小鋪一起來做, 講解 BLE CC2540 UART 通訊範例程式 (Bluetooth, CC2540, UART)
藍色小鋪一起來做, 藍牙枱燈專案實作 (上) (Bluetooth, CC2540)

小惡魔 無線溫度感測器

108 大眼仔
Plot Clock


實作, 電容感應音樂樹

1 意見:

張貼留言