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

CC2640: CC2640频繁连接断开问题,重新烧录固件有时好,有时不行,但是行了一定可以。不行肯定就不行。

Part Number:CC2640

我目前在基于CC2640F128做一个蓝牙遥控器项目,一个模块做主机,一个做从机。经常有这种现象。原先两个设备正常烧录可以正常配对和绑定,也可以正常通信。但是如果将从设备重新烧录固件,一模一样的固件。出现二者不断连接,又断开。提示REASON 22的错误。并且两个设备重新断电重启都没有用。然后将主机或者从机重新烧录或者随便改一点无关的代码,重新烧录就又大概率的OK了。这种原因大概什么呢?由于这种现象很随机,并且,一模一样的固件,或者固件稍微改点又行了。但过一会重新烧一下又不行了。

部分参数设置如下:

// Maximum number of scan responses
#define DEFAULT_MAX_SCAN_RES 8

// Scan duration in ms
#define DEFAULT_SCAN_DURATION 4000

// How often to perform periodic event (in msec)
#define SBP_PERIODIC_EVT_PERIOD 500
// Discovery mode (limited, general, all)
#define DEFAULT_DISCOVERY_MODE DEVDISC_MODE_ALL

// TRUE to use active scan
#define DEFAULT_DISCOVERY_ACTIVE_SCAN TRUE

// TRUE to use white list during discovery
#define DEFAULT_DISCOVERY_WHITE_LIST FALSE

// TRUE to use high scan duty cycle when creating link
#define DEFAULT_LINK_HIGH_DUTY_CYCLE FALSE

// TRUE to use white list when creating link
#define DEFAULT_LINK_WHITE_LIST FALSE

// Default RSSI polling period in ms
#define DEFAULT_RSSI_PERIOD 1000

// Whether to enable automatic parameter update request when a connection is
// formed
#define DEFAULT_ENABLE_UPDATE_REQUEST GAPCENTRALROLE_PARAM_UPDATE_REQ_AUTO_ACCEPT

// Minimum connection interval (units of 1.25ms) if automatic parameter update
// request is enabled
#define DEFAULT_UPDATE_MIN_CONN_INTERVAL 400

// Maximum connection interval (units of 1.25ms) if automatic parameter update
// request is enabled
#define DEFAULT_UPDATE_MAX_CONN_INTERVAL 1200

// Slave latency to use if automatic parameter update request is enabled
#define DEFAULT_UPDATE_SLAVE_LATENCY 0

// Supervision timeout value (units of 10ms) if automatic parameter update
// request is enabled
#define DEFAULT_UPDATE_CONN_TIMEOUT 600

// Default passcode
#define DEFAULT_PASSCODE 19655

// Default GAP pairing mode
#define DEFAULT_PAIRING_MODE GAPBOND_PAIRING_MODE_INITIATE

// Default MITM mode (TRUE to require passcode or OOB when pairing)
#define DEFAULT_MITM_MODE TRUE

// Default bonding mode, TRUE to bond
#define DEFAULT_BONDING_MODE TRUE

// Default GAP bonding I/O capabilities
#define DEFAULT_IO_CAPABILITIES GAPBOND_IO_CAP_DISPLAY_ONLY

// Default service discovery timer delay in ms
#define DEFAULT_SVC_DISCOVERY_DELAY 1000

// TRUE to filter discovery results on desired service UUID
#define DEFAULT_DEV_DISC_BY_SVC_UUID TRUE

// Length of bd addr as a string
#define B_ADDR_STR_LEN 15

// Task configuration
#define SBC_TASK_PRIORITY 1

#ifndef SBC_TASK_STACK_SIZE
#define SBC_TASK_STACK_SIZE 864
#endif

Yolande Wang:

您好,

您看到提示REASON 22的错误是在LOG日志中吗,首先得知道REASON 22错误的具体描述,您看看代码里对于REASON 22的定义。

,

Yolande Wang:

错误代码REASON 22可能与连接问题有关,通常表示连接失败或中断。

在解决这个问题时,您可以尝试以下步骤:

1.清除设备的旧状态,包括配对信息和连接信息。

2.确保固件的一致性,不要在重新烧录时引入不必要的变化。

3.检查电源供应和复位操作,确保正确执行。

4.调试设备的连接问题,查看是否有错误日志或更详细的错误信息供参考。

,

Li Allen:

