158***832
我们使用的GR5515I0NDA SDK版本是V1.7.00 (commit d9e44f51) 。
设备间的关系:
有主从两个设备都是使用了GR5515I0NDA,主设备主要负责扫描(也有广播),从设备主要负责广播,配置了两个广播ble_gap_adv_data_set 参数使用了0 和1
问题现象:
1)在设备使用现场主设备长时间(有时十几分钟有时几个小时)扫描不到从设备的adv 1, 0 没有记录是否扫描到了
2)复位从设备或者将从设备的广播停止后重新开始主设备还是扫描不到
3)将主设备的扫描停止再重新开始可以扫描到,很少次数后,又是长时间扫描不到, 主设备复位也是类似的现象。
4)在设备使用现场有很多设备出现了类似情况,我自己在公司无法复现这种现象。
主设备的扫描参数配置:
s_scan_param.scan_type = GAP_SCAN_ACTIVE;
s_scan_param.scan_mode = GAP_SCAN_OBSERVER_MODE;
s_scan_param.scan_dup_filt = GAP_SCAN_FILT_DUPLIC_EN;
s_scan_param.use_whitelist = 0;
s_scan_param.interval = APP_SCAN_INTERVAL; // 500 毫秒
s_scan_param.window = APP_SCAN_WINDOW; // 500 毫秒
s_scan_param.timeout = 0;
error_code = ble_gap_scan_param_set(BLE_GAP_OWN_ADDR_STATIC, &s_scan_param);
从设备的广播参数:
s_gap_adv_param.adv_intv_max = APP_ADV_SLOW_MAX_INTERVAL; // 700毫秒
s_gap_adv_param.adv_intv_min = APP_ADV_SLOW_MIN_INTERVAL; // 600毫秒
s_gap_adv_param.adv_mode = GAP_ADV_TYPE_ADV_IND;
s_gap_adv_param.chnl_map = GAP_ADV_CHANNEL_37_38_39; //广播的物理通道
s_gap_adv_param.disc_mode = GAP_DISC_MODE_GEN_DISCOVERABLE;
s_gap_adv_param.filter_pol = GAP_ADV_ALLOW_SCAN_ANY_CON_ANY;
s_gap_adv_param.max_tx_pwr = 7;
error_code = ble_gap_adv_param_set(0, BLE_GAP_OWN_ADDR_STATIC, &s_gap_adv_param);
APP_ERROR_CHECK(error_code);
s_adv_rsp_data_set[0] = len + 1;
s_adv_rsp_data_set[1] = BLE_GAP_AD_TYPE_COMPLETE_NAME;
sprintf((char *)(s_adv_rsp_data_set + 2), "%s", device_name);
error_code = ble_gap_adv_data_set(0, BLE_GAP_ADV_DATA_TYPE_DATA, s_adv_rsp_data_set, len+2);
APP_ERROR_CHECK(error_code);
s_gap_adv_time_param.duration = 0;
s_gap_adv_time_param.max_adv_evt = 0;
s_gap_adv_param.adv_intv_max = APP_CFG_ADV_MAX_INTERVAL; // 700毫秒
s_gap_adv_param.adv_intv_min = APP_CFG_ADV_MIN_INTERVAL; // 700毫秒
s_gap_adv_param.adv_mode = GAP_ADV_TYPE_ADV_IND;
s_gap_adv_param.chnl_map = GAP_ADV_CHANNEL_37_38_39;
s_gap_adv_param.disc_mode = GAP_DISC_MODE_GEN_DISCOVERABLE;
s_gap_adv_param.filter_pol = GAP_ADV_ALLOW_SCAN_ANY_CON_ANY;
error_code = ble_gap_adv_param_set(1, BLE_GAP_OWN_ADDR_STATIC, &s_gap_adv_param);
APP_ERROR_CHECK(error_code);
error_code = ble_gap_adv_data_set(1, BLE_GAP_ADV_DATA_TYPE_DATA, (const uint8_t *)&s_adv_timing_data, sizeof(adv_timing_data));
APP_ERROR_CHECK(error_code);
问题:
出现这种现象可能的原因是什么? 我需要排查哪些,或者SDK BLE可以获取哪些信息帮助定位
谢谢!!
zhongchengzhi
您好:
1、您开启了过滤重复广播GAP_SCAN_FILT_DUPLIC_EN,在公司设备多,过滤的buffer很快满了,以前缓存的被清除了,所以又可以扫描到设备,但设备现场的设备可能少,缓存的设备还在,所以不会扫描到设备;
2、您这边可以去除过滤重复广播试试(GAP_SCAN_FILT_DUPLIC_EN -> BLE_GAP_SCAN_FILT_DUPLIC_DIS);
3、您扫描窗口等于扫描间隔,SDK 1.7有点问题,您可以使扫描窗口小于扫描间隔,或者用补丁解决此问题,详情见: https://developers.goodix.com/zh/bbs/detail/2f0b14d5a46748c69b893990be1610a5?answerId=b0386315537a4a7694af89b894215cbe
打开微信,使用“扫一扫”即可关注