打印
[蓝牙芯片]

主从一体的休眠后电流异常问题

[复制链接]
1034|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
西城123|  楼主 | 2024-5-9 11:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用了peripheral和multiCentral例程修改的。休眠后可能会出现三种电流,100ua[正常的],2ma,20ma。不知道是代码哪里有问题,代码如下
///////////主机
     //断开连接
    uint8_t connItem; uint8_t bStatus;

    for(connItem = 0; connItem < CENTRAL_MAX_CONNECTION; connItem++)
    {
         if(centralConnList[connItem].state == BLE_STATE_CONNECTED)
        {
            GAPRole_TerminateLink(centralConnList[connItem].connHandle);
        }
    }
    //关闭扫描
    bStatus=GAPRole_CentralCancelDiscovery();

    tmos_stop_task(centralTaskId, START_READ_RSSI_EVT);
    tmos_stop_task(centralTaskId, SBP_PERIODIC_EVT);//停止 定时数据检测


     tmos_stop_task(centralTaskId, ESTABLISH_LINK_TIMEOUT_EVT);//连接超时


///////////从机     
    if(peripheralConnList.connHandle != GAP_CONNHANDLE_INIT)
    {
        GAPRole_TerminateLink(peripheralConnList.connHandle);//断连

    }
    //关闭广播
    uint8 advertising_enable = FALSE;
    GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8), &advertising_enable);//关闭广播


/////

tmos_stop_task(halTaskID, HAL_REG_INIT_EVENT);  //默认2分钟一次的校准先暂停
tmos_stop_task( halTaskID, HAL_TEST_EVENT);//停止 任务

HAL_Sleep_UnInit();//关闭RTC唤醒中断


PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_GPIO_WAKE, Long_Delay);//允许GPIO唤醒设备

//进入休眠
LowPower_Sleep(RB_PWR_RAM30K | RB_PWR_RAM2K); //只保留30+2K SRAM 供电  睡眠模式



========================

void HAL_Sleep_UnInit(void)
{
#if(defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)
    sys_safe_access_enable();
    R8_SLP_WAKE_CTRL &= ~RB_SLP_RTC_WAKE; // RTC不唤醒
    sys_safe_access_disable();              //
    sys_safe_access_enable();
    R8_RTC_MODE_CTRL &= ~ RB_RTC_TRIG_EN;  // 触发模式
    sys_safe_access_disable();              //
    PFIC_DisableIRQ(RTC_IRQn);      //关闭中断
#endif
}

使用特权

评论回复
沙发
呐咯密密| | 2024-5-13 13:22 | 只看该作者
大电流是没成功进入低功耗吧

使用特权

评论回复
板凳
LEDyyds| | 2024-5-14 13:16 | 只看该作者
我觉得是没进入低功耗造成电流异常高

使用特权

评论回复
地板
西城123|  楼主 | 2024-5-15 09:21 | 只看该作者
LEDyyds 发表于 2024-5-14 13:16
我觉得是没进入低功耗造成电流异常高

应该是进低功耗了 因为能正常唤醒,感觉像是蓝牙的什么功能没有关闭

使用特权

评论回复
5
西城123|  楼主 | 2024-5-15 09:22 | 只看该作者
LEDyyds 发表于 2024-5-14 13:16
我觉得是没进入低功耗造成电流异常高

应该是进低功耗了 因为能正常唤醒,感觉像是蓝牙的什么功能没有关闭。单从机功能或者单主机功能是也是正常的。

使用特权

评论回复
6
西城123|  楼主 | 2024-5-16 14:16 | 只看该作者
经测试,2mA电流是MCU没有进入低功耗导致,20ma电流是因为别的模块没有正常关闭导致。

使用特权

评论回复
7
JayWell| | 2024-5-16 14:34 | 只看该作者
不清楚低功耗测试的工具是怎样的,如果用的是精度高一些的工具,CH58x、CH59x的sleep休眠的低功耗在2uA左右,CH57x的在6uA左右。
休眠后100uA可能是某个IO漏电导致低电流较大,常见的是USB/串口信号线接在其他设备上导致漏电。如果100uA是指平均电流,在200ms左右唤醒工作一次,那确实是正常的平均电流。
2mA的电流,可能是sleep休眠异常,进入了idle等级的休眠。常见原因是GPIO唤醒的引脚,在休眠前没有满足唤醒要求,MCU无法睡下去。比如说GPIO配置为下降沿唤醒,那么休眠前该GPIO要拉高,如果休眠前已经是低电平了,产生不了下降沿,MCU睡下去就无法唤醒了。
20mA的电流如果是平均电流,应该是完全没休眠下去。一直开着无线接收扫描会有15mA左右的电流。可以在代码中加打印,看是不是主机模式没有成功关闭导致休眠异常,或是sleep休眠的接口就没执行到。

使用特权

评论回复
8
西城123|  楼主 | 2024-5-27 09:19 | 只看该作者
JayWell 发表于 2024-5-16 14:34
不清楚低功耗测试的工具是怎样的,如果用的是精度高一些的工具,CH58x、CH59x的sleep休眠的低功耗在2uA左右 ...

100uA是主板上其他多个外设模块[加速度计芯片,ldo静态电流,读卡芯片休眠电流等]休眠累计的电流。2mA是因为程序处理问题导致没有进入休眠。20ma电流是读卡芯片没有正常进入休眠的工作电流和主控没有关系

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

18

帖子

0

粉丝