CC2640R2F Peripheral请求Central进行连接参数更新造成的连接断开问题
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试试。