微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2541 突然停止广播

CC2541 突然停止广播

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

使用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 );这句话屏蔽。

谢谢。

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

网站地图

Top