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

CC2541 实现广播间隔为60ms

CC2541 如何实现广播间隔为60ms, 根据SimpleBLEBroadcaster中的代码, 如果 DEFAULT_ADVERTISING_INTERVAL 改为 96 使用packet sniffer抓不到任何数据包.

有看到资料说 可连接广播类型的间隔是 20ms ~ 10.28s

如下这几个宏都试过了, 无法抓到数据包

uint8 advType = GAP_ADTYPE_ADV_SCAN_IND;//GAP_ADTYPE_ADV_IND; //GAP_ADTYPE_ADV_NONCONN_IND; // use non-connectable advertisements
//uint8 advType = GAP_ADTYPE_ADV_SCAN_IND; // use scannable unidirected advertisements

// 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_ADV_EVENT_TYPE, sizeof( uint8 ), &advType );
}

// Set advertising interval
{
uint16 advInt = 96;//DEFAULT_ADVERTISING_INTERVAL;

GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, advInt );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, advInt );
}

Viki Shi:

广播间隔范围是20ms ~ 10.24s

无法抓到数据是没有报文发出吗?设为其他值是否正常?修改广播间隔需要先关闭广播,更新以后再开启。方法参考: e2echina.ti.com/…/74340

YiKai Chen:

回复 Viki Shi:

我記得SimpleBLEBroadcaster調整DEFAULT_ADVERTISING_INTERVAL會出現GAPROLE_ERROR

lei li:

回复 Viki Shi:

是的, 没有报文发出, DEFAULT_ADVERTISING_INTERVAL = 160是正常有报文的, 通过nRF Connect 也能看到, 有尝试修改DEFAULT_ADVERTISING_INTERVAL 小于160都没有报文,这些广播类型都有测试小于100ms都没有报文

#define GAP_ADTYPE_ADV_IND0x00//!< Connectable undirected advertisement
#define GAP_ADTYPE_ADV_HDC_DIRECT_IND0x01//!< Connectable high duty cycle directed advertisement
#define GAP_ADTYPE_ADV_SCAN_IND0x02//!< Scannable undirected advertisement
#define GAP_ADTYPE_ADV_NONCONN_IND0x03//!< Non-Connectable undirected advertisement
#define GAP_ADTYPE_ADV_LDC_DIRECT_IND0x04//!< Connectable low duty cycle directed advertisement

做了另外的尝试 :uint16 advIntervalMin = 96; // Required adv interval.uint16 advIntervalMax = 96; // Required adv interval. uint8 advType = HCI_SCANNABLE_UNDIRECTED;//HCI_CONNECTABLE_UNDIRECTED_ADV;uint8 ownAddrType = HCI_PUBLIC_DEVICE_ADDRESS; // Public addr.uint8 directAddrType = HCI_PUBLIC_DEVICE_ADDRESS; // Useless here.uint8 *directAddr = NULL;uint8 advChannelMap = HCI_ADV_CHAN_ALL;uint8 advFilterPolicy = HCI_ADV_WL_POLICY_ANY_REQ;HCI_LE_SetAdvParamCmd( advIntervalMin , advIntervalMax , advType , ownAddrType , directAddrType , directAddr , advChannelMap , advFilterPolicy );uint8 initial_advertising_enable = TRUE;//GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable );HCI_LE_SetAdvEnableCmd(HCI_ENABLE_ADV);

这部分设置是有报文的, 但是报文的间隔是100ms , 这两个 advIntervalMin , advIntervalMax 参数不起作用, 是否协议栈写死了广播最小间隔?

Viki Shi:

回复 lei li:

查了下蓝牙协议规定,设置为non-connectable 或者广播者的的广播间隔,必须大于等于100ms。

不可连接的广播,间隔不能小于100mS,可连接的广播,比如Peripheral,间隔不能小于20mS。

lei li:

回复 Viki Shi:

是的, 这块的规定确实也有看到, 那么是否表明我用的例程有问题,应该用"SimpleBLEPeripheral", 但里面开启广播的所用的函数是一样的.
调用
uint8 advType =GAP_ADTYPE_ADV_IND;//!< Connectable undirected advertisement
GAPRole_SetParameter( GAPROLE_ADV_EVENT_TYPE,sizeof( uint8 ),&advType );

设置为可连接的广播,在gap.h 文件有描述的.那么在设置advertising interval 时间为96时, 通过packet sniffer抓不到报文,
这跟ble协议栈(BLE-CC254x-1.4.0) 和 IAR(8.20.2) 有关系不?或者说这个协议栈就是不能设置小于100ms的,
viki 能否给一个明确的答复, 如果可以做到给一些提示 , 谢谢:)

赞(0)
未经允许不得转载:TI中文支持网 » CC2541 实现广播间隔为60ms
分享到: 更多 (0)