qzc0927 发表于 2025-1-13 10:48

【MCXA156开发板测评】学习笔记04(低功耗评测)

# MCXA156芯片低功耗测评

​        MCXA156芯片是目前广泛应用于嵌入式系统、物联网设备以及智能硬件中的高效能芯片之一。它以低功耗、高性能和高度集成的特性在多个行业中得到了广泛的应用。本篇文章将围绕MCXA156芯片的低功耗性能进行详细测评,分析其在不同工作模式下的表现,以及如何在实际应用中实现功耗优化。

## 一、MCXA156芯片简介

​        MCXA156芯片基于先进的制程工艺,集成了多种核心功能,包括高速处理器、丰富的外设接口以及强大的通信能力。它支持多个低功耗模式,能够根据不同的应用需求自动切换工作状态,最大限度地延长设备的使用时间。该芯片的主要特点之一是其低功耗特性,尤其适用于电池供电的便携设备或长时间运行的嵌入式系统。通过硬件和软件的优化,MCXA156芯片能够在保证高性能的同时,显著降低能耗,从而延长设备的电池使用寿命。

## 二、功耗测评环境与测试方法

​       为了对MCXA156芯片的低功耗性能进行全面评估,我们设计了多个测试场景,分别模拟芯片在不同工作模式下的功耗表现。测试环境包括:

- **操作系统**:目前运行基于裸机环境下进行测试,确保测量结果接近实际应用中的情况。只保留低功耗串口和唤醒定时器;
- **测试工具**:使用万用表测量芯片的功耗,并通过设置不同工作模式来评估不同场景下的功耗差异。
- **工作模式**:包括睡眠模式、深度睡眠模式、断电关机模式以及深度断电关机模式等。

## 三、低功耗测试结果

### **APP_PowerModeSleep(睡眠模式)**

- **描述**:在睡眠模式下,设备会关闭大部分非关键性外设,但CPU保持活跃。该模式用于降低功耗的同时,仍然能够进行轻量的处理和响应外部中断。
- **功耗特点**:功耗相较于正常工作模式降低,但仍然保持一定的处理能力。适用于需要定期唤醒来执行任务的场景。
- **适用场景**:适合于一些传感器设备,设备需要定期采集数据或处理少量信息时。

**函数调用**:`APP_EnterSleepMode()`,进入睡眠模式。

```
static void APP_EnterSleepMode(void)
{
    cmc_power_domain_config_t config;

    config.clock_mode= kCMC_GateCoreClock;
    config.main_domain = kCMC_ActiveOrSleepMode;

    CMC_EnterLowPowerMode(APP_CMC, &config);
}

```



### **APP_PowerModeDeepSleep(深度睡眠模式)**

- **描述**:在深度睡眠模式下,除了最低限度的系统资源(如时钟和中断控制)外,其他大部分硬件外设都会被关闭。CPU的处理能力大大减弱,只有特定的硬件模块(如RTC)会保持活动状态,允许设备在指定时间内唤醒。
- **功耗特点**:功耗显著低于睡眠模式。适用于那些对响应时间要求较低,但需要较长时间待机的设备。
- **适用场景**:长时间待机的无线传感器节点、可穿戴设备等。

**函数调用**:`APP_EnterDeepSleepMode()`,进入深度睡眠模式。

```C
static void APP_EnterDeepSleepMode(void)
{
    cmc_power_domain_config_t config;

    config.clock_mode= kCMC_GateAllSystemClocksEnterLowPowerMode;
    config.main_domain = kCMC_DeepSleepMode;

    CMC_EnterLowPowerMode(APP_CMC, &config);
}
```

###**APP_PowerModePowerDown(省电模式)**

- **描述**:在省电模式下,系统会关闭更多外设和子模块,CPU保持最小的活动以实现最大程度的功耗减少。大多数外设(如通信模块、显示器等)都会被完全关闭,只有极其重要的系统功能(如时钟、RTC等)保持活动,唤醒通常依赖于外部事件或定时器。
- **功耗特点**:功耗大幅降低。适合对响应时间要求非常低的应用,特别是电池供电的设备。
- **适用场景**:电池供电设备的超长待机模式,例如果智能设备、监控系统等。

**函数调用**:`APP_EnterPowerDownMode()`,进入省电模式。

```
static void APP_EnterPowerDownMode(void)
{
    cmc_power_domain_config_t config;

    config.clock_mode= kCMC_GateAllSystemClocksEnterLowPowerMode;
    config.main_domain = kCMC_PowerDownMode;

    CMC_EnterLowPowerMode(APP_CMC, &config);
}
```

###**APP_PowerModeDeepPowerDown(深度省电模式)**

- **描述**:在深度省电模式下,系统将关闭几乎所有外设和子系统,几乎所有模块都停止工作,甚至包括CPU。仅保留极少的功能,如时钟、RTC等,可以保证设备长时间完全不工作,但仍可以周期性唤醒。该模式是最极端的低功耗状态。
- **功耗特点**:功耗最低,适用于长期不需要任何活动的设备。
- **适用场景**:例如远程传感器节点长期待机、需要几个月或几年的电池续航的设备。

