微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2640R2F Peripheral请求Central进行连接参数更新造成的连接断开问题

CC2640R2F Peripheral请求Central进行连接参数更新造成的连接断开问题

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

TI工程师,您好

我使用IT原版BLE-STACK V3.0.1 (Support for CC2640R2F)(SIMPLELINK-CC2640R2-SDK_1.40.00.45)(20 Jul 2017)安装的2个工程做连接参数更新实验:

C:\ti\simplelink_cc2640r2_sdk_1_40_00_45\examples\rtos\CC2640R2_LAUNCHXL\blestack\simple_central

C:\ti\simplelink_cc2640r2_sdk_1_40_00_45\examples\rtos\CC2640R2_LAUNCHXL\blestack\simple_peripheral

我在simple_central工程中做了如下修改:

Poject-Option-C/C++ Compiler-Preprocessor
BOARD_DISPLAY_USE_UART_ANSI=0
加入了FPGA_AUTO_CONNECT

这样Central就能自动连接Peripheral

然后,我用GPIO24,GPIO25连接USB-COM,并用串口助手软件观察输出信息。

首先,我对两个工程的源代码不做任何改变,输出如下:

BLE Central
0x546C0EB8255F
Initialized
Discover ->
Discovering...
Devices Found 1
Connecting
0xB0912269427B
Connected
0xB0912269427B
GATT Read/Write ->
<- Next Option
MTU Size: 23
MTU Size: 65
Simple Svc Found

最后一条输出后一直保持,这说明连接一直持续,没有断开

但是,当我修改simple_peripheral.c Line 111

#define DEFAULT_ENABLE_UPDATE_REQUEST GAPROLE_LINK_PARAM_UPDATE_WAIT_REMOTE_PARAMS

#define DEFAULT_ENABLE_UPDATE_REQUEST         GAPROLE_LINK_PARAM_UPDATE_INITIATE_BOTH_PARAMS

输出信息变为:

Initialized
Discover ->
Discovering...
Devices Found 1
Connecting
0xB0912269427B
Connected
0xB0912269427B
GATT Read/Write ->
<- Next Option
MTU Size: 23
MTU Size: 65
Simple Svc Found
Param Update: 0
Disconnected
Reason: 8
Discover ->

其中后面的黄色背景信息说明,central端收到了peripheral端的更新请求,过了大概10多秒钟,连接就断开了

您能帮我查一下原因吗?

我查了一下,在simple_central.c中,有这样一行:

#define DEFAULT_ENABLE_UPDATE_REQUEST         GAPCENTRALROLE_PARAM_UPDATE_REQ_AUTO_ACCEPT

这说明,central应该能够自动接受peripheral的连接参数更新请求。

以下是package sniffer抓包:

这是抓包软件保存下来的数据,您可以用package sniffer打开来观看:

0878.captured_data.psd

您如能帮我找到原因,我不胜感激!

谢谢!

Charles Bai

看我个性签名档,《简单粗暴学蓝牙5》。

阅读其中的《1.3.4、蓝牙广播停止、蓝牙通信断开的原因是什么?》、《6.3.4、香瓜CC2640R2F之连接参数》。

谢谢香瓜!

我看了您的《简单粗暴学蓝牙5》,不过我的问题按照文中的描述并不能解决。

我觉得是central并没有正确相应peripheral的连接参数更新请求。否则连接不可能断开。

我用手机连接该peripheral,一切正常,但只要用central来连接peripheral,连接就会断开。

而断开一定是发生在参数更新请求之后的10多秒钟。如果没有参数更新请求,则不断开。

我想,问题就出在central端如何相应更新请求上,可是simple_central.c中哪段代码是用来相应更新请求的,我始终没有搞明白。

谢谢您的指点。

这个不就是你的问题么。

对于手机来说,您说的有道理,手机里面的连接参数我们不能修改,peripheral只能去适配手机。可是我这里手机连接没问题,两端(central和peripheral)都是同样的芯片(cc2640r2f),同样的协议栈(BLE4.2),双方的连接参数,甚至是协议栈都是可以改动的。我就不能让peripheral的连接间隔固定设置为是1s, 延迟时间是6s, 而去修改central让central去适配peripheral吗?

一口吃不成胖子就分两口吃,两口吃不成胖子就分三口吃。

你的连接参数能不能用还有待商榷。

现在是要把你的demo先调出一版正常的,再去做修改。

说的直白点就是:

1、主、从机连接参数使用ti给的默认参数。

2、能正常连接后,再改。

我两端用的都是TI默认参数,在peripheral端不请求更新参数的情况下,连接没问题。

即使peripheral端请求参数更新,更新的参数也是TI原程序的参数,我没有改动参数,问题就是只要请求更新,就断连。已经困扰我3个星期了。

接受您的建议,我再多试试吧。

谢谢!

板子是自己做的吗?可以用btool软件和usb dongle试试。

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

网站地图

Top