【BLE】CC2541之连接参数

转载自:

https://blog.csdn.net/feilusia/article/details/46909723

一、简介

本文介绍CC2541的连接参数。


二、实验平台

协议栈版本:BLE-CC254x-1.4.0

编译软件:IAR 8.20.2

硬件平台:Smart RF开发板(主芯片CC2541)

三、版权声明

博主:甜甜的大香瓜

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.NET/feilusia

联系方式:[email protected]

香瓜BLE之CC2541群:127442605

香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902

香瓜单片机之STM8/STM32群:164311667
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

四、实验前提
1、在进行本文步骤前,请先阅读以下博文:
1)《低功耗蓝牙BLE之连接事件、连接参数和更新方法》:http://blog.csdn.net/zzfenglin/article/details/51304084#userconsent#

2、在进行本文步骤前,请先实现以下博文:
暂无


五、基础知识

1、连接参数是什么?

答:连接参数用于规定主从机数据通信时间,包含最小连接间隔、最大连接间隔等参数,如果连接参数设置不合理,就会导致连接断开。

CC2541端的SimpleBLEPeripheral工程默认的连接参数如下:

// Minimum connection interval (units of 1.25ms, 80=100ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL     80        //最小连接间隔
 
// Maximum connection interval (units of 1.25ms, 800=1000ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL     800       //最大连接间隔
 
// Slave latency to use if automatic parameter update request is enabled
#define DEFAULT_DESIRED_SLAVE_LATENCY         0         //可忽略连接间隔的次数,默认是不忽略
 
// Supervision timeout value (units of 10ms, 1000=10s) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_CONN_TIMEOUT          1000      //连接超时时间,连接IOS时此参数必须小于6S
 
// Whether to enable automatic parameter update request when a connection is formed
#define DEFAULT_ENABLE_UPDATE_REQUEST         TRUE      //使能连接参数更新请求
 
// Connection Pause Peripheral time value (in seconds)
#define DEFAULT_CONN_PAUSE_PERIPHERAL         6         //有时当CC2541断开连接时,主机端过10S才会断开,此时将此数值改小可让主机快速发现断开连接

2、连接参数更新过程是如何?

答:主从机连接时,首先使用的是主机端默认的连接参数。

1)如果从机端禁止参数更新,则之后的通信都将使用主机端默认的连接参数。

2)如果从机端允许参数更新,则在主从机连接后的几秒内,从机会向主机端发送连接参数更新请求。

如果从机的连接参数符合主机端的连接标准,则更新参数;

如果从机的连接参数不符合主机端的连接标准,则不更新参数。

3、为何有时主机读取从机的特征值需要2S的时间?

答:因为连接参数中的连接超时时间过长,可以作如下修改:

// Supervision timeout value (units of 10ms, 1000=10s) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_CONN_TIMEOUT          100//1000      //连接超时时间,连接IOS时此参数必须小于6S

4、IOS端的连接参数有何具体要求?
答:

•Interval Max * (Slave Latency + 1) <= 2 s
•Interval Min >= 20 ms
•Interval Min + 20 ms <= Interval Max
•Slave Latency <= 4
•ConnSupervisionTimeout <= 6 s
•Interval Max * ( Slave Latency + 1) * 3 < ConnSupervisionTimeout
根据上述要求,要特别注意的是下面两点:
1、最大连接间隔要比最小连接间隔大20ms。

2、连接超时参数需要小于6S。(CC2541的SimpleBLEPeripheral工程默认的连接参数是不符合IOS的连接参数要求的,因此默认连接参数会导致连接参数更新失败)

3、IOS的默认连接参数是30ms。

5、如果从机申请更新参数失败了,会执行什么操作?
答:
GAPRole_SendUpdateParam函数中的最后一个形参,即是更新参数失败后的执行操作。
它一共有3个选项(无动作、重发、断开连接):

#define GAPROLE_NO_ACTION                    0 // Take no action upon unsuccessful parameter updates  
#define GAPROLE_RESEND_PARAM_UPDATE          1 // Continue to resend request until successful update  
#define GAPROLE_TERMINATE_LINK               2 // Terminate link upon unsuccessful parameter updates  

六、实验步骤

从机端只能发出参数更新申请,只有主机端能决定是否更新参数。

1)主机端直接更新参数使用函数GAPCentralRole_UpdateLink

  if ( keys & HAL_KEY_RIGHT )
  {
    BLE_DEV *p =  &(gDev[simpleBLEScanIdx]);
 
 
    NPI_PrintString("  [KEY RIGHT pressed!]\r\n");
 
 
    // Connection update
    if ( p->simpleBLEState == BLE_STATE_CONNECTED )
    {
      // 更新参数  
      GAPCentralRole_UpdateLink( p->simpleBLEConnHandle,
                                 DEFAULT_UPDATE_MIN_CONN_INTERVAL,
                                 DEFAULT_UPDATE_MAX_CONN_INTERVAL,
                                 DEFAULT_UPDATE_SLAVE_LATENCY,
                                 DEFAULT_UPDATE_CONN_TIMEOUT );
    }
  }


2)从机端发出参数更新申请

注:参考自《低功耗蓝牙BLE之连接事件、连接参数和更新方法》:http://blog.csdn.net/zzfenglin/article/details/51304084#userconsent#

①使用举例

uint16 interval;  
uint16 latency;  
uint16 timeout;  
  
GAPRole_GetParameter(GAPROLE_CONN_INTERVAL, &interval);   
GAPRole_GetParameter(GAPROLE_CONN_LATENCY, &latency);   
GAPRole_GetParameter(GAPROLE_CONN_TIMEOUT, &timeout);   
      
GAPRole_SendUpdateParam(25, 25, 8, timeout, GAPROLE_RESEND_PARAM_UPDATE); 
可先获取当前连接参数,将修改之后、未修改的参数都填充进申请函数即可。


②抓包


上图可知,从机先向主机申请参数更新,主机应答允许,随后从机将更新数据发送给主机。
--------------------- 
作者:feilusia 
来源:CSDN 
原文:https://blog.csdn.net/feilusia/article/details/46909723 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/parasoft/article/details/83790213