微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 如何提高observer或者其他蓝牙主机的形式对广播包的捕获的成功率?

如何提高observer或者其他蓝牙主机的形式对广播包的捕获的成功率?

时间:10-02 整理:3721RD 点击:

各位TI的工程师以及路过的大神们:

              现在我使用TI BLE 蓝牙协议栈(1.4.1)和CC2541 作为observer ,能捕捉广播信号,但是经常丢失(即便是1秒钟广播一次的广播包都会丢失)

              1.这是什么原因呢?

              2.observer是否能胜任扫描100个广播频率为1HZ广播包的任务(同时广播而捕捉失败不考虑)?

              3.若是不能,我该采用什么方式去完成这样的设计,或者说observer最快捕捉广播包的频率是多少?

              4.若是observer可以胜任这样的设计,我的参数该怎么配置?何时再发起扫描请求?

下面是我的部分修改的代码(现象是能捕捉1HZ的广播包,但是经常丢包,有时候挺连续的,有时候三四秒都没反应):

// Maximum number of scan responses
#define DEFAULT_MAX_SCAN_RES 1 //调整参数影响不大?

// Scan duration in ms
#define DEFAULT_SCAN_DURATION 10//4000   100左右会合适一点,小了也是断断续续

// Discovey mode (limited, general, all)
#define DEFAULT_DISCOVERY_MODE DEVDISC_MODE_ALL

// TRUE to use active scan
#define DEFAULT_DISCOVERY_ACTIVE_SCAN FALSE

// TRUE to use white list during discovery
#define DEFAULT_DISCOVERY_WHITE_LIST FALSE

case GAP_DEVICE_INIT_DONE_EVENT:
{

//pEvent->deviceInfo.pEvtData =&broadcasterData;
{
gapDeviceInitDoneEvent_t *pEvt = (gapDeviceInitDoneEvent_t *)pEvent;
osal_memcpy( dongleAddr, pEvt->devAddr, B_ADDR_LEN );//复制蓝牙地址
}


LCD_WRITE_STRING( "BLE Observer", HAL_LCD_LINE_1 );
LCD_WRITE_STRING( bdAddr2Str( pEvent->initDone.devAddr ), HAL_LCD_LINE_2 );


GAPObserverRole_StartDiscovery( DEFAULT_DISCOVERY_MODE,
DEFAULT_DISCOVERY_ACTIVE_SCAN,
DEFAULT_DISCOVERY_WHITE_LIST );
}
break;

case GAP_DEVICE_INFO_EVENT:
{



HalUARTWrite(0,pEvent->deviceInfo.addr,6);

HalUARTWrite(0,pEvent->deviceInfo.pEvtData,28);


HalUARTWrite(0,&pEvent->deviceInfo.rssi,1);
}
break;

case GAP_DEVICE_DISCOVERY_EVENT:
{
// discovery complete

GAPObserverRole_StartDiscovery( DEFAULT_DISCOVERY_MODE,
DEFAULT_DISCOVERY_ACTIVE_SCAN,
DEFAULT_DISCOVERY_WHITE_LIST );
}
break;

DEFAULT_MAX_SCAN_RES 可以尽量设的大(需要注意这个过大会导致内存溢出,所以找一个合适的值,比如从10开始),然后搜索的时间可以设为短而多次,在一次搜索结束之后,再开始第二次搜索。

还是会丢数据,看来是无法避免了

想要尽可能扫描到,

1、信号要好;

2、广播频率尽量高; 

3、扫描时间可以改为500ms扫描一次,这样1秒就可以扫描二次,有一次成功就算成功了

如果环境中ble设备多,还要改大扫描的最大个数,以保证能扫描到空间中的所有BLE设备

应该说,以保证能把扫描到空间中的所有BLE设备保存在扫描结果中; 

如何知道一个扫描结束了呢?如果周围没有蓝牙,也会进入这个结束函数里面吗?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top