2016年1月12日 星期二

BLE 簡介:Bluetooth low energy

From:http://shyuanliang.blogspot.tw/2014_10_01_archive.html


Basic Rate (BR; 通常意指 "BR/EDR"  "Basic Rate / Enhanced Data Rate")
Bluetooth low energy (BLE)BLE 系統的設計目標就是每次傳送很小封包的資料,對比 BR/EDR裝置就可以相當明顯地節省能源。

同時能支援 BR  BLE 的裝置被稱為雙模 (dual-mode) 而歸類於 Bluetooth Smart Ready 名下。在手機或是筆記型電腦上,必定是配置雙模裝置。但是週邊裝置則多半會根據需求選邊站,僅支援BLE 的裝置即單模 (single mode) ,則被歸類於 Bluetooth Smart

Bluetooth Smart Ready 代表支持雙模的裝置。


Bluetooth Smart 則是僅支援 BLE 的裝置。




傳統BTBLE架構有什麼不一樣呢?


以上面這張Bluetooth的架構圖,可以看到Bluetooth的基礎架構仍然是維持上下兩大塊,Hostcontroller,中間是兩方面溝通的 HCI (Host Controller Interface)。以controller而言,原本到3.0是分為兩個controller BR/EDR controllerAMP controller,現在將BR/EDR擴充,變為BR/EDR/LE controller,可以看到與原本的controller有一些的不同,就是在於Link Layer。而PHY(RF)HCI也都有為了low energy(以下簡稱LE)做了補充加強。而Host,則是除了L2CAPGAP是擴充原本加入支援LE的功能,其他的ATT protocolGATT profile都是為了LE而新增的階層。
以上圖說明,傳統的藍牙有9種的protocol,而BLE則簡化為一個,稱作Attribute protocol(ATT),就很像傳統藍牙用來傳資料的protocolRFCOMM;基於ATT上面稱作Generic Attribute profileBLE各種制定的Profile就是基於GATT的,這很重要唷。如果再將架構圖畫細一點,如下圖。

BLE與傳統BT架構有類似的階層,那就是PHYHCIL2CAP以及GAP,除了延用傳統BT時的舊有功能,針對BLE也做了整體性的加強。BLE一開始 就是為了省電及傳資料為最主要目的,與傳統BT包山包海大不同,傳統BT不僅支援資料傳輸、語音通話、立體聲、HID,以及各式各樣的控制。但BLE所制定的profile只是要改善BT其中一部份而已,但這部份卻足以應用更加多元,讓這些新的profile更加省電。比如HDPHID,明顯看得出來這 profile都是偏向小資料傳輸的,所以BLE並不支援聲音的傳送唷。 
傳統的BT為了要支援許許多多的profile,制定了好幾種的protocol,所以所傳送的packet也有好幾種;BLE的設計就簡單多了,只有一種,ATT,只有一種packet structure,一個packet formats,當中參數不同來決定是Advertising還是Data packets,一切的一切都是為了簡單再簡單,省電再省電啦,封包小了,步驟簡化了,當然就省電啦。

協議層特性(protocol)
低功耗藍牙在與Classic BT共用的底層架構之上(L2CAP/HCI),架構了以attribute為基礎的通訊架構(Attribute ProtocolATT),將設備間的通訊切割成以request/response為基礎的資料交換。在ATT之上的是GATT(Generic Attribute Profile),定義了基於ATT進行通訊的設備之間的主從關係(Central/Peripheral/Broadcaster /Observer)、服務探索方式以及各種數據讀寫模式等等。這也是開發者所能接觸到的最底層功能。
GATT上,應用可以依據功能 (Feature)將不同的數據群組以服務(Service)的方式發布出去,另外,針對不同需求、應用可以和一個或多個服務進行溝通,形成一個 Profile。這部分在Classic BT和低功耗藍牙之間的定義是不同的。BluetoothSIG針對常用的功能已經定義了相當數量的Service/Profile,如心跳計、體溫計 等,但開發者依然可以依照自己的需求在GATT之上發揮。

  1. Physical Layer物理層
  2. Link Layer鏈路控制層
  3. HCI提供標準藍芽事件及通知層
  4. Logical Link Control and Adaption Protocol負責連接和事件
  5. Security Manager配對、數據加密這類
  6. Attribute Protocol所有數據傳輸經過這層實現(ATT),定義了ClientServerClient就傳RequestServerresponse
  7. Generic Attribute Profile具體實現數據的傳輸(GATT) Server上所有的ATT都被實作了,成為一個個的。Services,通過這樣的形式把數據包給Client。把ATT定義的屬性根據不同的服務進行 歸類、組合,同時把一系列的讀寫整合起來,成為一系列的數據通信操作流程,提供給上層的Profile去用。
  8. Generic Access Prifile設備查找、連接建立(GAP),定義了四個角色
    PeripheralCentral:兩個設備連接後,進行通訊的角色。Peripheral通常是連接外面的設備(從設備),例如說血壓計等等。而Central則是連接主設備,例如手機、電腦等等。Peripheral通常是ATTGATTClientCentral通常是ATTGATTServer
    BroadcasterObserver:兩個設備在不見連接的時後,進行通訊的角色。Broadcaster會通過一個簡單的設備,不斷的把數據丟出去,例如一個單純的溫度計。Observer則接收這些封包把相應的溫度值儲存起來。
  9. App層:一些PROFILE和一些應用組成。在APP層經過Profile的實做,來做讀寫操作的動作。

