一、物理層PHY:
頻率: 2400MHz~2483.5MHz
通道: 一共 40 個通道,37個自適應自動調頻數據通道 ,3個廣播通道:37 38 39
通道帶寬: BLE 2M ,經典藍牙 1M
比特率: 1Mbit/s(1Mbps)
發射功率: 也就是最小發送功率不能低於-20dBm即10uW,最大的發送功率不能高於+10dBm即10mW。
二、鏈路層LL
2.1五種狀態
- 就緒態(Standby) (上電,都進入就緒態)
- 廣播態(Advertising) (一般是從機廣播)
- 掃描態(Scanning) (一般是主機主動掃描,從機被動掃描)
- 發起態(Initiating) (只能是將要作為主機方發起連接請求)
- 連接態(Connection) (分為主機和從機)
注意:發起態發送連接請求后就會進入數據通道,不管和對方有沒有真正建立連接,都假設已經建立,在數據通道過程中進行數據包發送,如果能應答說明連接建立,如果發送數據包應答超時,那么連接失敗發起態進入就緒態
2.2狀態轉換過程
2.3通道選擇
跳頻技術:主從機連接后在數據通道傳輸數據,頻率通道部固定,隨時切換通道
如圖數據包:
三、GAP介紹:
3.1角色介紹
(1)廣播者:Broadcaster Role,設備正在發送advertising events。
(2) 觀察者:Observer Role,設備正在接收advertising events。
(3)外圍設備:Peripheral Role,設備接受Link Layer連接(對應Link Layer的slave角色)。
(4)中心設備:Central Role,設備發起Link Layer連接(對應Link Layer的master角色)。
3.2模式過程
- 廣播模式和觀察過程
- 發現模式和過程
- 可連接模式和過程
- 可綁定模式和過程
- 周期性廣播模式和過程
3.2.1廣播模式和觀察過程
該模式和過程允許兩個設備通過廣播事件(advertising events)以單向無連接的方式進行通信。
3.2.2發現模式和過程
一個設備要么處於不可發現模式,要么處於發現模式。發現模式分為限制發現模式和通用發現模式
- 不可發現模式是不會被其它設備發現的,這種模式可廣播自己的數據
- 通用發現模式:一直可發現
- 受限發現模式:從可發現模式開始,一定時間后沒有建立連接將進入不可發現狀態(時間可以設置)
3.2.3可連接模式和過程
連接模式和過程,包括3種模式和5種過程。
(1)3種連接模式
非定向連接模式是最普遍的連接模式
(2)5種連接過程
3.2.4可綁定模式和過程
綁定模式和過程。綁定,即設備雙方通過交換和存儲安全和身份信息,從而建立可信任的關系。
1、Non-Bondable Mode:該模式不接受綁定請求。
① 中心設備和外圍設備都需要支持該模式。
② 若設備不支持配對,則認為該設備不可綁定。
③ 若設備支持安全管理配對,但Bonding_Flags設置為No Bonding,則不需要交換和存儲綁定信息。
2、Bondable Mode
① 在綁定過程中,Bonding_Flags設置為Bonding。
3、Bonding Procedure
① 外圍設備和中心設備可支持該過程,廣播者和觀察者不支持該過程
3.2.5周期性廣播模式和過程
周期性廣播模式和過程,該模式和過程允許兩個和多個設備使用擴展性廣播事件或周期性廣播事件以非定向無連接的方式進行通信
Periodic Advertising Synchronizability Mode: 用於發送周期性廣播事件相關的同步信息。
Periodic Advertising Mode: 利用周期廣播同步信息中的跳頻序列周期性地發送廣播事件。
Periodic Advertising Synchronization Establishment Procedure:該過程用於接收周期性廣播同步信息和周期性廣播。
① 該設備需要掃描攜帶同步信息的不可連接、不可掃描廣播事件;
② 獲得周期性廣播信息后的設備,可利用跳頻序列周期性地監聽周期廣播事件。
四、屬性GATT:
4.1角色
- 服務器:提供數據的藍牙設備 (一般是下位機做服務器,為上位機服務上報數據)
- 客戶端:需求數據的藍牙設備 (一般是上位機做客戶端,向下位機發起讀寫數據請求)
4.2屬性組成
4.2.1句柄handle
- 意義:就是索引,屬性的索引,獨特唯一,類似身份證號碼,一般應用編程中通過句柄去讀寫服務器數據
- 范圍:0x0001-0xFFFF
4.2.2服務類型type UUID
UUID分類如下:
- 0x1800~0x26FF用於服務類UUID (包含在首要服務的值里面,通過得到首要服務的值,就知道服務類型,例如心率值服務0X180D)
- 0x2700~0x27FF用於標識計量單位
- 0x2800~0x28FF用於區分屬性類型 (一般是服務類型聲明,例如首要服務0x2800,特征聲明0x2803)
- 0x2900~0x29FF用於特性描述
- 0x2A00~0x7FFF用於區分特性類型
4.2.3屬性值
- 意義:這才是我們正在想要的數據
- 范圍:0-512字節
4.2.4權限
可讀,可寫,可讀且可寫等等.........
cc254x TI藍牙協議棧屬性定義如下
4.3GATT服務
說明:Profile中有多個Server組成,而Server的由0或多個《Include》和至少一個《Characteristic》組成
整體框架如下:
例如一個心率計的部分服務如
圖中有展示了心率計的 1、心率服務,2、電池服務;因此可以提供給服務器心率值服務和電池服務,每一個服務都是以UUID 0X2800 (首要服務,即一個服務聲明)開始,每一個特征以UUID 0X2803(特征聲明)開始
圖中心率服務包含了兩個特征,電池服務包含一個特征值
以TI cc254x 為例 具體的屬性表如下
五、命令ATT
ATT命令就是訪問屬性的一套操作,
5.1通信方式
一般indication方式用的比較多:一般用於下位機定時給上位機通知(上報數據,如,溫度,濕度,血壓,心率),或者透傳數據
說明:Request和Response是一對,Indication和Confirmation是一對,在沒有得到對方的應答或者確認信息之前是不能進行第2包的請求或者指示數據。命令和通知因為沒有應答信息,所以可以在任何時候進行包傳輸。
5.2按類型值 查找請求\應答(Find By Type Value Request\Response)
按類型值(就是首要服務里面的UUID值比如0x180D心率服務)查找請求和回復可以根據給定的類型與數值查找相應的屬性。該請求包含有兩個句柄:起始句柄和結束句柄,規定查找范圍。對於這一范圍類的所有屬性,如果和請求中所指定的類型和數值一樣,那么這個屬性就要在響應中返回(返回的是對應句柄值)。
這個命令主要用來查找特定的首要服務。發送請求時,客戶端將其中的類型設置為首要服務,並將數值設為該服務的UUID。隨后的響應將包含查找到的各個首要服務的實例的句柄范圍。某些特殊的服務只會在服務器中實現一次,針對它們的響應只會包含一個句柄范圍
5.2.1包格式
5.2.2通信示意圖
5.2.3抓包分析
5.3按類型 讀請求\應答(Read By Type Request\Response)
這個命令能在句柄范圍內讀取某個屬性值。當客戶端僅知道屬性的類型而非句柄時可以使用該請求。請求包含有起始、結束句柄和需要讀取的屬性的類型。響應將給出符合的句柄和數值。
這個請求用於搜索被包含的服務,並通過特性類型來發現服務中的所有的特性。它也被用來讀取已知類型的特性值
5.3.1包格式
5.3.2通信示意圖
5.3.3空中包分析
5.4讀請求\應答(Read Request\Response) 按句柄handle讀
讀取請求是屬性協議總最簡單的請求。該請求包含一個句柄,響應將返回該句柄對應的屬性值。只有在客戶端已知屬性句柄的情況下,才能使用該請求讀取屬性值
5.4.1包格式
5.4.2通信示意圖
5.4.3包數據分析
5.5按組類型 讀取請求\應答(Read By Group Type Request\Response)
它和按類型讀取請求類似,也包含有一個句柄范圍,讀取時將其視為一個屬性的類型來處理,只不過屬性的類型必須為分組屬性。其響應包含所讀取的屬性句柄、屬性分組中最后一個屬性以及屬性的數值。
這意味着,如果分組類型是首要服務,它將返回所有首要服務聲明的屬性句柄、該首要服務中最后一個屬性以及首要服務聲明的數值。因此,可以僅憑單個請求來發現設備上的所有首要服務、與之關聯的屬性句柄的范圍以及這些服務的類型。
5.6寫請求\應答(Write Request\Response) 按句柄寫
5.7寫命令
寫入命令類似於寫請求,區別是寫入命令沒有響應。寫入命令包含要寫入的屬性的句柄和要寫入的數值。
當無需響應時,可以使用寫入命令。此外,因為該命令可以在任何時刻發送,即使剛發送了一條請求還未收到相應的響應,對命令的發送時延有較高的要求時,該請求也適合。
5.8句柄通知(Handle Value Notification) ( 透傳數據常用)
當服務器想要向客戶端發送快速得屬性狀態更新時,可以發送一條句柄值通知。這個是服務器能夠發給客戶端的兩種消息中的一種,並且是不要求響應的那種。服務器可以在任何時刻發送該通知,同時該通知也是不可靠的。
句柄值通知包含屬性句柄和數值。因此該通知是服務器發往客戶端的一條消息,用來告知某屬性的當前值。它是屬性協議中最重要的消息之一。它不僅讓客戶端能夠有效地從服務器獲取當前屬性數據庫的更新,而且也被用來通知客戶端有限狀態機的變化。
5.9句柄指示\確認(Handle Value Indication\Confirmation)
句柄值指示類似於句柄值通知。它有着相同的屬性句柄字段和數值,不同的客戶端收到指示以后應回復。服務器一次只能發送一條指示,並且只有收到確認響應后才能發起下一條指示。 句柄值確認不含任何數據,主要用於流控。因為具備了確認機制,指示被視為可靠傳輸。一旦服務器收到確認信息,它便能確定客戶端收到了該信息。
六、建立連接過程:
七、發送消息過程: