[玩转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);
	...




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