Thread 中讨论的其他器件:CC3351、SysConfig、 ENERGYTRACE
工具/软件:
您好 TI 社区、
我正在 CC3351 上开发一种低功耗应用、要求器件大部分时间都处于待机模式。 该系统包括:
- 具有 ADC 和电容式触控任务的传感器控制器
- CC3351 配置为 MQTT 客户端
- 基于 FreeRTOS 的应用
问题描述: 目前、我正在尝试使用简化的测试用例验证待机模式运行(禁用传感器控制器和 MQTT 功能)。 但是、尽管实现了以下主循环、器件似乎仍保持运行模式:
while (1) {
vTaskDelay(pdMS_TO_TICKS(500));
switch(state) {
case STATE_INIT:
state = STATE_SLEEPING_WITH_TOUCH;
break;
case STATE_SLEEPING_WITH_TOUCH:
if (++debugCounter >= 20) {
debugCounter = 0;
// Additional debug code here
}
break;
}
}
所采取的调试步骤:
- 功率限制验证:
void debug_constraints() {
uint_fast32_t constraints = Power_getConstraintMask();
LOG_INFO("Current constraints: 0x%08X", constraints);
if (constraints & (1 << PowerCC26XX_DISALLOW_STANDBY)) {
LOG_INFO("STANDBY is BLOCKED");
}
}
输出: [14:28:06.458] [MAIN::INFO] Current constraints: 0x00000000
- 待机延迟检查:
uint32_t standbyLatency = Power_getTransitionLatency(PowerCC26XX_STANDBY, Power_TOTAL);
LOG_INFO("Standby latency: %d us", standbyLatency);
输出: [14:30:08.027] [MAIN::INFO] Standby latency: 1000 us
- 时钟源验证:
LOG_INFO("---------------------------Testing LF and HF quartz-----------------------------------");
OSCHF_TurnOnXosc();
// Ensure switch to XOSC
while (!OSCHF_AttemptToSwitchToXosc()) {
vTaskDelay(pdMS_TO_TICKS(10));
}
LOG_INFO("HF crystal real amplitude : %d mv", OSCHF_DebugGetCrystalAmplitude());
LOG_INFO("HF crystal expected amplitude : %d mv", OSCHF_DebugGetExpectedAverageCrystalAmplitude());
uint32_t hf_source = OSCClockSourceGet(OSC_SRC_CLK_HF);
if (hf_source == OSC_XOSC_HF) {
LOG_INFO("HF crystal source: XOSC");
} else if (hf_source == OSC_RCOSC_HF) {
LOG_INFO("HF crystal source: RC clock");
} else {
LOG_ERROR("HF crystal source: Invalid configuration (value: %d)", hf_source);
}
uint32_t lf_source = OSCClockSourceGet(OSC_SRC_CLK_LF);
if (lf_source == OSC_XOSC_LF) {
LOG_INFO("LF crystal source: XOSC");
} else if (lf_source == OSC_RCOSC_LF) {
LOG_INFO("LF crystal source: RC clock");
} else {
LOG_ERROR("LF crystal source: Invalid configuration (value: %d)", lf_source);
}
LOG_INFO("----------------------------------------------------------------------------------------");
时钟验证输出:
[14:37:04.538] [MAIN::INFO] ---------------------------Testing LF and HF quartz-----------------------------------
[14:37:04.618] [MAIN::INFO] HF crystal real amplitude : 495 mv
[14:37:04.618] [MAIN::INFO] HF crystal expected amplitude : 465 mv
[14:37:04.618] [MAIN::INFO] HF crystal source: XOSC
[14:37:04.618] [MAIN::INFO] LF crystal source: XOSC
[14:37:04.618] [MAIN::INFO] ----------------------------------------------------------------------------------------
观察结果:
- 无功耗限制处于活动状态 (0x00000000)
- HF 和 LF 时钟都成功在 XOSC 上运行
- 晶体振幅在预期范围内
- 电源策略在 SysConfig 中使用适当的设置进行配置
- 遗憾的是、EnergyTrace++在当前 CCS 版本中不起作用、阻止了直接功耗模式验证
问题:
- 除了限制清除和时钟配置之外、是否还有其他要求可以实现自动待机转换?
- FreeRTOS 任务调度是否会阻止待机进入(尽管有 500ms 的延迟)?
- 是否有建议的方法来验证在没有 EnergyTrace++的情况下进入待机模式?
任何见解都将非常感谢。 谢谢!