在藍(lán)牙協(xié)議中,為了更加靈活以及容易實(shí)現(xiàn)多種特性,使用了多協(xié)議,多層級(jí)的設(shè)計(jì),LMP即link manager protocol(鏈路管理器協(xié)議)就是藍(lán)牙協(xié)議中的一個(gè)重要組成部分,本文將對(duì)經(jīng)典藍(lán)牙的LMP進(jìn)行解析,帶大家一起了解LMP的工作原理。
1
什么是LMP?
LMP是 controller中的一層,用于控制和協(xié)商兩個(gè)設(shè)備之間藍(lán)牙連接的所有操作,這包括了邏輯傳輸和邏輯鏈路的建立和控制,以及物理鏈路的控制,比如藍(lán)牙連接中進(jìn)行斷開(kāi)、設(shè)置輸出功率、獲取features等操作。LMP用于兩個(gè)設(shè)備上的鏈路管理器(LM)之間的通信,為它們提供了鏈路配置、安全管理、服務(wù)質(zhì)量管理、錯(cuò)誤控制與恢復(fù)、電源管理、信息交換等功能。
圖1. 藍(lán)牙核心系統(tǒng)架構(gòu)
2
LMP的特點(diǎn)
所有LMP消息只能作用于發(fā)送和接收設(shè)備之間的物理鏈路以及相關(guān)的邏輯鏈路和邏輯傳輸,如當(dāng)前有兩個(gè)連接A和B,那么A上的LMP消息不應(yīng)當(dāng)作用于B。LMP消息用于建立鏈路、加密和控制,由兩個(gè)設(shè)備之間的ACL-C或ASB-C邏輯鏈路傳輸,只由LM解釋和執(zhí)行,不會(huì)傳到更高的協(xié)議層。
圖2. LMP層級(jí)
LMP的每個(gè)PDU(protocol data unit,協(xié)議數(shù)據(jù)單元,數(shù)據(jù)傳送的基本單元)都被分配一個(gè)7位或15位的操作碼(opcode),用于唯一標(biāo)識(shí)不同類(lèi)型的PDU。操作碼的前7位和1位transaction ID位于有效負(fù)載主體的第一個(gè)字節(jié)中,如果操作碼的前7位是124到127的話,則操作碼的附加字節(jié)位于有效負(fù)載的第二個(gè)字節(jié)中,包報(bào)頭的FLOW位始終為1,并且在接收時(shí)應(yīng)該被忽略。如果PDU包含一個(gè)或多個(gè)參數(shù),這些參數(shù)將被放置在操作碼之后緊接著的有效負(fù)載中,即如果PDU具有7位操作碼,則在字節(jié)2處,如果有15位操作碼,則在字節(jié)3處,使用的字節(jié)數(shù)取決于參數(shù)的長(zhǎng)度,所有參數(shù)都使用小端格式,即先傳輸最低有效字節(jié)。
圖3. LMP PDU結(jié)構(gòu)
3
LMP的工作原理
3.1
事務(wù)
LMP根據(jù)事務(wù)(transaction)進(jìn)行操作,事務(wù)是實(shí)現(xiàn)特定目的的一組連續(xù)的消息交換。構(gòu)成同一事物的一部分的所有PDU的事務(wù)ID應(yīng)該具有相同的值,如果事務(wù)是由central發(fā)起的,那么事務(wù)ID為0,如果是peripheral發(fā)起的,那么事務(wù)ID為1。
3.2
響應(yīng)超時(shí)
ACL-C邏輯鏈路上傳輸?shù)腖MP PDU從被接收到回復(fù)之間的時(shí)間應(yīng)該小于LMP響應(yīng)超時(shí)時(shí)間(30秒),而在ASB-C邏輯鏈路上發(fā)送的LMP消息則不受LMP響應(yīng)超時(shí)的約束。
3.3
錯(cuò)誤處理
如果LM接收到一個(gè)操作碼未知的PDU,它會(huì)以包含錯(cuò)誤碼Unknown LMP PDU(0x19)的LMP_NOT_ACCEPTED或LMP_NOT_ACCEPTED_EXT來(lái)響應(yīng),如果接收到的是參數(shù)無(wú)效的PDU則應(yīng)以包含錯(cuò)誤碼Invalid LMP Parameters(0x1E)的LMP_NOT_ACCEPTED或LMP_NOT_ACCEPTED_EXT來(lái)響應(yīng)。如果超過(guò)了最大響應(yīng)時(shí)間或者檢測(cè)到鏈路丟失,等待響應(yīng)的一方應(yīng)當(dāng)斷定鏈路連接失敗,及時(shí)做出處理。如果收到錯(cuò)誤消息的數(shù)量超過(guò)了閾值,則應(yīng)該斷開(kāi)連接。
3.4
沖突解決
由于LMP PDU不是及時(shí)傳遞的,因此可能會(huì)出現(xiàn)沖突的情況,即兩端都啟動(dòng)了相同的程序,并且都無(wú)法完成。在這種情況下,central應(yīng)該通過(guò)發(fā)送帶有錯(cuò)誤代碼LMP Error Transaction Collision/LL Procedure Collision(0x23)的LMP_NOT_ACCEPTED或LMP_NOT_ACCEPTED_EXT來(lái)拒絕peripheral程序的啟動(dòng),從而完成central啟動(dòng)的程序。
兩個(gè)LM啟動(dòng)了不同的程序并且都無(wú)法完成的情況下也會(huì)產(chǎn)生沖突,這種情況下central應(yīng)該通過(guò)發(fā)送帶有錯(cuò)誤碼Different Transaction Collision(0x2A)的LMP_NOT_ACCEPTED或LMP_NOT_ACCEPTED_EXT來(lái)拒絕peripheral啟動(dòng)的程序,從而完成central的程序。
3.5
設(shè)備特性
設(shè)備特性(device features)定義了很多的設(shè)備的特性,這些特性是可以用特定的LMP message來(lái)獲取的,為了表示和傳輸這些特性,定義了一些bit位來(lái)代表它們,當(dāng)這些bit被置為1時(shí)說(shuō)明該設(shè)備支持這個(gè)特性,如圖是一些常見(jiàn)的特征。
圖4. 部分設(shè)備特征
每個(gè)LMP PDU都是強(qiáng)制性或者可選的,一些LMP PDU需要某些特征的支持,LM不得發(fā)送或接收與其對(duì)等設(shè)備的特征不兼容的任何PDU,LM可以獲取并緩存對(duì)等設(shè)備的特征掩碼,在連接期間,支持的特征集不應(yīng)當(dāng)被修改。
4
常用的LMP流程
LMP有很多基本流程,主要有Connection control、Information Requests、Role Switch、Modes of Operation、Logical Transports。每個(gè)流程都包含很多子流程,我們這里只簡(jiǎn)單列舉幾個(gè)常用的進(jìn)行講解,并使用泰凌微B91開(kāi)發(fā)板配合抓包器對(duì)LMP流程進(jìn)行深入了解。
圖5. B91開(kāi)發(fā)板
5
連接建立
在page結(jié)束之后,我們使用該流程來(lái)建立Host之間的連接,在這個(gè)流程中,我們首先可以請(qǐng)求時(shí)鐘偏移、LMP版本、支持的特性、名稱以及可能的detach行為。之后如果要建立連接的話,Paging設(shè)備就會(huì)發(fā)送LMP_HOST_CONNECTION_REQ,對(duì)端如果同意建立連接就可以回復(fù)LMP_ACCEPTED PDU否則可以回復(fù)LMP_NOT_ACCEPTED PDU,如果peripheral需要進(jìn)行角色切換的話,它會(huì)在收到LMP_HOST_CONNECTION_REQ之后發(fā)送LMP_SLOT_OFFSET和LMP_SWITCH_REQ,如果角色切換失敗,LM將繼續(xù)創(chuàng)建連接,除非由于資源有限無(wú)法支持,那么應(yīng)以帶有錯(cuò)誤碼Remote Device Terminated Connection due to Low Resources(0x14)的 LMP_DETACH PDU來(lái)中止連接。當(dāng)切換成功時(shí),舊的peripheral將回復(fù)LMP_ACCEPTED或LMP_NOT_ACCEPTED并且事務(wù)ID將會(huì)被設(shè)為0。
當(dāng)連接被接收后,設(shè)備就可以調(diào)用LMP安全程序(paring,authentication和encryption),當(dāng)設(shè)備在連接期間不會(huì)再啟動(dòng)任何安全程序時(shí)它會(huì)發(fā)送LMP_SETUP_COMPLETE PDU。當(dāng)兩個(gè)設(shè)備都發(fā)送LMP_SETUP_COMPLETE PDU時(shí)表示連接流程完成,數(shù)據(jù)流可以在BR/EDR ACL邏輯傳輸上傳輸。
圖6. 連接建立流程圖
圖7. 抓包器抓到的LMP Connection establishment流程
6
連接斷開(kāi)
central和peripheral隨時(shí)都可以使用LMP_DETACH斷開(kāi)兩者之間的連接,并在消息中包含錯(cuò)誤碼,以通知對(duì)方斷開(kāi)原因。而在收到LMP_DETACH后是不會(huì)用LMP進(jìn)行回復(fù)的,只會(huì)回復(fù)一個(gè)ack并通知Host連接斷開(kāi)。
圖8. Detach流程圖
圖9. 抓包器抓到的LMP Detach流程
總結(jié)
LMP是藍(lán)牙協(xié)議中重要的一環(huán),用來(lái)管理所有的連接,目前泰凌微電子的TLSR951x和TLSR952x系列芯片均基于自研藍(lán)牙協(xié)議棧,支持標(biāo)準(zhǔn)LMP所有過(guò)程,且支持BR/EDR和LE雙模共存,多鏈路共存等方案,適合用于需求復(fù)雜的產(chǎn)品開(kāi)發(fā)。
審核編輯:彭菁
-
電源
+關(guān)注
關(guān)注
184文章
17704瀏覽量
249955 -
管理器
+關(guān)注
關(guān)注
0文章
246瀏覽量
18502 -
藍(lán)牙協(xié)議
+關(guān)注
關(guān)注
1文章
29瀏覽量
11398 -
ACL
+關(guān)注
關(guān)注
0文章
61瀏覽量
11976
原文標(biāo)題:【技術(shù)專欄】泰凌微電子經(jīng)典藍(lán)牙 LMP 概述
文章出處:【微信號(hào):telink-semi,微信公眾號(hào):泰凌微電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論