1. 程式人生 > >低功耗藍芽開發學習 0523

低功耗藍芽開發學習 0523

7.3.4 報頭

報頭的內容取決於該報文是廣播報文還是資料報文。

廣播報文型別共有7種,
ADV_IND----通用廣播指示
ADV_DIRECT_IND----定向連線指示
ADV_NONCONN_IND---不可連線指示
ADV_SCAN_IND------可掃描指示
SCAN_REQ----主動掃描請求
SCAN_RSP----主動掃描響應
CONNECT_REQ-----連線請求

7.3.5 長度


7.3.6 淨荷

7.4 通道

低功耗藍芽的通道寬度為2MHz ,而不是經典藍芽的1MHz

7.4.1 跳頻

調頻演算法用於資料連線中

7.4.2 自適應跳頻

7.5 裝置發現

共有4種不同型別的廣播:通用的、定向的、不可連線的以及可發現的。

7.5.1 通用廣播

通用廣播可以在沒有連線的情況下發出,換句話說,沒有主從裝置之分。

7.5.2 定向廣播

定向廣播事件就是為了儘可能快的建立連線。 這種報文包含兩個地址:廣播者
的地址和發起者的地址。

7.5.3 不可連線廣播

不想被連線的裝置使用不可連線廣播事件。

7.5.3 可發現廣播

即可廣播資料,又可以相應掃描,但不能建立連線。


7.6 廣播


7.7 建立連線

7.7.1 接入地址

連線使用的接入地址總是由主裝置來提供。地址通過隨機生成,隨機生成增強了隱私性
,掃描者無法得知是哪兩個裝置正在通訊。

7.7.2 CRC初始化


7.7.3 傳送視窗

7.7.4 連線事件

一個連線事件是指主裝置和從裝置之間相互發送資料包的過程。連線事件的進行
始終位於一個頻率,每個資料包會在上個數據包發完之後等待150us再發送。

連線間隔決定了主裝置與從裝置的互動間隔:可以是7.5ms-4s內的任意值,但
必須為1.25ms的整數倍。

7.7.5 通道圖

自適應跳頻通道圖示資料通道的位掩碼,用來標記通道的好壞。

7.7.6 睡眠時鐘精度


7.8 傳送資料

傳給控制器的未加密資料包最多隻能攜帶27個位元組的資料。

7.8.1 資料報頭


7.8.2 邏輯鏈路識別符號

邏輯鏈路識別符號(LLID)用於判斷資料報文屬於下列哪種型別:

鏈路層控制報文(11)------用於管理連線
高層報文開始(10) -------也可用於一個完整報文
高層報恩延續(01)

主機能夠傳送大於27位元組的資料,但由於無法放入單個鏈路層的資料包,因此必須
支援分段。具體做法是把資料包貼上“高層報文開始”或“高層報文繼續”的標籤。

7.8.3 序列號

在資料包中,用一個位元來表示序列號;在傳送的第一個資料包中將該位設為0,
接下來每當裝置傳送新的資料包時,該值在1和0之間交替。

7.8.4 確認

如果裝置成功接收序列號為0的報文,在其確認報文中,應將下一個預期序列號
設為1,否則序列號為0的資料包將被重傳。

7.8.5 更多資料

資料通道報文的報頭裡還有最後一位----更多資料位,用來通知對端裝置自己還有
其他的資料準備傳送。


7.9 加密


7.10 管理連線

連線管理涉及在鏈路層傳送控制訊息,包含下列七個鏈路層控制規程:

更新連線引數
改變自適應跳頻通道圖
加密鏈路
重加密鏈路
交換功能位
交換版本資訊
終止鏈路

7.10.1 連線引數更新

連線建立時,主裝置通過連線資料包傳送連線引數。

瞬時實際上是一個連線事件的計數器,相應的連線事件到來時就使用新的引數。


7.10.2 自適應跳頻

新的通道圖
瞬時

這裡的瞬時和連線更新中的提到的瞬時概念完全不一樣。
它確定了一個時間點,在該時間點之後的連線事件將使用心得通道圖。

要重發通道更新請求,必須等待瞬時經過以後。
鏈路層控制規程不允許從裝置改變通道圖,甚至不能向主裝置告知自身的通道條件。

7.10.3 啟動加密

只有尚未加密的鏈路才能啟動加密。鏈路在加密時,需要建立一個隨機數(nonce)和一個
會話金鑰(SK)。

7.10.4 重啟加密


7.10.5 版本交換


7.10.6 功能交換
對端裝置利用功能資訊來判斷本端裝置到底能做什麼。


7.10.7 終止連線

最後一個鏈路層控制規程為終止規程。

要終止鏈路,裝置首先發送一個終止指示報文(LL_TERMINATB_IND),等待鏈路層
對該報文進行確認,然後斷開連線。

7.11 魯棒性

7.11.1 自適應跳頻

7.11.2 強CRC

7.12 為低功耗優化

主要方法如下:
使用短報文
物理層使用高位元率
提供低開銷
優化相應機制
單通道連線事件
亞速率連線事件
使用離線加密

7.12.1 短報文

7.12.2 高位元率

當傳送資料時,無線電需要大量的電流。大部分電流用於執行一個2.4GHz的振盪器,
以便調製無線訊號。

7.12.3 低開銷

7.12.4 確認機制

鏈路層的確認機制有一個有趣的性質,它不要求立即執行資料包的確認。這是經典藍芽
和低功耗藍芽的一個根本區別。

7.12.5 單通道連線事件


7.12.6 亞速率連線事件

第8章 主機/控制器介面

8.1 介紹

