2017年1月16日 星期一

CC2541 與 BLE 名詞提示

http://gogoprivateryan.blogspot.tw/2014/09/cc2540-bluetooth-low-energy-3.html

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

CC2541 耗電與省電

參考
http://www.itdadao.com/articles/c15a543513p0.html

实验结果

电阻状态\模式PowerMode 1PowerMode 2PowerMode 3
上拉254.2μA1.2μA0.4μA
下拉254.4μA1.2μA0.37μA
高阻601.3μA182.4μA398.9μA

实验结论

  • 在PIN脚没有外设的情况下,应该把PIN脚配置成确定的状态,非确定的状态(高阻状态)会带来高功耗的电流。
  • PIN脚有外设连接的情况下,需要根据实际的情况作出相应的配置,以达到最低功耗的效果。


完整概念, 參考:
https://takako042.wordpress.com/2008/09/11/%E9%9B%BB%E8%B7%AF%E5%B8%B8%E8%AD%98%E6%80%A7%E6%A6%82%E5%BF%B5%EF%BC%885%EF%BC%89-%E4%B8%8A%E6%8B%89%E9%9B%BB%E9%98%BB%E3%80%81%E4%B8%8B%E6%8B%89%E9%9B%BB%E9%98%BB-%E6%8B%89%E9%9B%BB%E6%B5%81/