TI BLE开发(二)修改蓝牙连接参数
2015-07-22 15:37
495 查看
这里修改蓝牙连接参数,主要是为了降低连接频率,达到低功耗目的。设计的参数包括:连接间隔最小值
BLE蓝牙的通讯值通过连接事件来完成的,其中连接事件一直伴随着整个蓝牙连接的周期,不管这其中有没有数据要传输,连接事件一直在周期的产生,这个周期也就决定了蓝牙通讯的速率,周期短,通讯速率就快,相应的功耗就高,连接周期长,通讯速率就慢,功耗就低,用户应该根据自己的需求来设置合理的值,在功耗与速率之间寻求一个平衡。
下面我们通过在CC2541上的蓝牙从机上修改连接参数(很多资料都说连接参数是由主机决定的,从机只能请求更改,但主机不一定同意),这些参数是我修改过后的,是按照IOS的蓝牙连接规范来改的,经过验证,IOS和Android都接受这些值。这几个参数都定义在simpleBLEPeripheral.c中,用宏表示分别为:
上面的设置符合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会拒绝更新参数。
最后要说的是,蓝牙在连接之初,采用的是默认的连接参数,从机可以在连接建立之后在向主机发送更新连接参数的请求,为了是协议栈自动完成这个动作,我们需要在蓝牙初始化的时候设置一下:
这样,当蓝牙连接上之后,从机会自动地想主机发送更新连接参数请求,如果主机同意,那么双方将使用新的参数进行通讯。
(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_LATENCY 4 #define DEFALUT_DESIRED_CONN_TIMEOUT 600 //(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_REQUEST TRUE uint8enable_update_request = DEFAULT_ENABLE_UPDATE_REQUEST; GAPRole_SetParameter(GAPROLE_PARAM_UPDATE_ENABLE, sizeof(uint8), &enable_update_request);
这样,当蓝牙连接上之后,从机会自动地想主机发送更新连接参数请求,如果主机同意,那么双方将使用新的参数进行通讯。
相关文章推荐
- css 圆角写法
- 关于正则表达式
- tomcat中文参数乱码
- ACM计算几何推荐
- 浅谈微信卡券功能开发(1)
- android 使用NDK
- flume、kafka、storm常用命令
- IndexedDB:浏览器里内置的数据库(转)
- [好文要转]【关于block使用的5点注意事项】
- select/**/*/**/from/**/RegSite
- Dynamic Programming - Part2
- KAFKA学习总结
- 深入理解kafka设计原理
- 什么是静态地址重定位,它需要什么支持?什么是动态地址重定位,他需要什么支持?静态地址重定位与动态地址重定位有什么区别?
- javascript学习之JSON
- SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
- Java中Timer的用法
- 文章标题
- uva 10806 Dijkstra, Dijkstra. (最小费最大流)
- cuda未定义标识符等一些问题