case GAP_LINK_TERMINATED_EVENT: { state = BLE_STATE_IDLE; connHandle = GAP_CONNHANDLE_INIT; discState = BLE_DISC_STATE_IDLE; charHdl = 0; procedureInProgress = FALSE; //uint8_t macBuf[6] = {0xB5,0xEE,0x6F,0x71,0x77,0x60};

// Cancel RSSI reads SimpleBLECentral_CancelRssi(pEvent->linkTerminate.connectionHandle);

Display_print0(dispHandle, 2, 0, "Disconnected"); Display_print1(dispHandle, 3, 0, "Reason: %d", pEvent->linkTerminate.reason); Display_clearLine(dispHandle, 4);

reason 22里面的22是从官方SDK里面获取的。另外配对banding成功后,是不是主机从机都会将banding信息写入Flash中?然后从机重新烧录时候,丢失这些信息,但是主机有配对信息,从而出现此种现象?

但是,有时候,我主机从机都重新烧录固件。好像也会继续弹出Disconnected。

,

Yolande Wang:

您好,

蓝牙连接中,通常情况下,主机和从机都会保存一些关于配对和绑定的信息在各自的Flash中,从机重新烧录固件通常不会导致绑定信息的丢失。

从GAP_LINK_TERMINATED_EVENT来看,这是进了蓝牙连接中止的case了。

我试图寻找LL.h文件,https://github.com/TexasInstruments/cc13xx_cc26xx_sdk/blob/main/source/ti/ble5stack_flash/controller/cc26xx/inc/ll.h#L92

在链接中发现调用了llStatus_t LL_Disconnect( uint16 connId,uint8 reason );函数导致HOST连接中止。

另外,您这边有没有测试过设备的RSSI信号强度?

,

Li Allen:

谢谢你的回答!RSSI我用手机直接连接读取到-65dB左右。然后当前大概能复现这样一个现象。

1.主机和从机,配对和绑定后,如果重新烧录主机固件,可以直接连接。不会自动解除连接

2.主机和从机,配对和绑定后,如果重新烧录从机固件,会出现连接,再不断自动解除连接的现象。

3.主机和从机,如果烧录过程中,各自先Forced Mass Erase,再烧录固件。然后双方可以正常配对连接。

4.主机从机正常配对绑定完成后,我当前是把配对的从机地址保存下来,重新开机后,我直接连接对应地址的从机。(不知道是否会有影响)

5.从机无论任何时候,哪怕主机自动连接自动断开,我用手机都可以连接成功。

6.根据如上1,2,3的现象。我是否可以通过什么方式,解除绑定,把主机绑定的信息给删除?

,

Yolande Wang:

您好,

1的现象通常是正常行为。

2发生的原因可能是由于重新烧录固件后,从机的某些配对信息被清除或更改,导致连接问题。

3使用“Forced Mass Erase”清除设备存储中的所有数据,包括配对信息。这可以解决连接问题,但可能会导致用户需要重新配对设备。

4直接连接指定从机地址,这通常是手动连接方式,允许直接连接到特定从机。这通常不会影响绑定信息。

5从机随时可以被手机连接成功,这可能是因为从机的蓝牙广播配置允许任何设备连接,而不需要绑定或配对,这是一种通用的连接方式。

6您希望仅删除主机上的绑定和配对的信息是吗?

,

Li Allen:

4.我的主机和从机是一对一做遥控器使用的。所以我的主机连接成功当前从机后,后面就一直连这个特定的从机。这个没问题。

6.从目前的现象看,如果2不可避免,那么我要保证我假设出现从机固件被重新烧录,我的主机想继续不出现自动断开连接的现象,我只要保证我的主机固件及FLASH通过某种操作达到3的效果就可以。所以我想是否可以通过我的某个操作,可以删除FLASH中写入的除了固件以外的信息。从而达到3的效果。

,

Yolande Wang:

已明确您的问题,您希望删除主机的存储信息,这通常需要特定的命令,在设备的用户界面或应用程序中执行,这边需要一些时间为您寻找具体如何操作的方法。

另外,有没有这样一种可能性,在2中,您先对从机使用“Forced Mass Erase”后,再烧录固件,看是否主从设备正常连接。

,

Li Allen:

“在2中,您先对从机使用“Forced Mass Erase”后,再烧录固件,看是否主从设备正常连接。”已测试,现象依然是连接不正常

,

Yolande Wang:

以下关于如何擦除绑定信息:

GAPBondMgr_SetParameter(GAPBOND_ERASE_ALLBONDS, NULL, NULL),用这个API可以清除所有绑定信息。

注意主机端和从机端都要清除。

您可以从这个链接中找到相关操作:https://github.com/TexasInstruments/ble-sdk-210-extra/blob/master/Projects/ble/ancs/CC26xx/Source/Application/ancsApp.c

,

Li Allen:

已测试OK,非常感谢

,

Yolande Wang:

不客气,很高兴解决了问题,欢迎随时来论坛交流!

赞(0)
未经允许不得转载:TI中文支持网 » CC2640: CC2640频繁连接断开问题,重新烧录固件有时好,有时不行,但是行了一定可以。不行肯定就不行。
分享到: 更多 (0)