[玩轉BLE]發送窗口、連接間隔、從機延遲

連接參數與BLE性能分析

  • 1. 連接事件——連接間隔短
  • 主從設備功耗大
  • 數據發送延遲短
  • 數據吞吐量較高
  • 2. 連接事件——連接間隔長
  • 主從設備功耗低
  • 手機發送延遲長
  • 數據吞吐量較低
  • 3.從設備潛伏值小
  • 從設備功耗高
  • 從設備及時或更快速的收到主設備發送的數據
  • 4.從設備潛伏值大
  • 從設備在潛伏期期間功耗低
  • 從設備無法及時或快速接收主設備發送的數據
  • 從機潛伏對主設備接收從設備的數據延遲無影響

發送窗口

  • 在BLE中從設備自定義廣播時間和廣播間隔。在某些產品中爲了達到更低的功耗,從設備的廣播間隔會拉長。但是在從設備潛伏期期間主設備不可能一直在等待從設備,在從設備潛伏期期間主設備去完成其他任務。所以在連接建立期間,用兩個參數來傳遞上述的信息:窗口大小窗口間隔
  • 當連接請求數據包發送完畢,存在一個1.25ms的強制時延,緊接着就是發送窗口偏移和發送窗口。發送窗口偏移可以是0到連接間隔之間的任意值,但是必須爲1.25ms的整數倍。從發送窗口開始,從設備打開其接收器,並等待來自主設備的數據包。如果到發送窗口結束仍未收到數據包,從設備停止偵聽,在下一個連接事件的連接間隔後在進行。

連接事件

  • 一個連接事件指的是主設備和從設備之間相互發送數據包的過程。

連接間隔

  • 連接間隔決定了主設備和從設備交互的間隔,指的是兩個連續的連接事件之間的間隔,是以1.25ms爲單位,連接間隔的範圍從最小值6(7.5ms)到最大值3200(4.0s)。
    在這裏插入圖片描述

從機延遲

  • 此參數爲從機(外設設備)提供跳過多個連接事件的能力。這種能力給外設設備更多的靈活性。如果外設沒有要發送的數據,則可以跳過連接事件,保持睡眠並節省電量。 外設設備選擇是否在每個連接事件時間點上喚醒。 雖然外設可以跳過連接事件,但不能超出從延遲參數允許的最大值
    在這裏插入圖片描述

監控超時

  • 是兩次成功連接事件之間的最長時間。如果在此時間內沒有成功的連接事件,設備將終止連接並返回到未連接狀態。該參數值以 10 ms 爲單位,監控超時值可以從最小值 10(100 ms)到 3200(32.0 s)。超時必須大於有效的連接間隔

有效連接間隔

  • 有效連接間隔等於兩個連接事件之間的時間跨度,假設從機跳過最大數量的連接事件,且允許從機延遲,如果從機延遲設置爲 0,則有效連接間隔等於實際連接間隔
  • 從機延遲表示可以跳過的最大事件數。該數字的範圍可以從最小值 0(意味着不能跳過連接事件)到最大值 499。 最大值不能使有效連接間隔大於 16 秒。
//======平臺 CC2640======
//====simple_peripheral=====
// 設置最小連接間隔(units of 1.25ms, 80=100ms)
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL     10

// 設置最大連接間隔(units of 1.25ms, 800=1000ms) 
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL     20

//設置從機延遲
#define DEFAULT_DESIRED_SLAVE_LATENCY         0

//設置監控超時時間,這個時間裏面,從機和主機沒有發生交互關係,則認爲兩個是斷開的。
#define DEFAULT_DESIRED_CONN_TIMEOUT          1000

	...
    uint16_t desiredMinInterval = DEFAULT_DESIRED_MIN_CONN_INTERVAL;
    uint16_t desiredMaxInterval = DEFAULT_DESIRED_MAX_CONN_INTERVAL;
    uint16_t desiredSlaveLatency = DEFAULT_DESIRED_SLAVE_LATENCY;
    uint16_t desiredConnTimeout = DEFAULT_DESIRED_CONN_TIMEOUT;
	...
	//最小的連接間隔
    GAPRole_SetParameter(GAPROLE_MIN_CONN_INTERVAL, sizeof(uint16_t), &desiredMinInterval);
    //最大的連接間隔
    GAPRole_SetParameter(GAPROLE_MAX_CONN_INTERVAL, sizeof(uint16_t), &desiredMaxInterval);
    //從機潛伏期
    GAPRole_SetParameter(GAPROLE_SLAVE_LATENCY, sizeof(uint16_t), &desiredSlaveLatency);
    //從機超時時間
    GAPRole_SetParameter(GAPROLE_TIMEOUT_MULTIPLIER, sizeof(uint16_t), &desiredConnTimeout);
	...




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