由於Link layer4.0是一全新的架構,其實就是簡化LMLC,並包成LL啦。先說LC(Link Controller),他也可以稱為Baseband基頻,這個很基本也是最先要認識的階層,比如要了解BT設備如何運作、如何連接其他的BT設備、 BT設備有哪些工作模式等。有一句話說明了LL的工作:Packets and radio control。這一階層要做的事情很基本又很多,一個一個慢慢來吧。
下面的physical layer只是很單純的傳送與接收,channel分成40個然後呢?以前每個channel的功能都一樣,現在BLE 40channle中,3個固定的channels是專門拿來Advertising用,用來廣播(broadcast) 料,discoverabilityconnectability的;其他37個才是傳data用,且也會利用AFH來降傳同頻段(wifi)的干擾, 提升與wifi的並存性,這樣分advdata不同的channel來做不同的事比較有效率吧。

綠色的channel就是用來advertise
Advertisingdata的封包長什麼樣子?既然有分advertising及傳data,總要有流程步驟吧,所以當兩端傳送資料時每一個流程應該在每一步會定義不一樣的state狀態。
 LL基本的工作就是要控制裝置的RF狀態,每一個狀態的工作皆不同,共有5種狀態:standbyadvertisingscanning initiatingconnected。假設有一個host及一個devicehost要與device做連線,也就是都會進入connected 狀態,流程是這樣的;device會先advertising廣播告訴大家,我在這邊,我可以被連,我有哪些service,我的tx power是多少,只有扮演scannerhost才會知道有人在advertise,這就是host接下來要進入的狀態,host當找到確定的 device時,就會停止scanning轉換到initiating來對device提出連線要求,當device接受連線邀請時,就會進入 connected,同時host也會進入connected,這時候原本是initiating的是Master,而原本是advertising的則 slave。同時間Master可以建立多條LL連線,但Slave僅能有一個LL連線,既然Mater可以連好多的slave,所以已經連線後變 Master,再次要連接另一device時,又同時可身兼ScannerInitiator,甚至可以去advertise,但是只能送non- connected advertising event,而slave的角色是connected,但還是可以advertise,也是只能送non-connected advertising event

BLE工作的方式
BLE設備分為中心(Central)和週邊(Peripheral)兩種。其實不只兩種但是主要就是中心和周邊兩種。其餘的本文先不討論。
一般而言,周邊設備會產生(或擁有)資料,在平時它會不斷地發出廣播封包(broadcast),向周遭環境通告自已的存在。
而中心設備則是不斷地掃瞄(scan)周遭環境,看看是否有可供連結的BLE週邊設備。
一旦中心設備取得某一個周邊設備的廣播資訊(主要是其藍牙位址, BD Address)之後,它就可以要求和周邊設備進行連結。連結之後,就可以互相傳送資料,進行正常的工作了。
請參閱下圖。

Advertisement間隔時間是一項重要的參數。當BLE設備很密集地廣播時,它在廣播期間的耗電量就會增加。但是若BLE設備很久才廣播一次,那麼它的反應性就會變差。因為要中心設備要花較久才能發現它的存在。
中心設備的掃瞄間隔和掃瞄窗口也是可調的。這兩個參數的調整也會影響耗電量與反應時間。反應時間快慢當然也就影響了使用者體驗的好壞。
Link layer state machine
針對AdvertisrScanner,還有不同的定義:
  • Non-connectable advertising events用在裝置只想要固定時間的廣播資料,並不會構成連線的結果。
  • Connectable undirected advertising events用在裝置要邀請其他的裝置來連接。
  • Connectable directed advertising events用在裝置只允許特定裝置來連接。
  • Passive Scanning只有在等待advertising packets,不會要求advertiser提供額外的資訊。
  • Active Scanning
    不僅是在等待advertising packets,也會要求advertiser提供額外的資訊。
Advertising取代了傳統BTDiscovery(Inquiry Scan)Connection(Page Scan),這樣一來一往最多可省掉20x power
LL
層所管理的封包也比以簡化很多,只有一個封包格式,當中Access Address參數的不同來決定是Advertising還是Data packets,以下圖是封包格式(Packet Format)



TI 蓝牙低功耗(BLE)培训视频







How to use simple speedtest in RaspberryPi CLI

  pi@ChunchaiRPI2:/tmp $  wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py --2023-06-26 10:4...