Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/dsyx/docs.silabs.com_zh/llms.txt

Use this file to discover all available pages before exploring further.

在电池供电的微控制器应用中,节能至关重要。通过减少电流消耗,可以显著延长应用的有效电池寿命。Wireless Gecko(EFR32™)产品系列支持五种 Energy Mode,Silicon Labs Connect 支持其中三种:EM0(正常运行)EM1(睡眠)EM2(深度睡眠)。应用上述节能技术后,基于 Silicon Labs Connect 的应用程序的睡眠模式电流消耗可降低至 2-4 µA

Energy Mode 概览

Energy Mode 0(EM0)

正常运行模式。CPU 从 Flash 或 RAM 中执行指令,所有外设均可用。这是默认模式。

Energy Mode 1(EM1)

睡眠模式。CPU 时钟被禁用,但所有外设、RAM 和 Flash 仍可用。可借助 PRS 和 DMA 自主执行操作。无线电仍可在 EM1 中接收数据包。

Energy Mode 2(EM2)

深度睡眠模式。无高频振荡器运行,仅异步和低频外设可用。无线电关闭,节点不会接收数据包。 能效最高。

EM3 / EM4(不支持)

Stop Mode 和 Hibernate Mode 对应更深的低功耗状态,Silicon Labs Connect 不支持这两种模式。

Power Manager 组件

Power Manager 是 platform-level 软件模块,用于管理系统的 Energy Mode。对于示例应用,默认情况下启用 Power Manager 组件。Silicon Labs 建议使用 Power Manager 来控制应用程序的 Energy Mode。
// 添加 Energy Mode 要求(防止系统进入低于指定 EM 的模式)
void sl_power_manager_add_em_requirement(sl_power_manager_em_t em);

// 移除 Energy Mode 要求(允许系统进入更低功耗的模式)
void sl_power_manager_remove_em_requirement(sl_power_manager_em_t em);
应用程序和组件均可通过 Power Manager API 控制最低允许的 Energy Mode。例如,某操作需要保持在 EM1 时,可添加 EM1 要求;操作完成后移除该要求,使系统能够进入 EM2 深度睡眠。

向 Sleepy End Device 发送数据

当 Sleepy End Device 处于 EM2 深度睡眠时,MCU 停止运行且无线电关闭,无法从其他设备接收数据。解决方案是在设备唤醒时主动检查是否有待收消息。
Connect 支持两种向 Sleepy End Device 发送数据的机制:

Indirect Queue(间接队列)

Indirect Queue 是 Parent Support 组件的一部分,在星型(或扩展星型)拓扑的 Coordinator(或 Range Extender)中自动启用。 工作流程:
1

Coordinator 缓存数据

Coordinator 将发往 Sleepy End Device 的数据存入 Indirect Queue,等待设备来轮询。
2

Sleepy End Device 发送轮询请求

Sleepy End Device(需安装 Poll 组件)向 Coordinator 发送数据请求命令,Coordinator 以 ACK 响应。
3

检查 Frame Pending bit

若 Coordinator 有待发数据,则在 ACK 的 Frame Control Field 中设置 Frame Pending bit;否则不设置。Sleepy End Device 据此决定是否等待接收数据或返回睡眠。
4

接收数据

若 Frame Pending bit 置位,Sleepy End Device 打开无线电接收来自 Coordinator 的数据包,并通过回调处理:
void emberAfIncomingMessageCallback(EmberIncomingMessage *message)
通过单次轮询设备只能检索一条消息。 若需接收所有待决消息,必须重复轮询直到未收到更多消息为止。

Coordinator / Range Extender 配置

Parent Support 组件中可配置两个 Indirect Queue 参数:
参数说明
Indirect Queue Size队列中可同时存放的最大数据包数量。队列满时新消息无法入队,需等待消息被发送或超时后腾出空间。
Indirect Transmission Timeout消息在队列中的最大保留时间(毫秒)。超时的消息将被 Coordinator 丢弃。

Sleepy End Device 配置(Poll 组件)

