关于 Intel® Quark MCU D2000 的 c-states 和 SoC Watch 的一瞥
今天,我们将浏览 ISSM 中内置的 Power_Profiler 代码示例,并查看 D2000 的 C 状态。
访问新的 Intel® IoT 开发者套件,这是一个完整的硬件和软件解决方案,允许开发人员使用 Intel® Galileo 和 Intel® Edison 开发板创建令人兴奋的新解决方案。 访问 Intel® 开发者专区 (IoT)。
为了更好地理解本文和示例,建议您在使用英特尔® System Studio for Microcontroller 构建示例代码方面具有经验。 这里是您可以先查看的 教程链接。 您可以访问 Mouser Electronics 或其他全球硬件分销商的在线商店购买 D2000 开发板,并开始使用此默认 IDE 软件。 即使没有任何硬件,您仍然可以通过下载开发者 IDE 软件 Intel System Studio for Microcontroller 来浏览 Quart D2000 BSP,其中包含 D2000、Quark SE 的 BSP、编译器、openOCD 调试器等。 这是 下载链接。
今天,我们将浏览 ISSM 中内置的 <Power_Profiler> 代码示例并查看 D2000 的 C 状态。 首先,下图向您展示了如何找到此代码示例。 通过在 Intel System Studio for Microcontroller 中单击一个新项目(为了书写方便,将在下面的上下文中用 ISSM Intel System Studio for Microcontroller 替换),您可以轻松地使用新项目对话框窗口来创建此 <Power Profiler> 示例项目。 并且您应该可以毫无问题地使用 ISSM 2017 更新 1 构建此项目并将其烧录到 D2000 开发板上。
<Power_Profiler> 中显示的 C 状态
<Power_Profiler> 充当一个示例,用于执行测试以迭代进入 power_states.c 中定义的不同的低功耗(睡眠)状态。 RTC(实时时钟)中断事件也被设置为每 500 毫秒(或更短时间)通过 LED 闪烁信号唤醒系统,以退出这些睡眠状态。
根据 ISSM 2017 更新 1 中的 Quark 的 BSP QSMI 1.1,D2000 的电源状态可以分为以下几类。
- C0(活动), 处理器以 32Mhz 运行。 正常速度。 您可以将运行速度降低到最低 4 MHz,这会消耗更低的功耗。
- C1(暂停), 使处理器进入睡眠模式,消耗的功耗低于 C0。 所有类型的中断都可以唤醒系统。
- C2(睡眠), 它不仅使 D2000 进入睡眠模式,还关闭了大多数外设(SPI、UART、I2C、PWM)。 少数有限的中断(RTC、GPIO 和比较器)可以唤醒系统。
- C2LP(深度睡眠), 它关闭所有外设并关闭 ADC。 只有 GPIO,设置比较器可以唤醒系统。 恢复到 C0 活动状态需要更长的延迟时间。
您可以通过以下代码片段找到关于在 power_states.c 中关闭了哪些组件或被置于低功耗模式的详细信息。
//main.c
#define ENTER_C1() power_cpu_halt()
#define ENTER_C2() power_soc_sleep()
#define ENTER_C2LP() power_soc_deep_sleep()
D2000 支持 4 种系统根时钟频率 4/8/16/32Mhz。 并且有 8 个时钟分频器允许您尝试降低频率至 ~128 KHz 以优化功耗。 此外,它还允许以最低 32.768 KHz 的工作频率运行整个 SoC,以实现超低功耗。 您可以使用以下代码片段进行频率切换。
clk_sys_set_mode(CLK_SYS_CRYSTAL_OSC, CLK_SYS_DIV_8);//4Mhz
clk_sys_set_mode(CLK_SYS_CRYSTAL_OSC, CLK_SYS_DIV_4);//8Mhz
clk_sys_set_mode(CLK_SYS_CRYSTAL_OSC, CLK_SYS_DIV_2);//16Mhz
clk_sys_set_mode(CLK_SYS_CRYSTAL_OSC, CLK_SYS_DIV_1);//32Mhz
clk_sys_set_mode(CLK_SYS_RTC_OSC, CLK_SYS_DIV_1);//32.768khz
问题:SOC_WATCH_LOG_EVENT 宏的用途是什么?
您可能对 Profiler 部分在哪里感到好奇。(我也是)如果您熟悉 Intel System Studio,您可能会注意到一个名为 SoCWatch 的工具,用于收集客户端和服务器端的 IA 平台的电源相关指标。 恰好,这个“SoC Watch”关键字出现在此代码示例的 RTC 中断回调函数中; SOC_WATCH_LOG_EVENT
宏用于记录事件。 检查下面的代码。
void rtc_example_callback(void)
{
/* Log the interrupt event */
SOC_WATCH_LOG_EVENT(SOCW_EVENT_INTERRUPT, QM_IRQ_RTC_0_VECTOR);
一旦您查看 soc_watch_log_app_event
,您应该会发现事件日志存储在一个数据结构 <sw_profiling_event_buffer> 中。 我们如何使用它进行分析? 这个问题现在仍然存在。 估计我们需要等待一段时间才能看到未来发布的电源分析器工具。
参考
D2000 文档中的 D2000 数据手册