CC2541 突然停止广播
使用CC2541, advertising的配置如下:
uint16 gapRole_AdvertOffTime = 5000;
uint8 enable_update_request = DEFAULT_ENABLE_UPDATE_REQUEST;
uint16 desired_min_interval = DEFAULT_DESIRED_MIN_CONN_INTERVAL;
uint16 desired_max_interval = DEFAULT_DESIRED_MAX_CONN_INTERVAL;
uint16 desired_slave_latency = DEFAULT_DESIRED_SLAVE_LATENCY;
uint16 desired_conn_timeout = DEFAULT_DESIRED_CONN_TIMEOUT;
// Set the GAP Role Parameters
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable );
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );
GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( scanRspData ), scanRspData );
GAPRole_SetParameter( GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData );
GAPRole_SetParameter( GAPROLE_PARAM_UPDATE_ENABLE, sizeof( uint8 ), &enable_update_request );
GAPRole_SetParameter( GAPROLE_MIN_CONN_INTERVAL, sizeof( uint16 ), &desired_min_interval );
GAPRole_SetParameter( GAPROLE_MAX_CONN_INTERVAL, sizeof( uint16 ), &desired_max_interval );
GAPRole_SetParameter( GAPROLE_SLAVE_LATENCY, sizeof( uint16 ), &desired_slave_latency );
GAPRole_SetParameter( GAPROLE_TIMEOUT_MULTIPLIER, sizeof( uint16 ), &desired_conn_timeout );
initial_advertising_enable = TRUE;
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable );
发现经常出现广播突然停止的情况,用手机再也搜索不到设备了,有时候开机30秒-5分钟之后,设备就丢了。
反复开关设备几次,比较容易复现,
谁遇到过类似的问题? 帮忙提供一些线索
你的问题我遇到过。
keyfob的例程是按键触发广播,广播时间为30.72s,超时则不再广播。这是为了省电,相关的设置是通过
1.声明成受限制的广播
// Limited discoverable mode advertises for 30.72s, and then stops
// General discoverable mode advertises indefinitely
#if defined ( CC2540_MINIDK ) // 受限制的广播 和 普通广播
#define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_LIMITED
#else
#define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_GENERAL
#endif // defined ( CC2540_MINIDK )
// Advertisement data 广播数据
static uint8 advertData[] =
{
0x02, // length of this data
GAP_ADTYPE_FLAGS,// 改为无限广播模式
DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,
// service UUID
0x03, // length of this data
GAP_ADTYPE_16BIT_MORE,
LO_UINT16( SIMPLEPROFILE_SERV_UUID ),
HI_UINT16( SIMPLEPROFILE_SERV_UUID ),
};
2. 设置广播关闭时间为30.72s
// By setting this to zero, the device will go into the waiting state after
// being discoverable for 30.72 second, and will not being advertising again
// until the enabler is set back to TRUE
uint16 gapRole_AdvertOffTime = 0;
如果你想修改的话,声明成普通广播,并将GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );这句话去掉就可以了
谢谢回复,按照上面指示的就行了修改,仍然出现突然中断的情况,
有时候几分钟,有时候十几分钟,就突然找不到设备。
是不是跟32.768K的晶振有一些关系?我用的是普通的晶振,不是有源晶振
学习了
板子是自己做的吗?
用bt软件还是安卓、ios?
板子是自己做的,用android的软件来扫描的,跟android没关系,因为重新复位蓝牙设备,就可以搜索到了
可能是硬件问题?
用bt软件测试吧
和你们现象一模一样,请问你的问题解决了吗?
1、如果是广播状态,
a) 硬件方面:请测试一下32M的晶振,是不是频偏很严重,还有电源是否稳定
b) 软件方面,如图楼上所说,将广播模式设置为无限制广播,则可以一直广播下去
2、如果是连接状态,,请测试一下32.768k的晶振
3、希望可以帮到你,祝你好运!如果问题解决了,请分享一下解决问题的方法,谢谢!
问题已经解决,忘记更新解决方法了,
有两个问题, 一个是晶振不稳定,后来更换晶振,另一个问题是编译选项弄错了(之前是knob, 改成cc2541就好了)
你好,可以交流一下吗,qq144854927
请问问题解决了吗,可以留一下解决方法吗
也有可能是编程时内存使用出现了错误,会造成osal运行异常,我调试的时候通过打开LED来观察系统的运行状况。具体方法:是使用hal_led的驱动,在休眠时会自己灭,可以清晰地看出闪烁,广播只点亮绿灯,连接后只点亮红灯,可以看出连接状态,以此可以推断系统是否正常运行。
这个其实是BLE协议栈的一个BUG,在1.4以下的版本,设置offtime的时间未0,便可以一直持续广播,但是在1.4的时候,就会工作一段时间后停止广播!按照代码里面的解释,是将此值设置为0时,需要重新触发才可以开启广播,但是在1.4版本以下的时候并需要重新触发,在1.4后,修改了这个bug……
我买的是别人做好的模块,烧录的是我自己的程序,在simpleBLEperipheral基础上做了点修改,现在偶尔就有在广播状态下但外部设备(手机)不能搜索到了,是模块的晶振不稳定吗?
你好 wei
请问您说的1.4版本是不是包括1.4.0版本的
是不是这样设置就不会停止广播了?
uint16 gapRole_AdvertOffTime = 0;
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );
或者说是将 GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );这句话屏蔽。
谢谢。