**函数调用**:`APP_EnterDeepPowerDownMode()`,进入深度省电模式。

```C
static void APP_EnterDeepPowerDownMode(void)
{
    cmc_power_domain_config_t config;

    config.clock_mode= kCMC_GateAllSystemClocksEnterLowPowerMode;
    config.main_domain = kCMC_DeepPowerDown;

    CMC_EnterLowPowerMode(APP_CMC, &config);
}
```

最后都是调用CMC_EnterLowPowerMode函数:

```
void CMC_EnterLowPowerMode(CMC_Type *base, const cmc_power_domain_config_t *config)
{
    assert(config != NULL);

#if (CMC_PMCTRL_COUNT > 1U)
    /* The WAKE domain must never be configured to a lower power mode compared with main power mode. */
    assert(config->wake_domain <= config->main_domain);
#endif /* (CMC_PMCTRL_COUNT > 1U) */

    if (config->clock_mode < kCMC_GateAllSystemClocksEnterLowPowerMode)
    {
      /* In This case the power domain doesn't need to be placed in low power state. */
      /* Note: unlock the register if this API will be reinvoked later. */
      CMC_SetClockMode(base, config->clock_mode);

      CMC_SetMAINPowerMode(base, kCMC_ActiveOrSleepMode);
#if (CMC_PMCTRL_COUNT > 1U)
      CMC_SetWAKEPowerMode(base, kCMC_ActiveOrSleepMode);
#endif /* (CMC_PMCTRL_COUNT > 1U) */

      /* Before executing WFI instruction read back the last register to
         * ensure all registers writes have completed. */
      (void)base->CKCTRL;
      SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
      __DSB();
      __WFI();
      __ISB();
    }
    else
    {
      /* Note: unlock the register if this API will be reinvoked later. */
      CMC_SetClockMode(base, kCMC_GateAllSystemClocksEnterLowPowerMode);
      CMC_SetMAINPowerMode(base, config->main_domain);
#if (CMC_PMCTRL_COUNT > 1U)
      CMC_SetWAKEPowerMode(base, config->wake_domain);
#endif/* (CMC_PMCTRL_COUNT > 1U) */

      /* Before execute WFI instruction read back the last register to
         * ensure all registers writes have completed. */
#if (CMC_PMCTRL_COUNT > 1U)
      if ((CMC_GetWAKEPowerMode(base) == config->wake_domain) && (CMC_GetMAINPowerMode(base) == config->main_domain))
      {
#endif /* (CMC_PMCTRL_COUNT > 1U) */
            SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
            __DSB();
            __WFI();
            __ISB();
#if (CMC_PMCTRL_COUNT > 1U)
      }
#endif /* (CMC_PMCTRL_COUNT > 1U) */
    }
}
```

## 四、功耗优化策略

为了进一步优化MCXA156芯片的功耗,可以采取以下几种策略:

1. **动态调整工作模式**: 根据实际应用需求,合理切换芯片的工作模式。例如,在设备处于空闲状态时,自动进入睡眠模式或深度睡眠模式,最大限度降低能耗。
2. **合理配置外设**: 外设如通信模块(Wi-Fi、蓝牙)和传感器的功耗通常较大,因此在不需要时应关闭相关外设,避免不必要的能量消耗。
3. **使用低功耗算法**: 在数据处理和通信过程中,采用低功耗算法,例如低功耗蓝牙(BLE)协议进行数据传输,可以显著减少能量消耗。

## 五、总结

​      总体来看,MCXA156芯片在不同工作模式下展现出了优异的低功耗性能,特别是在省电模式和深度睡眠模式下,能够显著降低功耗,延长设备的使用时间。结合其强大的计算能力和丰富的外设支持,MCXA156芯片非常适合用于物联网、智能家居等领域。通过合理的功耗管理策略,可以进一步提高设备的电池续航能力,满足现代嵌入式系统对低功耗和高性能的双重需求。在未来的应用中,随着技术的不断发展,MCXA156芯片的功耗优化空间依然存在。通过硬件和软件的进一步优化,我们相信其低功耗特性将在更多智能设备中得到广泛应用,推动智能硬件向更长时间的续航目标迈进。

具体低功耗测量请查看链接:

https://www.bilibili.com/video/BV1VYcVeQEyu/

Jacktang 发表于 2025-1-18 10:26

<p>MCXA156芯片的功耗运行模式是53&mu;A/MHz<br />
深度睡眠模式:20.28&mu;A,7.4&mu;s唤醒 ( 3.3 V @25 &deg;C)</p>

<p>相对是比较低的水平</p>

qzc0927 发表于 2025-1-20 09:11

Jacktang 发表于 2025-1-18 10:26
MCXA156芯片的功耗运行模式是53&mu;A/MHz
深度睡眠模式:20.28&mu;A,7.4&mu;s唤醒 ( 3.3 V @25 &deg;C)
...

<p>跟ST的差不太多,做低功耗的话,硬件设计也很重要</p>
页: [1]
查看完整版本: 【MCXA156开发板测评】学习笔记04(低功耗评测)