簡述
在兩個BLE裝置處于connection狀态時(至于如何進入connection狀态可以參考Link Layer狀态及其之間的切換)。
連接配接參數請求的作用,就是master或slave可能因為自己應用的需求,比如要增大資料傳輸速率等,要将connection interval, slave latency之類的參數進行修改更新,此時就會發起一個“連接配接參數請求”的過程,和對方協商以達到更适合于應用的目的。
Connection Parameters Request Procedure
在介紹master或slave的連接配接參數更新之前,必須要了解下Connection Parameters Request Procedure(連接配接參數請求過程)。
作用
該過程被master或slave用來向對方請求連接配接參數更新,這些連接配接參數包括:connInterval, connSlaveLatency, connSupervision Timeout。
LL_CONNECTION_PARAM_REQ初始化
連接配接參數請求過程的開始是由發起一個LL_CONNECTION_PARAM_REQ的PDU觸發的。這個PDU既可以被master發起,也可以被slave發起的。
當對方不支援該PDU,會回複一個LL_UNKNOWN_RSP的PDU。如果slave端由host初始化“連接配接更新過程”時發起的LL_CONNECTION_PARAM_REQ這個PDU,那slave在收到LL_UNKNOWN_RSP的PDU時還需要通知Host這次“連接配接更新過程”的結果。
對于host層發起而觸發的連接配接參數更新的考慮
即Link層“連接配接參數請求過程”初始化是由Host層“連接配接更新過程”初始化所觸發的時候:
- Link層接收來自Host層的connInterval, Latency, Timeout的值,但是當這些值并不滿足Link層這邊需求時可以修改之;
- Link層可以告知其偏好的值;
- Link層可以設定Offset0–Offset5區域的值;
LL_CONNECTION_PARAM_REQ更多考慮
如果由Link層自主發起,而非由Host層觸發,那connInterval, Latency, Timeout的值都是設定為目前值(這裡的目前值應當是本地所存儲的值?如果目前值就是目前鍊路所用的連接配接參數,那還用更新幹嘛?),估計這種情況用的并不多。
另外Link層必須保證connInterval, Latency參數的設定不會直接引起Timeout,因為interval和Latency過大,兩個connection event之間的時間間距就超過suppervision timeout值了,這樣的設定沒有意義!
對LL_CONNECTION_PARAM_REQ的回複
如果LL_CONNECTION_PARAM_REQ中的參數隻是改變了LE connection的Anchor Point的話,說明connInterval, Latency, Timeout并未更改,是以此時Link層不需要通知給Host層。
其實對于LL_CONNECTION_PARAM_REQ的回複,如果Link層發現參數超出了自己的範圍,擷取有某些錯誤,或者通知了Host層而得到Host的拒絕更新,那麼就會回複一個LL_REJECT_IND_EXT給對方表示不接受。隻要有LL_REJECT_IND_EXT發出,本次“連接配接參數請求”過程就宣告失敗,不會繼續進行後面步驟。
簡圖
如下是對“連接配接參數請求”過程中涉及的Link層消息互動的簡圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CN5kDN4gTO1MDOlRTZ0kTMzYzXwEzNwATM4AzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)