TI中文支持网
TI专业的中文技术问题搜集分享网站

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分钟之后,设备就丢了。

反复开关设备几次,比较容易复现,

谁遇到过类似的问题? 帮忙提供一些线索

wenzhong shen:

你的问题我遇到过。

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 dataGAP_ADTYPE_FLAGS,// 改为无限广播模式DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,

// service UUID 0x03, // length of this dataGAP_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 );这句话去掉就可以了

peng zhou6:

回复 wenzhong shen:

谢谢回复,按照上面指示的就行了修改,仍然出现突然中断的情况,

有时候几分钟,有时候十几分钟,就突然找不到设备。

是不是跟32.768K的晶振有一些关系?我用的是普通的晶振,不是有源晶振

da qin zheng sheng:

回复 wenzhong shen:

学习了

da qin zheng sheng:

回复 peng zhou6:

板子是自己做的吗?

用bt软件还是安卓、ios?

peng zhou6:

回复 da qin zheng sheng:

板子是自己做的,用android的软件来扫描的,跟android没关系,因为重新复位蓝牙设备,就可以搜索到了 

da qin zheng sheng:

回复 peng zhou6:

可能是硬件问题?

da qin zheng sheng:

回复 peng zhou6:

用bt软件测试吧

jack wong:

和你们现象一模一样,请问你的问题解决了吗?

mark_xu:

回复 wenzhong shen:

1、如果是广播状态,

     a) 硬件方面:请测试一下32M的晶振,是不是频偏很严重,还有电源是否稳定

     b)  软件方面,如图楼上所说,将广播模式设置为无限制广播,则可以一直广播下去

2、如果是连接状态,,请测试一下32.768k的晶振

3、希望可以帮到你,祝你好运!如果问题解决了,请分享一下解决问题的方法,谢谢!

peng zhou6:

回复 mark_xu:

问题已经解决,忘记更新解决方法了,

有两个问题, 一个是晶振不稳定,后来更换晶振,另一个问题是编译选项弄错了(之前是knob, 改成cc2541就好了)

赞(0)
未经允许不得转载:TI中文支持网 » CC2541 突然停止广播
分享到: 更多 (0)