藍牙基礎知識進階——Link manager對連接的控制

藍牙基礎知識進階——Link manager對連接的控制

2014年02月12日 09:12:30  閱讀數:5911 標籤: Link manager連接的控制 

1、連接的控制

對連接的控制涉及到很多方面,而最直接的必然是連接的建立和連接的斷開。

1.1 連接的建立

連接建立的過程如下圖2-1所示:

2-1 連接的建立

         page過程和一系列的信息交互之後就是連接的建立。masterpaging的設備)就會發送LMP_host_connection_req來請求建立連接,slave可以迴應LMP_accepted或者LMP_not_accepted來完成或者拒絕連接的建立。在這之間,其實還可能有一個role switch的過程,一般而言,是在slave收到LMP_host_conenction_req之後發送slot_offsetswitch_reqPDU。若是role_switch失敗,連接的建立仍然需要繼續,除非paged一方不支持成爲slave的角色,會迴應low resource並斷開連接。

         1.2 連接的斷開

         藍牙設備的斷開是可以發生在任何時刻的,它可以由master發起也可以由slave發起。不過有一點,就是他必須有一個理由。因此斷開連接的PDU——LMP_detach有一個error code的部分。

         在斷開連接之前,需要先把ACL-U的鏈路暫停,然後把LMP_detach放入到傳輸的隊列中,緊接着發動斷開的一端啓動了一個6*Tpolltimer,若是在這個timer超時前得到對方的ack,則啓動一個3*Tpolltimer,在3*Tpolltimer超時後,LT_ADDR能夠被re_use(發動斷開端是master)。若是在6*Tpolltimer超時後還沒有得到ack,則丟棄link,啓動一個新的Tlinksupervisiontimeout,這個timeoutLT_ADDRre_use(發動斷開端是master)。

       至於在接收端,若是接收端是master,則啓動一個6*Tpolltimer,若是slave,則啓動3*Tpolltimer。這個timer超時後,連接斷開,然後若接收端是master,則LT_ADDR能夠被再次使用。

       1.3 Power的控制

         power的控制是link manager的另外一個重要的工作,雖然說power levelphysical link的一個特性,而link manager是對邏輯鏈路的控制,因此這裏的power控制是physical link上的特定logical linkpower level,他不會影響同一physical link上別的logical linkpower level

         Power的控制有兩種策略,一種是legacy power control,另外一種是enhanced power control。支持enhanced的設備必須同時也支持legacy的控制策略。

         legacypower control所涉及的PDU如圖2-2所示:

2-2 legacy power controlPDU

         很清楚地可以看到incr_power_req就是要求power level增加一格,decr_power_req就是要求power level減少一格。當對端處於max power的時候,你再發送incr_power_req的時候就會回覆max_power,同樣的道理若是處於min power的時候,也會回覆min_power。還有一種情況就是對端不支持power control,則它也會對incrreq回覆max power,而對decrreq回覆min power,當然也有可能回覆unsupported LMP featureerror code

         enhanced power control所涉及的PDU如圖2-3所示:

