こんにちは、
私は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
アリス
こんにちは、 @Alice_Yang さん。
この件について調べていただき、ありがとうございます。
別のWUU外部ウェイクアップピンを使用して追加テストを実施し、その結果を共有したいと思います。
元のウェイクアップボタンの設定に加えて、以下の設定を追加しました。
WUU_SetExternalWakeUpPinsConfig(APP_WUU, 0, &wakeupButtonConfig);次に、WUUピン0に割り当てられたピンを使用して、デバイスをディープパワーダウン状態から復帰させました。デバイスは正常に復帰しましたが、以前と同じ結果が見られました。
CMC_GetSystemResetStatus(CMC) = 0x4010
CMC_GetStickySystemResetStatus(CMC) = 0x4011
CMC_GetWakeupSource(CMC) = 0x0
WUU_GetExternalWakeUpPinsFlag(WUU0) = 0x0したがって、この動作は元のSW2 WUUピンに特有のものではないようです。
捜査の進捗状況について何か新しい情報はありますか?
追加のログ、ソースコード、レジスタ値、またはテスト結果が必要な場合は、お知らせください。
よろしくお願いします。
こんにちは、@ka-2020
ご返信とご辛抱に感謝いたします。
ご要望に応じてこちら側でテストを行い、社内チームとも協議しました。ROMの動作に関する明確化にはROMチームからの確認が必要なため、調査に多少時間がかかりました。返信が遅くなり申し訳ありません。ご理解いただければ幸いです。
1. ディープパワーダウンからのWUUウェイクアップ後、SRS = 0x4010およびSSRS = 0x4011は想定される値ですか?
はい。
SSRS :前回のメインコールドリセット以降にシステムリセットを生成し、かつクリアしていないすべてのシステムリセットの発生源を保存します。SSRSはコアソフトウェアのリセット後に更新されません。
SRS:メインのウォームリセットのたびに、最新のリセットの種類/発生源を示す更新情報を提供します。
2. MCXA266 Boot ROMやExtended Bootloaderは、アプリケーション起動前にソフトウェアウォームリセットを発行しますか?→いいえ。
3. どのWUUピンがディープ・パワーダウンのウェイクアップを引き起こしたかを特定する推奨方法は何ですか?->>
ウェイクアップソースピンを特定するために、 WUU_GetExternalWakeUpPinsFlag() は電源ダウンモードに適しており、WUU割り込みサービスルーチンは通常通り実行できます。しかし、ディープ・パワーダウンのウェイクアップ後は、デバイスがリセットシーケンスで再起動し、WUUフラグが既にクリアされているため使用できません。
ところで、ウェイクアップピンは1つだけ使用していますか、それとも複数のウェイクアップピンを有効にしていますか?
よろしくお願いします。
BR
アリス
こんにちは、 @ka-2020さん
ご返信ありがとうございます。
この問題とお客様のご要望を、社内のSEチームに最優先で報告いたしました。私たちはこの要請の重要性を十分に理解しており、積極的に対応を進めています。
もう少し調査する時間をください。最新情報をお伝えし、できるだけ早くご連絡いたします。
ご理解とご辛抱に感謝いたします。
BR
アリス
こんにちは、 @Alice_Yang さん。
調査していただき、またご説明いただきありがとうございます。
あなたの説明によると、WUUフラグはアプリケーション開始前のディープ・ダウンリセットシーケンス中にクリアされているようです。
私のテストでは、2つのWUU外部ウェイクアップピンが有効になっていました。元のSW2ウェイクアップピンとWUU外部ウェイクアップピン0です。
念のため確認ですが、これはディープ・パワーダウン後にどのWUUピンがウェイクアップを引き起こしたかを特定するソフトウェアの方法がないということですか?
よろしくお願いします。