使用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就好了)