这里修改蓝牙连接参数,主要是为了降低连接频率,达到低功耗目的。设计的参数包括:连接间隔最小值(Interval Min)
,连接间隔最大值(Interval Max)
,从机潜伏次数(Slave Latency)
,连接超时时间(connSupervisionTimeout)
。其中从机潜伏次数的意思为“当无有效数据传输的时候,允许从机跳过的连接事件的次数”。
BLE蓝牙的通讯值通过连接事件来完成的,其中连接事件一直伴随着整个蓝牙连接的周期,不管这其中有没有数据要传输,连接事件一直在周期的产生,这个周期也就决定了蓝牙通讯的速率,周期短,通讯速率就快,相应的功耗就高,连接周期长,通讯速率就慢,功耗就低,用户应该根据自己的需求来设置合理的值,在功耗与速率之间寻求一个平衡。
下面我们通过在CC2541上的蓝牙从机上修改连接参数(很多资料都说连接参数是由主机决定的,从机只能请求更改,但主机不一定同意),这些参数是我修改过后的,是按照IOS的蓝牙连接规范来改的,经过验证,IOS和Android都接受这些值。这几个参数都定义在simpleBLEPeripheral.c中,用宏表示分别为:
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 240 //(units of 1.25ms)
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 320 //(units of 1.25ms)
#define DEFAULT_DESIRED_SLAVE_LATENCY4
#define DEFALUT_DESIRED_CONN_TIMEOUT600 //(units of 10ms)
上面的设置符合IOS的蓝牙连接规范,改规范如下:
The connection parameter request may be rejected if it does not comply with all of these rules:
Interval Max * (Slave Latency + 1) ≤ 2 seconds
Interval Min ≥ 20 ms
Interval Min + 20 ms ≤ Interval Max
Slave Latency ≤ 4
connSupervisionTimeout ≤ 6 seconds
Interval Max*(Slave Latency+1) * 3 < connSupervisionTimeout
注:ble协议里interVal的范围是7.5ms - 32s,如果从机请求修改的参数不符合该规范,IOS会拒绝更新参数。
最后要说的是,蓝牙在连接之初,采用的是默认的连接参数,从机可以在连接建立之后在向主机发送更新连接参数的请求,为了是协议栈自动完成这个动作,我们需要在蓝牙初始化的时候设置一下:
#define DEFAULT_ENABLE_UPDATE_REQUESTTRUE
uint8enable_update_request=DEFAULT_ENABLE_UPDATE_REQUEST;
GAPRole_SetParameter(GAPROLE_PARAM_UPDATE_ENABLE, sizeof(uint8), &enable_update_request);
【TI BLE开发(二)修改蓝牙连接参数】这样,当蓝牙连接上之后,从机会自动地想主机发送更新连接参数请求,如果主机同意,那么双方将使用新的参数进行通讯。