微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2540作为主机如何获取当前的连接参数

CC2540作为主机如何获取当前的连接参数

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

大家好,以下有几个问题向大家咨询:

1. CC2540在作为从机时,可以通过GAPRole_SetParameter()及GAPRole_GetParameter()来设置及获取连接参数,请问CC2540作为主机时是如何设置及读取连接参数的?GAPCentralRole_SetParameter()中并没有连接参数的读写。

2. 从机在初始化时会设置连接参数,并且需要使能连接参数更新,才会请求主机更新连接参数。那么在更新连接前的连接参数是由主机设定的吗?还是BLE底层本身在连接时就有特定的默认参数呢?

3. GAPCentralRole_SetParameter()中有几个参数每看懂,希望能帮忙描述下:

GAPCENTRALROLE_IRK

GAPCENTRALROLE_SRK

GAPCENTRALROLE_SIGNCOUNTER

Shaokai,

1. 主机和从机不一样,不会请求从机去更新连接参数。主机会接受从机的更新参数请求,然后进行参数更新。主机可以用 GAPCentralRole_UpdateLink() 来更新参数。

2. 底层没有默认参数,协议栈规定了一些范围。就像1 说的一样,从机可以请求主机更新成从机想要的参数,通过 GAPRole_SendUpdateParam()向主机发送请求。 在初始化的哦时候使能不是能参数更新,跟你想不想要手动更新没有关系。你手动调用GAPRole_SendUpdateParam()也能达到目的。请仔细追踪一下使能之后的代码就会明白。

3. 这几个是配对绑定用的,会在初始化的时候从flash里面读出来,这个跟你要开发的应用程序没有任何关系,不必关心。

Yan

  在simpleBLECentral工程中,我通过simpleBLECentralEventCB()来监听 连接更新事件:

case GAP_LINK_PARAM_UPDATE_EVENT://连接参数更新
{
NPI_WriteTransport("Param Update\n",13);
}
break;

在主机与设备建立连接几秒后,就会自动触发这个事件。

而我使用函数GAPCentralRole_UpdateLink(),也能触发这个事件的发生。

请问:

1. 第一次事件的触发,是来自从机的更新连接参数请求吗?如果不是,那应该如何解释。

2. 你说的第一点中“主机不会请求从机更新连接参数”,那么我调用GAPCentralRole_UpdateLink()这个函数更新的参数是...

    ——换句话说,我调用这个函数并不是去请求从机更新连接参数,那么我给这个函数输入的几个参数是给谁用的呢?我就没明白这个函数到底做了什么。。。

simpleBLEConnHandle,
DEFAULT_UPDATE_MIN_CONN_INTERVAL,
DEFAULT_UPDATE_MAX_CONN_INTERVAL,
DEFAULT_UPDATE_SLAVE_LATENCY,
DEFAULT_UPDATE_CONN_TIMEOUT

shaokai,

1. 是的,第一次应该是从机的请求。

2. GAPCentralRole_UpdateLink()这个就直接去更新连接参数了,而不会去请求从机去更新。注意,在BLE中,只允许主机去更新连接参数,从机只能发出请求,“主机,求求你,根据我的要求,帮我更新一下连接参数吧,好吗?”, 明白了?

Yan

    如前所述,第一次连接更新是从机请求的,第二次是我自己调用GAPCentralRol_UpdateLink()触发的。

我暂且这么理解:调用GAPCentralRol_UpdateLink()是 应用层将参数 更新到链路层(不知道这么理解对不对)。

    既然前面从机已经请求过,我现在在主机中又再请求一次。如果这两组参数不兼容的话,在第二次更新连接参数后会怎么样?是否会造成连接异常呢。

    好吧,也许我的理解能力比较有限,还希望你能包容包容。(*^__^*) 

shaokai,

你的理解是对的。

主机再请求一次的话,那么就以新的参数为准。

每次更新,都会放弃原来参数,而采用新的参数。

Yan

    那么为保证连接的稳定性,我是否应该这么做:

    在从机请求过连接更新事件 之后,主机就尽量不要再调用GAPCentralRole_UpdateLink()来更新连接参数了?

Thanks

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

网站地图

Top