精华内容
下载资源
问答
  • BLE固件开发--更新连接参数

    千次阅读 2015-01-29 17:43:29
    低功耗蓝牙里重要的三个连接参数:Connection Interval,Slave Latency,Supervision Timeout.... 更新连接参数的相关api:  /******************************************************************** * @fn GAPRole

        低功耗蓝牙里重要的三个连接参数:Connection Interval,Slave Latency,Supervision Timeout.这三个参数决定了BLE的功耗。

        更新连接参数的相关api: 

    /********************************************************************
     * @fn          GAPRole_SendUpdateParam
     *
     * @brief       Update the parameters of an existing connection
     *
     * @param       minConnInterval - the new min connection interval
     * @param       maxConnInterval - the new max connection interval
     * @param       latency - the new slave latency
     * @param       connTimeout - the new timeout value
     * @param       handleFailure - what to do if the update does not occur.
     *              Method may choose to terminate connection, try again, or take no action
     *
     * @return      SUCCESS, bleNotConnected, or bleInvalidRange
     */
    bStatus_t GAPRole_SendUpdateParam( uint16 minConnInterval, uint16 maxConnInterval,
                                       uint16 latency, uint16 connTimeout, uint8 handleFailure )
        ios app连接时,apple公司有自己的规范,这三个参数的设置必须在其规范内才可生效:

        ● Interval Max * (Slave Latency + 1) ≤ 2 seconds
        ● Interval Min ≥ 20 ms
        ● Interval Min + 20 ms ≤ Interval Max Slave Latency ≤ 4
        ● connSupervisionTimeout ≤ 6 seconds
        ● Interval Max * (Slave Latency + 1) * 3 < connSupervisionTimeout

    欢迎大家扫描下方二维码关注我的个人微信公众号,一起交流学习,谢谢。

        

    展开全文
  • 背景cc2640项目需要添加oad功能,为了降低功耗,默认连接参数设置的比较大,这将导致oad...更新连接参数的api/******************************************************************** * @fn GAPRole_SendUpdatePar

    背景

    cc2640项目需要添加oad功能,为了降低功耗,默认连接参数设置的比较大,这将导致oad时间过长,此时需要在oad之前先更新一组较小的连接参数,提高oad的速度。

    更新连接参数的api

    /********************************************************************
     * @fn          GAPRole_SendUpdateParam
     *
     * @brief       Update the parameters of an existing connection
     *
     * @param       minConnInterval - the new min connection interval
     * @param       maxConnInterval - the new max connection interval
     * @param       latency - the new slave latency
     * @param       connTimeout - the new timeout value
     * @param       handleFailure - what to do if the update does not occur.
     *              Method may choose to terminate connection, try again, 
     *              or take no action
     *
     * @return      SUCCESS, bleNotConnected, or bleInvalidRange
     */
    bStatus_t GAPRole_SendUpdateParam(uint16_t minConnInterval, 
                                      uint16_t maxConnInterval,
                                      uint16_t latency, uint16_t connTimeout, 
                                      uint8_t handleFailure)

    移植官方ccservice的回调函数

    /*********************************************************************
     * @fn      ccChangeCB
     *
     * @brief   Callback from Connection Control indicating a value change
     *
     * @param   paramID - parameter ID of the value that was changed.
     *
     * @return  none
     */
    static void ccChangeCB( uint8 paramID )
    {
      // CCSERVICE_CHAR1: read & notify only
    
      // CCSERVICE_CHAR: requested connection parameters
      if (paramID == CCSERVICE_CHAR2)
      {
        uint8_t buf[CCSERVICE_CHAR2_LEN];
    
        // Get new connection parameters
        CcService_getParameter( CCSERVICE_CHAR2, buf);
    
        // Update connection parameters
        GAPRole_SendUpdateParam( BUILD_UINT16(buf[0],buf[1]), 
                                BUILD_UINT16(buf[2],buf[3]), // minConnInterval, maxConnInterval
                                BUILD_UINT16(buf[4],buf[5]), 
                                BUILD_UINT16(buf[6],buf[7]),  // slaveLatency, timeoutMultiplier
                                GAPROLE_TERMINATE_LINK);
      }
      // CCSERVICE_CHAR3: Disconnect request
      else if (paramID == CCSERVICE_CHAR3)
      {
        // Any change in the value will terminate the connection
        GAPRole_TerminateConnection();
      }
    
    }

    更新现象

    测试发现按照官方demo这样直接更新连接参数,会导致断开连接,细查发现是会导致死机

    解决方法

    分析导致死机可能是跟ti-rtos有关,没有细查死机原因,解决这个死机问题,只需要将更新连接参数的接口放到其它地方执行,而不能在回调函数里面直接执行。

    参考方法:使用定时器任务

    展开全文
  • 本人对蓝牙协议栈也算是个小白,以前都没有接触过蓝牙协议栈这块,来到现公司后还是接触,有些客户的蓝牙协议栈在遥控器向主机端发送连接参数更新请求后被拒绝,或者更新成功后发给遥控的又是另外一个数值,之前老大...

         本人对蓝牙协议栈也算是个小白,以前都没有接触过蓝牙协议栈这块,来到现公司后还是接触,有些客户的蓝牙协议栈在遥控器向主机端发送连接参数更新请求后被拒绝,或者更新成功后发给遥控的又是另外一个数值,之前老大让我改了三个宏定义就可以,BTM_BLE_CONN_INT_MIN_DEF设成6,BTM_BLE_CONN_INT_MAX_DEF设成40,BTM_BLE_CONN_INT_MIN_LIMIT设成0x0006.之前一直不知道为什么这么改下就可以了。后面碰到一个问题,终于找到连接参数是怎么更新的,当然这里只是一部分。有大神看到可以帮忙补充。

            因为遥控器发给主机的的更新连接参数的packet是acl data,所以必定会在l2c_rcv_acl_data处理该patcket。该函数是专门处理ACL 类型的数据包的。根据解析出来的rcv_cid为L2CAP_BLE_SIGNALLING_CID,即可找到具体的处理函数l2cble_process_sig_cmd,在该函数中会去解析出packet包中的min_interval,max_interval,latency以及timeout。然后给t_l2c_linkcb这个结构中对应的值更新。

    展开全文
  • 蓝牙的连接参数主要是指: 更新模式(paramUpdateEnable) 最小连接间隔(minConnInterval) 最大连接间隔(maxConnInterval) 潜伏个数(slaveLatency) 连接超时时间(timeoutMultiplier) 例程:examples\rtos\...

    写在前面
    蓝牙的连接参数主要是指:

    1. 更新模式(paramUpdateEnable)
    2. 最小连接间隔(minConnInterval)
    3. 最大连接间隔(maxConnInterval)
    4. 潜伏个数(slaveLatency)
    5. 连接超时时间(timeoutMultiplier)
      例程:examples\rtos\CC2640R2_LAUNCHXL\blestack\simple_peripheral

    相关说明

    1、更新模式(paramUpdateEnable)

    说明:

    模式 说明
    GAPROLE_LINK_PARAM_UPDATE_WAIT_REMOTE_PARAMS
    GAPROLE_LINK_PARAM_UPDATE_INITIATE_BOTH_PARAMS 协商主机从机的连接参数进行更新
    GAPROLE_LINK_PARAM_UPDATE_INITIATE_APP_PARAMS
    GAPROLE_LINK_PARAM_UPDATE_WAIT_APP_PARAMS
    GAPROLE_LINK_PARAM_UPDATE_WAIT_BOTH_PARAMS
    GAPROLE_LINK_PARAM_UPDATE_REJECT_REQUEST

    设置API:
    GAPRole_SetParameter(GAPROLE_PARAM_UPDATE_ENABLE, sizeof(uint8_t), &value);
    获取当前参数API:GAPRole_GetParameter(GAPROLE_PARAM_UPDATE_ENABLE,&value);

    2、最小连接间隔(minConnInterval)

    设置API:
    GAPRole_SetParameter(GAPROLE_MIN_CONN_INTERVAL, sizeof(uint16_t), &value);
    获取当前参数API:GAPRole_GetParameter(GAPROLE_PARAM_UPDATE_ENABLE,&value);

    3、最大连接间隔(maxConnInterval)

    设置API:
    GAPRole_SetParameter(GAPROLE_MAX_CONN_INTERVAL, sizeof(uint16_t), &value);
    获取当前参数API:GAPRole_GetParameter(GAPROLE_MAX_CONN_INTERVAL,&value);

    4、潜伏个数(slaveLatency)

    设置API:
    GAPRole_SetParameter(GAPROLE_SLAVE_LATENCY, sizeof(uint16_t), &value);
    获取当前参数API:GAPRole_GetParameter(GAPROLE_SLAVE_LATENCY,&value);

    5、连接超时时间(timeoutMultiplier)

    设置API:
    GAPRole_SetParameter(GAPROLE_TIMEOUT_MULTIPLIER, sizeof(uint16_t), &value);
    获取当前参数API:GAPRole_GetParameter(GAPROLE_TIMEOUT_MULTIPLIER,&value);

    执行更新连接参数

    以上API设置只是加载相关数值,并不会发起更新,调用以下API主从机就会发起协商更新连接参数(如果参数符合要求
    更新参数要求:

    • 每次更新必须有且一个参数与当前的参数不一致,如下代码所示,最好每次的连接超时时间要改变一下,不然会返回0x18,
    • timeoutMultiplier > (1+slaveLatency) * maxConnInterval * 2,timeoutMultiplier 应为100 ms的倍数,范围为100 ms至32.0 s,最好把余量放大点。
    int8_t enableUpdateRequest = TRUE;
    GAPRole_SetParameter( GAPROLE_PARAM_UPDATE_REQ,sizeof(uint8_t), &enableUpdateRequest)
    

    更新参数执行限制条件

      if ((gapRole_ConnInterval < pConnParams->minConnInterval)   ||
           (gapRole_ConnInterval > pConnParams->maxConnInterval)   ||
           (gapRole_ConnSlaveLatency != pConnParams->slaveLatency) ||
           (gapRole_ConnTimeout  != pConnParams->timeoutMultiplier))
      {
      //执行更新操作
      }
    
    展开全文
  • 今天将详细的讲解下低功耗蓝牙设备和手机连接时的抓包,以此帮助我这样的小白,并积累经验~ 首先,将Dongle和低功耗蓝牙开发板连上电脑,开发板中的程序运行起来~走起   进入到sniffer packet中(sniffer packet...
  • 从机请求更新连接参数CONNECTION PARAMETER UPDATE REQUEST     BLE4.2中增加了LL_CONNECTION_PARAM_REQ 和LL_CONNECTION_PARAM_RSP两个链路层控制,这样从机就能够改变主机的锚点: 注意:...
  • nrf52832 连接参数更新过程

    千次阅读 2019-02-15 10:04:00
    二、主机更新连接参数 (举例:NRF CONNECT 安卓app软件 45ms)。 三、从机更新连接参数(一般有延时机制,4S,更新 程序设置的 最大连接间隔 MAX_CONN_INTERVAL) nRF5 SDK 中 有决定第三步 是否更新连接参数宏...
  • 首先要明确:连接参数是由主机端确定的,从机端可以发起更新连接参数的请求。主机端可以直接下发连接参数,而从机端则只能是发起更新请求并附带想要的连接参数范围。 在初始化中将想要的连接参数设置进osal( 在和...
  • BLE 连接参数更新

    2020-08-29 21:05:16
    BLE 连接参数更新 1.连接参数 .DEFAULT_DESIRED_MIN_CONN_INTERVAL(最小连接间隔) .DEFAULT_DESIRED_MAX_CONN_INTERVAL(最大连接间隔) 这个间隔 是指成功连接后 的周期性通讯时间,主机会根据使用情况 在 这个...
  • 这里连接参数设置为空,因为之前参数已经设置过,只要获取保存到变量给后面需要的时候用就好了。创建一个定时器, 这样设置工作完成了。 2、当有连接事件是时候,通过handle协商要不要发送...
  • 1、主机连接参数更新 1.1、LL_CONNECTION_UPDATE_REQ 连接参数第一次是主机发送的 CONNECT_REQ 中传递的。 而这个命令的使用只限主机使用,也就是说主机根据需要随时都可以进行参数更新。从机接收到这个命令后要么...
  • 这个过程相对简单,从机在广播模式下在3条广播信道依次广播,主机在扫描模式下监听广播信道时接收到从机的广播包,主机发送连接请求,从机接受,建立连接;详细的过程另开一篇记录; 设备保持链路连接 LE设备 LE...
  • 蓝牙ble连接参数更新和低功耗原理

    千次阅读 2016-03-26 09:12:06
    于高效率的目的,主设备对从设备的连接参数进行更新。主设备发出连接参数更新请求以 后,主从设备不需要进行协商,从设备接受,使用连接参数或者断开连接。  连接请求包含了早先的一些参数信息,还包含了一个新的...
  • 低功耗蓝牙BLE之连接事件、连接参数更新方法本文档来自zzfenglin的博客。 连接事件在一个连接当中,主设备会在每个连接事件里向从设备发送数据包。一个连接事件是指主设备和从设备之间相互发送数据包的过程。连接...
  • 低功耗蓝牙BLE之连接参数de更新方法
  • 连接事件 在一个连接当中,主设备会在每个连接事件里向从设备发送数据包。...要确定从设备与主设备的实际交互间隔,需要用到从设备延迟这一参数,代表从设备在必须侦听之前可以忽略多少个连接事件。
  • BLE连接参数更新过程详解 有关连接参数概念和作用我们在 Generic Access Profile (GAP) 一章中已经详细讲解过,这一章演示如何通过修改simple_peripheral例程实现连接参数更新,并分析程序流程。 介绍 连接...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,426
精华内容 1,370
关键字:

更新连接参数