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.

cc2540 省电问题

Other Parts Discussed in Thread: CC2540

大家好,

     在使用simpleBLEPeripheral 项目时,环境是cc2540 和BLE 1.4协议栈, 发现一个问题。当蓝牙连接后,程序就没法进入省电模式Power saving了。就算蓝牙连接断开后,也不会进入省电模式,即是主程序中没法调用osal_pwrmgr_powerconserve()函数。  POWER_SAVING 是定义了的。 在蓝牙没有连接之前,可以正常进入省电模式。

     有什么方法,在蓝牙连接断开后,可以进入省电模式?而为什么在蓝牙断开之后,会进入不了主程序中的osal_pwrmgr_powerconserve()函数,还需要满足什么条件?? 请指教一下,非常谢谢!

  • hi key,

    正常情况下断开连接后是可以进入低功耗模式的。

    你是否修改了代码?增加了一些timer或者是IO操作之类?又或者手动调用了 osal_pwrmgr_powerconserve()函数?如果调用了,请不要手动调用这个函数,这是由OSAL自动去操作完成的。

  • Hi, Yan!非常谢谢你的回复!

    开启了SPI接口 (USART 0 SPI Alt. 2),一个IO口中断,主程序执行一个周期为2ms的事件。

    在断开连接后,使用osal_stop_timerEx停止那个事件。也使用HalUARTSuspend()挂起spi(不知道是不是这样处理?)。

    但是最后没有进入低功耗模式。

    如果主程序没有执行周期为2ms的事件,断开连接就能进入低功耗模式。还有哪里有问题?

    ps:尝试过直接调用 osal_pwrmgr_powerconserve(),会进入长期睡眠状态。

  • Yan,你好,程序中使用了SPI口,在进入睡眠之前,需要挂起SPI。是不是使用这个函数HalUARTSuspend(),或者可以用其他方法,可否直接操作寄存器?

    void HalUARTSuspend( void )
    {
    #if HAL_UART_ISR
    HalUARTSuspendISR();
    #endif
    }

    而唤醒后,也需要唤醒SPI口(调用HalUARTResume?)。但是应用层不知道2540什么时候唤醒的?

    怎么挂起和唤醒SPI呢?