你好,
我使用的是PRO board和SDK 5.0.4。我想设置一个大的连接间隔,以减少功耗。基于ble_peripheral项目,我更改了用户_config.h中的参数。当我改变间隔到300毫秒左右,它工作,我可以看到波形使用powerprofiler。但是,当我进一步将连接间隔设置为3.6~4.0s左右,这是BLE规范的限制时,实际间隔仍然是30ms。这是我的user。config。h:(其他地方我没改)
/ *
****************************************************************************************
*
* GAPM配置
*
****************************************************************************************
*/
Static const struct gapm_configuration user_gapm_conf = {
///设备角色:中央,外设,观察者或广播公司
.role = GAP_PERIPHERAL_SLV,
///设备IRK用于生成可解析的随机BD地址(LSB优先)
.irk = {0 x00 0 x00 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00},
///设备外观(0x0000 -未知外观)
//根据填写https://developer.bluetooth.org/gatt/characteristics/Pages/Characteristi..。
.appearance = 0,
///设备外观写权限要求(@see gapm_write_att_perm)
.appearance_write_perm = GAPM_WRITE_DISABLE,
///设备名对设备的写权限要求(@see gapm_write_att_perm)
.name_write_perm = GAPM_WRITE_DISABLE,
/// maximal mtu.
.max_mtu = 23,
///预期的连接间隔Shoud为3.5s
/ / /外围 : *****************************************************************
在双槽中测量的最小连接间隔(1.25ms)
///使用宏观MS_TO_DOUBLESLOTS从毫秒(MS)转换为双插槽
.con_intv_min = MS_TO_DOUBLESLOTS (3200),
在双槽中测量的最大连接间隔(1.25ms)
///使用宏观MS_TO_DOUBLESLOTS从毫秒(MS)转换为双插槽
.con_intv_max = ms_to_doubleslots(3800),
/// Slave首选连接延迟。它是通过跳过连接事件来度量的
.con_latency = 0,
//从端优先的链路监控超时,以计时器为单位(10毫秒)
///使用宏MS_TO_TIMERUNITS将毫秒(ms)转换为计时器单位
.superv_to = MS_TO_TIMERUNITS (8000),
///隐私设置位字段(0b1 =启用,0b0 =禁用)
/// - [位0]:隐私支持
/// - [bit 1]: Multiple Bond Support(仅外设);如果启用,隐私标志为
/ / /只读。
/// - [位2]:重新连接地址可见。
.flags = 0
};
/ *
****************************************************************************************
*
*参数更新配置
*
****************************************************************************************
*/
Static const struct connection_param_configuration user_connection_param_conf = {
///预期的连接间隔Shoud为3.5s
///在双槽中测量的最小连接间隔(1.25ms)
///使用宏观MS_TO_DOUBLESLOTS从毫秒(MS)转换为双插槽
.intv_min = MS_TO_DOUBLESLOTS (3200),
///在双槽中测量的最大连接间隔(1.25ms)
///使用宏观MS_TO_DOUBLESLOTS从毫秒(MS)转换为双插槽
.intv_max = MS_TO_DOUBLESLOTS (3800),
//在连接事件中度量的延迟
.latency = 0,
//监控超时(10毫秒)
///使用宏MS_TO_TIMERUNITS将毫秒(ms)转换为计时器单位
.time_out = MS_TO_TIMERUNITS (5000),
///最小连接事件持续时间(1.25ms)
///使用宏观MS_TO_DOUBLESLOTS从毫秒(MS)转换为双插槽
.ce_len_min = MS_TO_DOUBLESLOTS (0)
///双槽最大连接事件持续时间(1.25ms)
///使用宏观MS_TO_DOUBLESLOTS从毫秒(MS)转换为双插槽
.ce_len_max = MS_TO_DOUBLESLOTS (0)
};
我的问题是1)Dialog芯片允许的最长连接间隔是多少?(4s?) 2)是否需要修改其他参数来设置更长的间隔,比如3.8s?谢谢!
嗨,多愁善感,
与BLE规范中提到的一样,4.0秒是可以设置连接间隔的最大时间,您所要做的就是更改user_config.h文件中的user_connection_param_conf结构。关于这些的一些评论,连接间隔是由连接的主设备而不是从设备设置的,因此你的手机将决定初始连接间隔,而不是580设备作为从设备。从设备不能设置连接间隔,它只能向主设备指示它想要的连接间隔,这是通过参数更新请求完成的,因此,大约10秒后,ble_app_peripheral示例将发出该命令,如果主服务器接受从服务器指示的参数,连接间隔将切换到从服务器的首选值。还当你做,确保监督是未定义或你操作在睡眠模式下,如果你使用主动模式和监管机构定义、参数更新后设备最终将NMI_Handler由于注射用水支出超过2.6秒()指令。
由于MT_dialog
我发现这个问题可能与PunchThrough应用程序有关。当我使用我的自定义Android应用程序时,我可以将连接间隔更改为4s。
谢谢MT,我将检查Android侧的代码。