你好,
我使用PRO主板和SDK 5.0.4。我想设置一个较大的连接间隔,以降低功耗。基于ble_peripheral项目,我改变用户_config.h参数。当我改变的时间间隔周围300毫秒,它的工作原理,我可以使用功率分配器看到波形。然而,当我还设置连接的时间间隔为约360〜4.0s其是根据BLE规范限制,实际的间隔仍然为30ms。这是我的user.config.h:(我没有改变其他地方)
/*
****************************************************************************************
*
* GAPM配置
*
****************************************************************************************
* /
静态常量结构gapm_configuration user_gapm_conf = {
///设备角色:中央、外围、观察者或广播者
。角色= GAP_PERIPHERAL_SLV,
用于解析的随机BD地址生成///设备IRK(LSB第一)
.irk = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
///设备外观(0×0000 - 未知外观)
//根据……填写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双时隙测量连接间隔的最小值(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),
///从属优选连接的等待时间。它在连接事件检测跳过
.con_latency = 0,
///从属优选在定时器单元测量的链路监督超时(10毫秒)
///使用宏MS_TO_TIMERUNITS转换从毫秒(ms)到定时器单元
.superv_to = MS_TO_TIMERUNITS(8000),
///隐私设置位域(0b1 = enabled, 0b0 = disabled)
/// - [bit 0]:隐私支持
/// - [位1]:多键支持(外围只);如果启用,保密标志是
/// 只读。
/// - [bit 2]:重连接地址可见。
.flags = 0
};
/*
****************************************************************************************
*
*参数更新配置
*
****************************************************************************************
* /
static 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,
在计时器测量单位///监督超时(10毫秒)
///使用宏MS_TO_TIMERUNITS转换从毫秒(ms)到定时器单元
.time_out = MS_TO_TIMERUNITS(5000),
在BLE双时隙测量///最小连接事件持续时间(1.25ms)
///使用宏MS_TO_DOUBLESLOTS从毫秒(ms)转换为双槽
.ce_len_min = MS_TO_DOUBLESLOTS(0),
///在BLE双时隙测得的最大连接事件持续时间(1.25ms)
///使用宏MS_TO_DOUBLESLOTS从毫秒(ms)转换为双槽
.ce_len_max = MS_TO_DOUBLESLOTS(0),
};
我的问题是1)什么是对话芯片的最长允许连接间隔?(4S?)和2)我需要改变其他参数来设置较长的时间间隔,比如3.8S?谢谢!
嗨青涩,
像BLE规范中提到4.0秒是可以设置连接间隔的最大时间,和所有你需要做的是改变在user_config.h文件user_connection_param_conf结构。这些少数意见,连接间隔由连接的主,而不是由奴隶设定,因此您的手机会决定初始连接的时间间隔,而不是580设备充当奴隶。所述从设备不能设置连接间隔,它只能指示给主控为连接间隔,它希望,以及与参数更新请求完成的,所以后约10秒的ble_app_peripheral例子将发出该命令,并且如果主接受由从属连接的时间间隔将切换到从设备的首选值所指示的参数。此外,当你这样做,确保该看门狗是不确定的,或者你在睡眠模式下运行,如果你做到这一点使用主动模式和看门狗定义,参数更新后的设备将最终的NMI_Handler由于花费超过2.6秒到WFI()指令。
谢谢mt_dialog.
我发现这个问题很可能与穿通的应用。当我使用我的自定义Android应用程序,我可以在连接间隔改为达4S。
谢谢MT,我会在Android端检查代码。