最大连接时间间隔

4个职位/ 0个新
最后发表
伤感
离线
最后看到:2年11个月前
加入:2016-11-28 15:55
最大连接时间间隔

你好,
我使用PRO板和SDK 5.0.4。我想设置一个大的连接间隔,以减少电力消耗。基于ble_peripheral项目,我改变了用户_config.h的参数。当我改变间隔到300ms左右,它工作,我可以看到波形使用功率分析器。但是,当我将连接间隔进一步设置为3.6~4.0s左右,这是BLE规范的限制时,实际间隔仍然是30ms。这是我的user.config.h:(我没有改变其他地方)

/ *
****************************************************************************************

* GAPM配置

****************************************************************************************
* /
静态const struct gapm_configuration
///设备角色:中心,外围,观察者或广播
.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,

/ / /最大MTU
.max_mtu = 23日

///期望的连接间隔应该在3.5s左右
/ / /外围 : *****************************************************************
///在ble double插槽中测量的最小连接间隔(1.25ms)
///使用宏MS_TO_DOUBLESLOTS从毫秒(ms)转换到双槽
.con_intv_min = MS_TO_DOUBLESLOTS (3200),

///在ble双插槽中测量的最大连接间隔(1.25ms)
///使用宏MS_TO_DOUBLESLOTS从毫秒(ms)转换到双槽
.con_intv_max = MS_TO_DOUBLESLOTS (3800),

/// Slave首选连接延迟。它是通过跳过连接事件来度量的
.con_latency = 0,

/// Slave首选链路监控超时,以计时器单位(10ms)为单位
///使用宏MS_TO_TIMERUNITS从毫秒(ms)转换为定时器单位
.superv_to = MS_TO_TIMERUNITS (8000),

///隐私设置位字段(0b1 =启用,0b0 =禁用)
/// - [bit 0]:隐私支持
/// - [bit 1]:多个Bond支持(仅外设);如果启用,隐私标志为
/ / /只读。
/// - [bit 2]:重连接地址可见。
.flags = 0
};

/ *
****************************************************************************************

*参数更新配置

****************************************************************************************
* /
静态const struct connection_param_configuration user_connection_param_conf = {
///期望的连接间隔应该在3.5s左右
///连接间隔最小测量ble双插槽(1.25ms)
///使用宏MS_TO_DOUBLESLOTS从毫秒(ms)转换到双槽
.intv_min = MS_TO_DOUBLESLOTS (3200),

///连接间隔最大测量ble双插槽(1.25ms)
///使用宏MS_TO_DOUBLESLOTS从毫秒(ms)转换到双槽
.intv_max = MS_TO_DOUBLESLOTS (3800),

///连接事件中测量的延迟
.latency = 0,

///监控超时时间(10ms)
///使用宏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?谢谢!

设备:
MT_dialog
离线
最后看到:两个月两个星期前
工作人员
加入:2015-06-08 34
嗨,多愁善感,

嗨,多愁善感,

就像BLE规范提到的,4.0秒是可以设置连接间隔的最大时间,您所要做的就是在user_config.h文件中更改user_connection_param_conf结构。关于这些的一些评论,连接间隔是由连接的主服务器而不是从服务器设置的,因此你的手机将决定初始连接间隔,而不是作为从服务器的580设备。从设备不能设置连接间隔,它只能向主设备指示它想要的连接间隔,这是通过参数更新请求来完成的,因此,大约10秒之后,ble_app_peripheral示例将发出该命令,如果主服务器接受从服务器指定的参数,连接间隔将切换到从服务器的首选值。还当你做,确保监督是未定义或你操作在睡眠模式下,如果你使用主动模式和监管机构定义、参数更新后设备最终将NMI_Handler由于注射用水支出超过2.6秒()指令。

由于MT_dialog

伤感
离线
最后看到:2年11个月前
加入:2016-11-28 15:55
我发现问题可能是

我发现这个问题可能与PunchThrough应用有关。当我使用自定义Android应用程序时,我可以将连接间隔更改为最多4s。

伤感
离线
最后看到:2年11个月前
加入:2016-11-28 15:55
谢谢MT,我会检查的

谢谢MT,我会检查Android那边的代码。