微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > Fast Advertising & Slow Advertising

Fast Advertising & Slow Advertising

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

CC2540的Timeapp例子中区分了2种不同的advertising:

Fast

广播间隔:30ms

广播持续时间:30s

Slow

广播间隔:1s

广播持续时间:永久

我在使用这两种广播模式时发现有2个问题:

1、采用Slow advertising,iphone能够搜索到蓝牙开发板,但是配对时总是超时,导致只能使用Fast模式进行;

2、Fast模式修改广播持续时间为永久,无法生效,实际广播时间只有几秒,之后手机就搜不到开发板了;

大家有没有遇到这样的问题呢,一起讨论下吧!

大家有没有遇到这样问题呢?

cai,

把你的代码贴出来给大家看看?

另外,iPhone用的啥app?

没用app,直接手机搜到然后进行连接的;

// Fast advertising interval in 625us units
#define DEFAULT_FAST_ADV_INTERVAL 32

// Duration of fast advertising duration in ms
#define DEFAULT_FAST_ADV_DURATION 30000

// Slow advertising interval in 625us units
#define DEFAULT_SLOW_ADV_INTERVAL 1600

// Duration of slow advertising duration in ms (set to 0 for continuous advertising)
#define DEFAULT_SLOW_ADV_DURATION 0

static void startAdvertising(uint8 mode)
{
uint8 advState = TRUE;

if ( mode == ADV_FAST )
{
//快速广播
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, DEFAULT_FAST_ADV_INTERVAL );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, DEFAULT_FAST_ADV_INTERVAL );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, DEFAULT_FAST_ADV_DURATION );

}
else
{
//慢速广播
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, DEFAULT_SLOW_ADV_INTERVAL );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, DEFAULT_SLOW_ADV_INTERVAL );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, DEFAULT_SLOW_ADV_DURATION );

}

// Enable advertising
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &advState );
}

cai,

huh,很奇怪。代码看不出什么问题。

你能用packet sniffer抓包看一下吗?广播的时候和发起连接的时候到底发生了什么。

空中抓包往往能看出很多东西。

另外,你怎么调用你的 startAdvertising()的?

调用的时机有以下几个:

1、初始化时调用startAdvertising(ADV_FAST);进入快速广播状态;

2、在gapStateCallback()的以下case进行调用:

    if ( timeAppGapState == GAPROLE_CONNECTED &&
              newState != GAPROLE_CONNECTED )
    {
        DEBUG_PRINT("Disconnected , newState : %d \r\n", newState);
        
        disconnected();

        if ( newState == GAPROLE_WAITING_AFTER_TIMEOUT )
        {
            //这个应该是连接超时(距离太远,蓝牙关闭)造成的,采用慢速广播
            startAdvertising(ADV_SLOW);
        }
        else
        {
            //这个应该是手机端主动断开造成的,采用快速广播
            startAdvertising(ADV_FAST);
        }
    }
    // if advertising stopped
    else if ( timeAppGapState == GAPROLE_ADVERTISING &&
              newState == GAPROLE_WAITING )
    {
        DEBUG_PRINT("Advertising stopped\r\n");

        // if fast advertising switch to slow
        if ( GAP_GetParamValue( TGAP_GEN_DISC_ADV_INT_MIN ) == DEFAULT_FAST_ADV_INTERVAL )
        {
            startAdvertising(ADV_SLOW);
        }
    }

抓包的话我回头试试,现在手头边暂时没有设备。

另外我调整了一下2种广播模式的设置值,现在上面的代码能在各种情况下自动广播和进行配对,但是有时候要多试几次才能配对成功:

#define DEFAULT_FAST_ADV_INTERVAL 320 //def: 32

#define DEFAULT_FAST_ADV_DURATION 0 //def: 30000

#define DEFAULT_SLOW_ADV_INTERVAL 800 //def: 1600

#define DEFAULT_SLOW_ADV_DURATION 0 //def: 0

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

网站地图

Top