主機控制器介面(HCI)是主要與控制器之間的介面,主要完成兩個任務:
一個是傳送命令你給控制器和接受來自控制器的事件,
另一個是傳送和接收來自對端裝置(peer device)的資料。

8.3.2 命令資料包

主機通過向控制器傳送命令資料包來執行命令。

每一個HCI資料包都帶有下列三種報文型別編碼中的一種:
命令(command)= 0x01
資料(data) = 0x02
事件(event) = 0x04

8.2.2 3線UART

0xF用於鏈路建立  0x0用於確認

3線UART主要有3種模式:
鏈路建立
活動狀態
低電壓狀態

鏈路建立通道是用來確認對端裝置執行模式、配置引數和自動探測波特率。


8.3 邏輯介面

通道(channel)
資料包格式(packet format)
流控(flow control)


8.3.1 HCI通道

一旦控制器與其他裝置建立了連線,控制器的底層HCI介面就建立一個HCI通道,使用
一個連線控制代碼(connection handle)來標識這個HCI通道。


8.3.2 命令資料包

主機通過向控制器傳送命令資料包來執行命令。

在低功耗藍芽中一共三種基本命令型別
配置控制器的狀態
請求執行特定的操作
管理連線

1、配置控制器狀態
我們可以將控制器視為一個大狀態機,有一系列的引數可以進行配置。

2、請求指定操作
一些命令可以請求控制器執行指定操作,但不會改變裝置狀態或者連線狀態。

3、管理連線


8.3.3 事件資料包

HCI事件資料包由事件型別編碼、引數的長度欄位和事件引數組成。
低功耗藍芽主要有下列三種基本事件型別:
通用命令完成事件
通用命令狀態事件
特定命令完成事件

1、通用命令完成事件

當主機發送給控制器的命令執行完畢時,控制器立即返回一個通用命令完成事件。

2、通用命令狀態事件


3、特定命令完成事件

8.3.4 資料包


8.3.5 命令流控


8.4 控制器的配置

利用控制器與對端裝置通訊之前,主機可以先對控制器進行下列相關操作:
重置控制器的狀態、讀取裝置地址、設定事件掩碼、讀取流控快取、讀取控制器支援的
功能列表、生成隨機數、加密資料、設定隨機地址以及配置白名單等

8.4.1 重置控制器為已知狀態


8.4.2 讀取裝置地址

很多低功耗藍芽裝置有預先設定的裝置地址,可供主機讀取。
如果裝置的地址返回全0。此時,主機需要為控制器生成一個隨機地址,否則無法進行
資料傳輸。

8.4.3 設定事件掩碼

如果主機不能理解控制器的事件,將會導致操作性問題。解決問題的一個辦法
是設定事件掩碼,讓主機告訴控制器那些事件能接受,那些不能接受。這樣控制器
只會發那些被接受的事件。

8.4.4 讀取緩衝區大小

8.4.5 讀取控制器支援的功能

確保主機和控制器相容的另一個辦法是,主機向控制器傳送命令之前首先確認
控制器支援的功能。

8.4.6 讀取控制器支援的狀態


8.4.7 隨機數


8.4.8 加密資料

8.4.9 設定隨機地址

如果控制器沒有固定地址,那麼就用隨機地址來替代。

8.4.10 白名單


8.5 廣播和觀察

兩個低功耗藍芽裝置之間的最基本的通訊模型就是廣播(broadcasting)和
觀察模型。兩者採用廣播和掃描來傳輸資料。

8.5.1 廣播

配置引數包括廣播的最小間隔時間和最大間隔時間,範圍從20ms-10.24s。

8.5.2 被動掃描

8.6 發起連線

8.6.1 與白名單裝置發起連線


8.7 連線管理

8.7.1 更新連線


8.7.2 更新通道對映圖


8.7.3 交換功能列表

第三部分
主機

第9章
邏輯鏈路控制和適配協議

邏輯鏈路控制和適配協議(Logical Link Control and Adaptation Protocol,L2CAP)
是個複用層,可以讓低功耗藍芽複用三條不同的通道。他也支援資料的分割和
重組功能,使得較大的報文可以在底層無線電中傳輸。

9.1 背景


9.2 L2CAP通道

通道是指一個數據包序列,連線兩個裝置上的一對服務。在兩個裝置間允許同時啟用多條通道。

低功耗藍芽只支援固定通道。固定通道指的是兩個裝置一建立連線就已經存在的、沒有任何配置
引數的通道。

在藍芽中,每個通道識別符號為一個17位的數字。

低功耗藍芽一共使用了3條通道:
通道識別符號0x0004用於屬性協議
通道0x0005用於低功耗藍芽信令通道
通道0x0006用於安全管理


9.3 L2CAP資料包結構

所有低功耗藍芽裝置必須支援在空間傳輸27位元組資料包 ----4位元組為L2CAP,23位元組為資訊載荷。

9.4 低功耗信令通道

低功耗信令用於主機層級的信令。

低功耗信令通道支援的命令操作碼如下:
命令拒絕
連線引數更新請求
連線引數更新響應


9.4.1 命令拒絕

第10章  屬性

10.1 背景

低功耗藍芽最後使用了三種協議:邏輯鏈路控制和適配協議(L2CAP),安全管理
協議(SM)和屬性協議(AP).


10.1.1 精簡協議


10.1.2 無所不在的資料

10.1.3 資料與狀態


10.1.4 幾種常見的狀態

外部狀態、內部狀態與抽象狀態。


10.1.6  服務和規範

10.2 屬性

屬性是一條帶有標籤的、可以被定址的資料。

10.2.1 屬性概述

屬性由三種數值組成:屬性控制代碼、屬性型別和屬性值。

10.2.2 屬性控制代碼

P156