This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2640R2F SDK_3_10_00_15 BLE4.2怎么更新连接参数

Expert 2270 points

simplelink_cc2640r2_sdk_3_10_00_15 的blestack中的simple_peripheral和simple_central怎么设置连接参数更新, 

把simple_peripheral中的

#define DEFAULT_ENABLE_UPDATE_REQUEST    GAPROLE_LINK_PARAM_UPDATE_WAIT_REMOTE_PARAMS

改成 #define DEFAULT_ENABLE_UPDATE_REQUEST         GAPROLE_LINK_PARAM_UPDATE_INITIATE_BOTH_PARAMS

在simple_periperal中没有定义了GAP_LINK_PARAM_UPDATE_EVENT和GAP_UPDATE_LINK_PARAM_REQ_EVENT这两个事件, 加了这两个事件页没有触发,

然后在simple_peripheral使用下面的函数更新, 设置更新不成功

GAPRole_SendUpdateParam(DEFAULT_DESIRED_MIN_CONN_INTERVAL,
DEFAULT_DESIRED_MAX_CONN_INTERVAL,
DEFAULT_DESIRED_SLAVE_LATENCY,
DEFAULT_DESIRED_CONN_TIMEOUT,
GAPROLE_TERMINATE_LINK);

在simple_central使用GAPCentralRole_UpdateLink(connHandle, 16, 36, 0, 300)返回SUCCESS, 但是simple_peripheral没有触发GAP_LINK_PARAM_UPDATE_EVENT和GAP_UPDATE_LINK_PARAM_REQ_EVENT这两个事件

在BLE4.2中 simple_peripheral和simple_central中怎么更新连接参数, 怎么获取连接参数

  • 有抓包文件?

    参数需要符合下面的规定关系:
    The connSupervisionTimeout shall be a multiple of 10 ms in the range of 100 ms to 32.0 s and it shall be larger than (1 + connSlaveLatency) * connInterval * 2.
    Supervision Timeout > (1 +slaveLatency)* (connectionInterval)
  • 中文翻译版:

    Timeout参数定义了连接超时的长度,connSupervisionTimeout= Timeout×10 ms,其取值范围在100 ms至32 s之间。不论是master还是slave,在其收到一个数据帧之后,如果等待了connSupervisionTimeout时长都没有下一个数据帧到来,则可以认为连接已经断开。在这里要强调的是,connSupervisionTimeout必须大于(1 + connSlaveLatency) × connInterval × 2,否则,slave设备即使是在Lantency状态,也会被误认为是连接超时,导致连接误断开。
  • 没有抓包文件
  • 这就很难帮你了。理论上改成 #define DEFAULT_ENABLE_UPDATE_REQUEST GAPROLE_LINK_PARAM_UPDATE_INITIATE_BOTH_PARAMS
    会主动发送连接参数更新,只有抓包才能看一下发生了什么情况
  • // Minimum connection interval (units of 1.25ms, 80=100ms) for automatic
    // parameter update request
    #define DEFAULT_DESIRED_MIN_CONN_INTERVAL 16

    // Maximum connection interval (units of 1.25ms, 800=1000ms) for automatic
    // parameter update request
    #define DEFAULT_DESIRED_MAX_CONN_INTERVAL 36

    // Slave latency to use for automatic parameter update request
    #define DEFAULT_DESIRED_SLAVE_LATENCY 0

    // Supervision timeout value (units of 10ms, 1000=10s) for automatic parameter
    // update request
    #define DEFAULT_DESIRED_CONN_TIMEOUT 300

    connSupervisionTimeout 设置3s
    connSlaveLatency 为0
    connInterval 最大是45ms
    这个条件应该满足啊
  • 看你的需求似乎在追求一个较小的连接间隔试一下以下参数是我之前测试过的:
    // Minimum connection interval (units of 1.25ms) if automatic parameter update request is enabled
    #define DEFAULT_DESIRED_MIN_CONN_INTERVAL 10

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

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

    // Supervision timeout value (units of 10ms) if automatic parameter update request is enabled
    #define DEFAULT_DESIRED_CONN_TIMEOUT 500
  • 有函数接口可以获取当前的连接参数吗
  • /**
    * @brief Get information about a link
    *
    * Copies relevant link info into pInfo. Uses the connection
    * handle to search the link database.
    *
    * @param connectionHandle - controller link connection handle.
    * @param pInfo - address of link info item to copy information
    *
    * @return @ref SUCCESS if connection found else FAILURE
    */
    extern uint8 linkDB_GetInfo( uint16 connectionHandle, linkDBInfo_t * pInfo );
  • 手动更新参数后,linkDB_GetInfo() 获取到的连接间隔是一样的?获取到的值都是80, 但是设置的连接间隔最大是12, 这个为什么?

  • 你看一下返回的单位以及你更新成功了吗。此外连接不等于最大连接间隔,是由central根据连接参数决定的。
  • 将连接参数改成

    // Minimum connection interval (units of 1.25ms, 80=100ms) for automatic
    // parameter update request
    #define DEFAULT_DESIRED_MIN_CONN_INTERVAL 10

    // Maximum connection interval (units of 1.25ms, 800=1000ms) for automatic
    // parameter update request
    #define DEFAULT_DESIRED_MAX_CONN_INTERVAL 12

    // Slave latency to use for automatic parameter update request
    #define DEFAULT_DESIRED_SLAVE_LATENCY 0

    // Supervision timeout value (units of 10ms, 1000=10s) for automatic parameter
    // update request
    #define DEFAULT_DESIRED_CONN_TIMEOUT 500

    好像从机并没有自动发送更新参数请求,  

    在simple_peripheral中使用GAPRole_SendUpdateParam有时候返回是SUCCESS, 有时候失败, simple_peripheral中的GAP_LINK_PARAM_UPDATE_EVENT和GAP_UPDATE_LINK_PARAM_REQ_EVENT事件都没有触发

    在simple_central中使用GAPCentralRole_UpdateLink返回都是SUCCESS, 但是发送数据有时候可以正常发送, 有时候会有0x16错误码, 感觉参数没有更新成功