こんにちは、
私はFRDM-MCXA266ボードにおける、ディープパワーダウンモードからのWUUウェイクアップ動作について調査しています。
環境:
- MCU:MCXA266
- 委員会:FRDM-MCXA266
- SDK例プロジェクト:frdmmcxa266_power_mode_switch_ll_mcxa
- SDKバージョン:26.6.000
- 開発環境:MCUXpressoIDE_25.6.136
BOARD_InitHardware() が呼び出される前にリセットとウェイクアップの状態を読み取るために、main() の冒頭付近に以下のコードを追加しました。
/*******************************************************************************
* Variables
******************************************************************************/
char *const g_modeNameArray[] = APP_POWER_MODE_NAME;
char *const g_modeDescArray[] = APP_POWER_MODE_DESC;
uint32_t resetCount;
uint32_t resetStatus;
uint32_t resetStickyStatus;
uint32_t wakeupResource;
uint32_t wuuWakeupPinsFlag;
/*******************************************************************************
* Code
******************************************************************************/
int main(void)
{
uint32_t freq;
app_power_mode_t targetPowerMode;
bool needSetWakeup = false;
// --- START ADDED CODE ---
resetStatus = CMC_GetSystemResetStatus(CMC);
resetStickyStatus = CMC_GetStickySystemResetStatus(CMC);
CMC_ClearStickySystemResetStatus(CMC, resetStickyStatus);
wakeupResource = CMC_GetWakeupSource(CMC);
wuuWakeupPinsFlag = WUU_GetExternalWakeUpPinsFlag(WUU0);
WUU_ClearExternalWakeUpPinsFlag(WUU0, wuuWakeupPinsFlag);
// --- END ADDED CODE ---
BOARD_InitHardware();
// --- START ADDED CODE ---
DbgConsole_Printf("CMC_GetSystemResetStatus(CMC) = 0x%x\r\n", resetStatus);
DbgConsole_Printf("CMC_GetStickySystemResetStatus(CMC) = 0x%x\r\n", resetStickyStatus);
DbgConsole_Printf("CMC_GetWakeupSource(CMC) = 0x%x\r\n", wakeupResource);
DbgConsole_Printf("WUU_GetExternalWakeUpPinsFlag(WUU0) = 0x%x\r\n", wuuWakeupPinsFlag);
// --- END ADDED CODE ---
APP_SetVBATConfiguration();
APP_SetSPCConfiguration();
APP_InitWaketimer();関連する出力全体は以下のとおりです。
「`」
通常起動。
######################### ## Power Mode Switch Demo ## #########################
コアクロック = 240000000Hz
電源モード:アクティブ
希望する操作を選択してください
Aを押してアクティブモードに入ります
Bを押してスリープモードに入ります
Cキーを押してディープスリープモードに入ります
Dキーを押して電源オフモードに入ります
Eキーを押してDeepPowerDownモードに入ります
電源モード選択を待っています...
ディープパワーダウン:VDD_CORE電圧ドメイン全体がパワーゲートされます。
起動ソースを選択してください:
Aボタンを押して、ウェイクアップソースとしてタイマーを選択してください。
Bボタンを押して、ウェイクアップボタンをウェイクアップソースとして選択します。
起動ソースの選択を待っています...
ウェイクアップボタンがウェイクアップソースとして選択されました。
起動するにはSW2を押してください。
電源ドメインを分離します:VDD_USB。
CMC_GetSystemResetStatus(CMC) = 0x4010
CMC_GetStickySystemResetStatus(CMC) = 0x4011
CMC_GetWakeupSource(CMC) = 0x0
WUU_GetExternalWakeUpPinsFlag(WUU0) = 0x0
通常起動。
「`」
初回起動時に、以下の値が表示されました。
CMC_GetSystemResetStatus(CMC) = 0x110
CMC_GetStickySystemResetStatus(CMC) = 0x110
CMC_GetWakeupSource(CMC) = 0x0
WUU_GetExternalWakeUpPinsFlag(WUU0) = 0x0
次に、ディープパワーダウンモードを選択し、ウェイクアップソースとしてウェイクアップボタンを選択し、SW2を押しました。
MCUは正常に起動し、アプリケーションは再起動されましたが、以下の数値が印刷されました。
CMC_GetSystemResetStatus(CMC) = 0x4010
CMC_GetStickySystemResetStatus(CMC) = 0x4011
CMC_GetWakeupSource(CMC) = 0x0
WUU_GetExternalWakeUpPinsFlag(WUU0) = 0x0
CMCリセットステータスに関する私の解釈は以下のとおりです。
- 0x00004010:ソフトウェアリセット + ウォームリセット
- 0x00004011:ソフトウェアリセット + ウォームリセット + ディープダウンウェイクアップリセット
この解釈が正しければ、固定状態はディープダウンウェイクアップリセットが最初に行われ、その後ソフトウェアウォームリセットが行われたことを示しています。
アプリケーションの起動コード、system_MCXA266.cを確認しました。例のソースは見つかりませんでしたが、NVIC_SystemReset()、SYSRESETREQ、またはSCB->AIRCRの書き込みは見つかりませんでした。
また、保持されたNOLOAD変数を使用して、SystemInitHook()にカウンターを追加しました。SystemInitHook()はウェイクアップ後に一度だけ実行されたため、SystemInit()後にソフトウェアリセットされた証拠は見つかりませんでした。
私の質問は以下のとおりです。
私の現在のCMCリセット状態の解釈は以下の通りですが、ビットの定義を誤解していたら訂正してください。
英語は母国語ではないので、説明のどこか分かりにくい部分があれば教えてください。
よろしくお願いします。
こんにちは、@ka-2020
ご質問ありがとうございます。同じ設定で私の方でもテストを再現し、動作を調査します。結果が出次第、調査結果とご質問への回答をご連絡いたします。
ご辛抱とサポートに感謝いたします。
BR
アリス