在 Sleepy End Device 上安装 Poll 组件,以从 Coordinator 接收缓存消息。Poll 组件支持两种轮询间隔:
轮询类型用途
Short Poll(短轮询)用于从 Coordinator 主动获取待发数据包
Long Poll(长轮询)用于 keep-alive 目的,确保设备保留在 Coordinator 的子表中
// 在短轮询和长轮询之间切换
void emberAfPluginPollEnableShortPolling(bool enable);

// 手动发送数据请求命令(轮询一次)
EmberStatus emberPollForData(void);
典型用法:Sleepy End Device 发出期望响应的数据包后,切换到 Short Poll 模式等待响应,收到预期响应后切换回 Long Poll 模式。

Mailbox(邮箱)

Mailbox 是在应用层实现的、更高级别的消息缓存机制,底层使用协议栈的 Indirect Queue 特性。相比 Indirect Queue,Mailbox 提供更长的超时时间(默认 1 小时,可设为数天)。 Mailbox 由两部分组成:
可提交消息和检查收件箱,结果均通过回调传递:
// 检查收件箱
emberAfPluginMailboxClientCheckInbox();
// 收件箱检查完成回调
emberAfPluginMailboxClientCheckInboxCallback();

// 提交消息
emberAfPluginMailboxClientMessageSubmit();
// 消息提交完成回调
emberAfPluginMailboxClientMessageSubmitCallback();
// 消息投递成功回调
emberAfPluginMailboxClientMessageDeliveredCallback();
当 Mailbox Client 握手超时设置为 250ms 时,短轮询间隔默认值为 4 个四分之一秒(1s),可能导致 Client 在等待轮询待决消息期间超时。建议将握手超时设置为高于短轮询间隔的值。
Mailbox 使用 Connect 网络层实现的端点,MAC Mode 不支持 Mailbox。但 Mailbox 可在 Connect Direct Mode 下工作(应用程序应自行实现睡眠逻辑)。Mailbox 的主要优点是:服务端会在消息成功投递因错误无法投递时通知提交消息的客户端。
在 Mailbox Server 和 Client 组件中均可配置端点(Endpoint),两端必须匹配。服务端还可配置最大数据包数量和超时时间,均可通过 Universal Configurator 进行设置。

其他节能措施

SPI Flash 深度断电

所有 Silicon Labs EFR32 无线板均包含 SPI Flash。尽管这些闪存在待机状态下仅消耗 8-10 µA,但持续消耗会缩短电池寿命。通过 MX25 Flash Shutdown 组件,固件会将外部 SPI Flash 置于 deep power down 模式(通过发送 SPI 命令),这是 Silicon Labs 无线电板的默认配置。

禁用网络状态 LED

部分 Connect 示例默认使用 LED 显示网络栈状态(网络启动时 LED 亮起),这会持续消耗额外电流:
void emberAfTickCallback(void)
{
    if (emberStackIsUp()) {
        sl_led_turn_on(&sl_led_led0);   // 移除此行以节省 LED 电流
    } else {
        sl_led_turn_off(&sl_led_led0);
    }
}
为节能,建议移除 sl_led_turn_on() 调用或将其改为 sl_led_turn_off()

节能最佳实践

1

最大化深度睡眠时间

目标是将尽可能多的时间花在 EM2(Deep Sleep Mode),仅在必要时短暂唤醒处理任务。
2

禁用未使用的外设

禁用所有不必要的特性和未使用的外设,避免不必要的静态电流消耗。
3

合理配置轮询间隔

根据应用场景调整 Short Poll 和 Long Poll 间隔,在响应延迟和功耗之间取得平衡。
4

启用 SPI Flash 深度断电

确保安装 MX25 Flash Shutdown 组件,将外部 SPI Flash 置于 deep power down 模式。
5

使用 Power Manager 管理 Energy Mode

通过 sl_power_manager_add_em_requirement() / sl_power_manager_remove_em_requirement() 精确控制系统允许进入的最低能量模式。
应用以上技术后,基于 Silicon Labs Connect 的应用程序的睡眠模式电流消耗可降低至 2-4 µA。有关低功耗网络构建的更多详情,请参阅 AN1252: Building Low Power Networks with the Silicon Labs Connect Stack v3.x

Build docs developers (and LLMs) love