成长 进步 分享

Great works are performed not by strength, but by perseverance

BLE低功耗蓝牙低功耗模式简介

背景

低功耗蓝牙(BLE)设备,如心率监视器等,通常是电池供电运行。长时间的运行是低功耗蓝牙设备的关键要求。本文简单介绍关于低功率蓝牙的几种低功耗的模式,涉及具体操作和详细说明可以查询文章最后的参考资料。

软硬件平台

软硬件平台均采用Cypress提供方案。硬件采用的是 PSoC 4 Bluetooth Low Energy (BLE) 4.1 Compliant Pioneer Kit,软件采用的是 PSoC Creator Integrated Design Environment (IDE)。详情可以点击链接查看。

低-漏功耗模式

PSoC 4 BLE 提供了下面各种功耗模式。请注意,这是PSoC 4 BLE 器件的功耗模式,它们与低功耗蓝牙子系统(BLESS)的功耗模式不同。

  • 活动模式:它是器件的主要工作模式。在该模式下,所有外设都可用。
  • 睡眠模式:在该模式下,CPU 处于睡眠模式,SRAM 数据保持不变,并且所有外设均可用。任何中断都能唤醒CPU,并使系统返回到活动模式。
  • 深度睡眠模式:在该模式下,高频率时钟(IMO)和所有高速外设都被关闭。而低频率时钟(32 kHz ILO 和WCO)和慢速外设均可用。通过低速、异步或低功耗模拟外设的中断,可唤醒器件。在该模式下,电流消耗为1.3 μA。
  • 休眠模式:该功耗模式提供了最佳电流消耗(150 nA),但仍能保持SRAM 数据以及响应由低功耗比较器或GPIO 生成的中断唤醒。
  • 停止模式:该功耗模式保留了GPIO 的状态。唤醒事件可以通过固定的WAKEUP 引脚触发。在该模式下,仅消耗了60 nA 的电流。

在电池供电的BLE 系统中,您可以结合使用睡眠、深度睡眠、休眠和停止模式,以达到最佳的系统电源,使电池寿命更长。这些可通过简单的API 自动处理。下表总结了这些模式、它们的电流大小、活动组件、唤醒源以及将系统置于低功耗模式之一的可用API。

System Power ModeCurrent ConsumptionCode ExecutionRAM AvailableDigital Peripherals AvailableAnalog Peripherals AvailableClock Sources AvailableWake up SourcesWake up TimeWake up StateAPI
Active850 µA +
260 µA per
MHz
YesONAllAllAll————————
Sleep850 µA +
60 µA per
MHz
NoRetentionAllAllAllAny
interrupt
source
0ActiveCySysPmSleep()
DeepSleep1.3 µANoRetentionWDT,
LCD,
SCB(I2C/SPI
only),
BLESS
LP Comparator,
CTBm,
POR,
BOD
WCO,
ILO
LP
Comparator,
GPIO,
CTBm,
BLESS,
WDT, SCB
25 µsActiveCySysPmDeepSleep()
Hibernate150 nANoRetentionNoLP Comparator,
POR, BOD
NoneLP
Comparator,
GPIO
2 msChip
Reset
CySysPmHibernate()
Stop60 nANoOFFNoNoNoneWAKEUP,
XRES pins
2 msChip
Reset
CySysPmStop()

Active、Sleep和Deep-Sleep是ARM定义的标准电源模式,由ARM cpu支持。Hibernate/Stop是更低功耗的模式,从固件进入,就像 深度睡眠 模式一样,但在唤醒CPU(和所有外围设备)时,会进行完全重置。

Power Management API在CyPm.c和CyPm.h文件中提供。在这里以进入停止模式的API为例, 在设备进入低功耗模式之前,应该清除所有挂起的中断,即使它们被屏蔽。 然后调用CySysPmStop(),系统就会进入停止模式。

case STATE_GO_TO_SLEEP_MODE:
   UART_UartPutString("Entering sleep mode\n");
                                                                                
   UART_tx_SetDriveMode(UART_tx_DM_ALG_HIZ);
   UART_rx_SetDriveMode(UART_rx_DM_ALG_HIZ);

   CySysPmSetWakeupPolarity(CY_PM_STOP_WAKEUP_ACTIVE_HIGH); // the trigger condition depends on the circuit, CY_PM_STOP_WAKEUP_ACTIVE_HIGH or CY_PM_STOP_WAKEUP_ACTIVE_LOW
   CySysPmStop(); /* PSoC will reset when exiting stop mode. */

   currentState = STATE_WAITING_PKTS;
   break;

从上面的表格中,我们可以看到不同模式的不同唤醒源和唤醒方式等,从停止模式唤醒需要通过XRES引脚。 CySysPmStop() 函数会 冻结IO单元,从停止模式唤醒后IO单元保持冻结状态,直到重新解冻。

if(CySysPmGetResetReason() == CY_PM_RESET_REASON_WAKEUP_STOP)                                               /* Wake from stop */
{
    /* PSoC 4's IOs must be unfrozen after STOP mode */
    CySysPmUnfreezeIo();
}

总结

本文对BLE低功耗蓝牙的低功耗模式的概念等做了简单的介绍,不同的低功耗模式的唤醒方式各不相同,之后用到其他低功耗模式,仔细阅读 CyPm.c和CyPm.h文件中提供的API说明会有较大的帮助。

参考资料

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注