2-3 enhanced power controlPDU

         毫無疑問,enhanced power control只有在兩個設備都支持的情況下才會使用。在發送LMP_power_control_req之後,接收端會根據power_adjustment_request的內容來決定是提升一格的power level還是降低一格的power level或者就是直接max power。所以,這個參數有三個值:one step upone step down或者all the way to the max power level。對應的response參數就比較簡單了,它就是用來表示變化後的power level

         1.4 自適應跳頻(AFH

         自適應跳頻機制在藍牙中特別重要,他可以降低同樣ISM 2.4G的其它設備的干擾。AFHPDU如下圖2-4所示。

2-4 AFH PDU

         這個PDU的三個參數意義如下:

         AFH_Instant: hopset 切換的時機,其實就是切換的間隔了。他至少要6*Tpoll的大小,且需是偶數。當然了,他的值還需要小於12小時。

AFH_Mode:表明AFH是使能還是不使能。

AFH_Channel_Map: 就是AFH使用的channel map

在收到LMP_set_AFH的第一步就是查看AFH_Instant是否已經到了,若沒有則立即啓動一個定時器,若是已經到了就立即重設。當AFH_Modeenable的時候,就是用來使能或者刷新AFH的。若是disable的時候,channel map參數的值就不再重要了。

1.5 通道的類別

AFH就是基於channel的一種機制,通俗地來講我們希望一直在“乾淨”的通道上進行這些傳輸,那什麼是“乾淨”的通道?除了所謂的“乾淨”的通道,還有別的什麼通道呢?這裏就是來說明通道都有哪些類型的。

通道類別的交互使用的PDU如下圖2-5所示:

2-5 通道類別的PDU

         顯然req就是請求通道類別的信息了,他有三個參數:

         AFH_Reporting_Mode:用來確定slave是在AFH_reporting_enable還是AFH_reporting_disablestate。若是在disablestateslave不會產生任何的channel classification。即使是enable的狀態,若是channel classification沒有改變,也無需回覆LMP_channel_classificationPDU

         AFH_Min_Interval以及max interval用來定義以兩次req command之間的時間間隔。

         1.6 Link Supervision

         這個就是我們通常所說的link supervision timeout了,這個timer就是用來探測物理鏈路是否丟失,而這個timer時間的設置就是通過如下PDU來實現的:

2-6 設置supervision timeoutPDU

         1.7 通道質量引起的數據速率的變化(CQDDR

         我們知道對於同一個packet type,數據傳輸的速率取決於RF通道的質量。當然,我們也可以根據不同的通道質量來傳輸不同的packet type以優化數據傳輸的速率。相關的PDU如下圖2-7所示:

2-7 通道質量導致的傳輸速率改變的PDU

         設備A首先發送LMP_auto_rate PDU來通知設備B,這個功能是使能了,然後設備B就可以通過LMP_preferred_rate這個PDU來設置它所希望的packet type,當然設備A並不一定就要傳輸他希望的packet type,只要傳輸的packet type不比data rate所設置的值大即可。

         1.8 服務質量(QoS

         Tpoll我們之前一直在談,他就是master和一個特定slave之間傳輸的最大時間間隔。這個值設置就是通過如下圖2-8所示的PDU來實現的。

2-8 服務質量的PDU

         這裏有兩種PDU,一個是LMP_quality_of_service,他是一個比較霸道的PDU,就是從master發出,通知slave,而slave不能拒絕,他必須得接受。另外一個則相對比較溫和一點,quality_of_service_req,畢竟有個request,這個PDU可以有master發出也可以由slave發出。不同之處至於,slave發出的reqPDUNbc的值是無效的,直接忽略。但是master發出的reqslave是可以接受也可以拒絕的。這就可以形成一個協商的效果。

         1.9 Paging Scheme Parameters

         LMP還可以協商paging scheme參數。它使用的PDU如下圖2-9所示:

2-9 Paging Scheme請求的PDU

         page_mode_req就是設備A告訴設備B,我page你的時候使用的paging scheme,設備B可以接收也可以拒絕,拒絕後就仍然使用原來的scheme。而page_scan_mode_req相比而言則多了一個設置,它不僅是A告訴BApage的時候使用的paging scheme,還設置了B page的時候使用的paing scheme

         1.10 slot packet的控制

         我們知道一個設備可以聯繫多個slot進行傳輸,不過這個連續的數目是有限制的。當然也是可以設置,設置這個數目的PDU如下圖2-10所示。

2-10 多個slot packet控制的PDU

         這兩個PDUQoS中的兩個PDU是一樣的,就不多解釋了。

         1.11 Enhanced Data Rate

         這個是用來改變packet type table的,同樣的不同的type就意味着不同的調製模式可能會被選擇。這個改變的是ACL logical傳輸,不會影響相應的SCOeSCO鏈路。若想改變EDReSCO鏈路,在後面也會有介紹。這個PDU的格式如圖2-11所示

2-11 EDR PDU

         1.12 封裝的LMP PDUs

         有時我們傳輸的LMP payload可能比16byte要長,那麼就需要使用封裝的LMP PDU來進行傳輸,他的格式如下:

2-12 封裝的LMP PDUs

         當需要發送封裝的LMP PDU的時候,我們會先發送LMP_encapsulated_header。對應這個header,若是major typeminor type,對端不能接收,就可以reject。若是accept,則會繼續發送encapsulated_payload,對每一個payload都可以accept或者reject,每個payload的長度是16byte(最後一個用0填充)。

 文章來源:https://blog.csdn.net/u011960402/article/details/19107857


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章