自学内容网 自学内容网

CH592蓝牙芯片从机端调试记录:如何降低连接功耗

项目场景:

        使用CH592芯片实现一个蓝牙从机模块,对于静态功耗和连接功耗都有一定的要求(为了延长电池使用时间)


问题描述

        与app连接成功后整机功耗0.3mA左右(整机功耗),要求将整机功耗降低到0.0xmA级别


原因分析:

参考文章:

蓝牙BLE从机Peripheral讲解一(广播间隔和连接间隔) - SweetTea_lllpc - 博客园百度安全验证icon-default.png?t=O83Ahttps://baijiahao.baidu.com/s?id=1690204008664769649&wfr=spider&for=pc

        重点关注:连接间隔、从设备延迟、连接超时这几个参数

        实际与厂商FAE联系,只需要关注“连接间隔”这个参数

        连接间隔:长的时间间隔的优势是显著地节省功耗,因为设备可以在连接事件之间有较长时间的休眠,坏处是当设备有应用数据需要发送时,必须要等到下一个连接事件;短的时间间隔优势是两设备连接频发,可以更快地收发数据,不利之处是设备因连接事件的到来而被频繁的唤醒,会有较多功耗。因此,在实际应用的时候,有时候需要发送数据快一点,这个时候我们可以把连接间隔改小一点,这样发送数据快,但是功耗大,当把数据发完的时候,可把连接间隔改小一点,这样可以降低功耗,达到一个均衡。


解决方案:

        初次尝试:程序中“DEFAULT_DESIRED_MIN_CONN_INTERVAL”“DEFAULT_DESIRED_MAX_CONN_INTERVAL”默认连接间隔范围7.5ms~125ms之间,直接修改"DEFAULT_DESIRED_MAX_CONN_INTERVAL"为800(1s)实际测试连接后整机功耗可以在0.0xmA范围,修改为1600(2s)电流会更小一点。

        存在问题:修改最大连接间隔为1s之后,用OTA升级工具app更新程序时会失败

        可行方案:从机端保持原始连接间隔宏定义(7.5ms~125ms)设定不变,在“SBP_PARAM_UPDATE_EVT”任务中协调连接间隔。

//用户定义用于协商的连接间隔
uint16_t  User_DESIRED_MIN_CONN_INTERVAL=1500;//1000;// 1.25*1000=1.25s 1500=>1.875s
uint16_t  User_DESIRED_MAX_CONN_INTERVAL=1600;//1200;// 1.25*1200=1.5s  1600=>2s
    if(events & SBP_PARAM_UPDATE_EVT)//协商连接间隔
    {
       
// Send connect param update request
      GAPRole_PeripheralConnParamUpdateReq( peripheralConnList.connHandle,    //协商函数
                                                        User_DESIRED_MIN_CONN_INTERVAL,
                                                        User_DESIRED_MAX_CONN_INTERVAL,
                                                         DEFAULT_DESIRED_SLAVE_LATENCY,
                                                         DEFAULT_DESIRED_CONN_TIMEOUT,
                                                         Peripheral_TaskID);
    if(peripheralConnList.connInterval < User_DESIRED_MIN_CONN_INTERVAL){ //开启第一次协商
        retry++;                            //interval_current是回调函数中实际的间隔,传递到此处
        if(retry < 5){                      //第一次协商次数最多为5(可自行配置),中途协商成功则跳出。
tmos_start_task(Peripheral_TaskID, SBP_PARAM_UPDATE_EVT, 1600);//SBP_PARAM_UPDATE_DELAY

        }
    }else {
        retry = 0;
  tmos_stop_task(Peripheral_TaskID, SBP_PARAM_UPDATE_EVT);
    }
        return (events ^ SBP_PARAM_UPDATE_EVT);
    }

测试验证:

        配合CH592的主机例程debug测试验证。实测与主机连接后电流0.0xmA级别。用OTA升级app更新程序不受影响


原文地址:https://blog.csdn.net/u013534357/article/details/142781449

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!