管理 Azure Sphere 设备的关机状态

高级 Azure Sphere 应用程序可以使用电源管理 API 将设备置于“关机”状态。 “断电”状态是设备除了完全关闭之外可能处于的最低可能电源状态。 可以通过以下两个事件之一来唤醒设备:

  • 触发 WAKEUP 引脚的输入信号的到达。
  • 指定时间量的段落。

若要使用此功能,必须:

  1. 配置硬件。
  2. 应用程序清单中声明 PowerControls 功能的 ForcePowerDown 值。
  3. 使用电源管理 API 中的PowerManagement_ForceSystemPowerDown

关机状态

“关机”状态具有以下特征:

  • 除了实时时钟 (RTC) 外,所有内容都已关闭。 这意味着所有连接、RAM、闪存、CPU 核心等都已关闭。
  • 没有状态保留。 从“关机”唤醒相当于冷启动。
  • 当实时时钟闹钟触发 (基于时间的唤醒) 或将 WAKEUP 引脚拉低 (基于事件的唤醒) (以先到者为准)时,会发生从电源关闭唤醒。

注意

DAA (客户) 证书将永久存储。 因此,在正常 24 小时更新之间每次冷启动或关机后,设备不会连接到 AS3 以获取新证书。 这可以减少功耗和连接到云所需的时间。

MT3620 细节

MT3620 硬件说明中提供了 MediaTek MT3620 关机注意事项。

强制关机和更新

警告

未能遵循本部分中的指南可能会导致设备无法获取应用程序或 OS 更新,并需要恢复。 在使用 ForcePowerDown 之前,请仔细阅读。

由于 ForcePowerDown 和 ForceReboot 都允许应用程序随时关闭设备电源,因此该应用程序负责确保设备在使用 ForcePowerDown 或 ForceReboot 时仍能够定期检查更新。 为了更轻松地在此方案中检查更新,我们引入了与更新相关的系统事件通知,为应用程序提供有关更新过程的信息,以便你的应用可以就何时关闭设备做出明智的决定。 相关的可用系统事件通知包括:

  • SysEvent_Events_NoUpdateAvailable:更新检查已完成,没有可用的 OS 或应用程序更新。
  • SysEvent_Events_UpdateStarted:操作系统或应用程序更新已开始下载。 当更新已完全下载并准备好安装 时,此 事件后将SysEvent_Events_UpdateReadyForInstall事件。 如果没有可用的更新,将发送 SysEvent_Events_NoUpdateAvailable 而不是此事件。
  • SysEvent_Events_UpdateReadyForInstall:更新已完成下载,并准备好在重新启动时应用。

使用 ForcePowerDown 的应用程序需要注意设备的更新状态。 使用 ForcePowerDown 的应用程序应始终注册这些事件,并注意这些事件,以确保应用不会导致更新无限期推迟。

我们提供了一个 示例应用程序 ,演示如何将更新检查正确生成到使用 ForcePowerDown 的应用程序。 强烈建议在使用 ForcePowerDown 开发应用时从此示例开始。

应用程序终止

发出关机请求后,SIGTERM 信号将发送到你的应用。 如果应用处理信号,则最多有 2 秒的时间执行清理工作。 否则,应用将立即终止。 有关详细信息,包括如何正确处理信号,请参阅 更新的应用终止

示例应用程序

关闭电源示例应用程序演示了如何正确利用 ForcePowerDown 来降低功耗,同时仍确保设备会定期保持清醒状态,以检查 OS 和应用更新。

此示例将 LED 闪烁为红色,表示应用在设备唤醒时可能需要执行的工作或“业务逻辑”,然后在指定的时间内关闭设备。 每次 N 次关机/唤醒周期,应用都会使设备保持唤醒时间更长,以检查更新,而不是在本例中,在完成业务逻辑 (闪烁的红色 LED 后立即关闭电源,在这种情况下) 。 为确保更新在关机前完成,示例应用使用三个系统事件通知, (SysEvent_Events_NoUpdateAvailable、SysEvent_Events_UpdateStarted和SysEvent_Events_UpdateReadyForInstall) 通知应用更新检查/下载状态。 示例应用还演示如何测量 RDB 的当前消耗量,以验证设备是否进入关机状态。