こんにちはNXPサポート。
私はMKL03Z32VFK4R用に作られたアプリケーションをデバッグしています。
システムは3ボルトのバッテリーで駆動され、ほとんどの場合、VLSS3の低消費モードのままです。
このMCU(マイクロコントローラ)ではPTB0であるLLWU_P4ピンは、正のエッジでのウェイクアップとして構成されています。
PTB0にはスイッチが接続されており、押すと正のエッジが発生し、MCUがウェイクアップします。
ウェイクアップ後、いくつかのタスクが実行され、最後にVLLS3モードに戻ります。
アプリケーションは正常に動作しますが、断続的にクラッシュすることがあります。
Nordic SemiconductorsのPPK2(Power Profiler Kit 2)を使用していくつかのキャプチャを作成しました。
バッテリーの代わりに3ボルト電源として構成されたPPK2を接続しました。
このようにして、バッテリー残量が少なくなる可能性を排除します。
また、PPK2の2つ目のUSBを接続して、最大1000mAの供給容量を保証しました。
また、マイコンからのI/OピンをPPK2のデジタル入力D0に接続しました。
I/Oピンは、実行された各コード行を切り替えるようにプログラムしましたが、最初はどこでスタックしているのかを見つける目的でした。
以下に一連の図を示します。
図01:PTB0スイッチの連続した押下サイクルを示しています。
図02:うまくいったサイクルを詳しく示しています。
図03:タイムラインを観察して停止したサイクルを示していますが、この場合は停止するのに5分28秒以上かかりました。
図04:クラッシュサイクルを示していますが、MCUは回復しています。
図05:ほぼ停止したサイクルの最後の部分をズームで示しています。D0 は、明らかに figure04 と同様に、トゥーグル ダイナミクスを示し始めます。
私はいくつかのテストを行い、問題が断続的であることがわかりました。
クラッシュは最初の数サイクルで発生することもあれば、この場合のように5分以上後に発生するように、長い時間がかかることもあります。
私はいくつかの仮説を考えました。
1 - VLLS3 のウェイクアップ後に ACKISO フラグが "クリア" されていない可能性があると思いました。
しかし、MCUはクラッシュし続け、ACKISOの旗を無条件に「クリア」することさえありました。
ACKISOをクリアする行をコメントアウトしたのは、MCUをクラッシュさせることができるかどうかを確認するためだけです。
驚いたことに、MCUはクラッシュせず、まるで違いを生まないように機能しました。
2 - 最初に、プログラムはピン LLWU_P4 (PTB0) の正のエッジを検出するように LLWU を構成し、LLWU 割り込みを有効にする関数 "InitLLWU" を呼び出しました。
次に、関数 enter_vlls(3) が呼び出されて VLSS3 モードに入ります。
「enter_vlls(3)」関数の中に「InitLLWU」関数を配置してみましたが、この場合は「InitLLWU」を1行前に置いて__WFI。
クラッシュの原因は、マイコンがVLSS3モードに入る前にLLWUの割り込みが起こったからだと思っていましたが、この変更後もクラッシュが発生しています。
3 - 最初は、図03に示されているクラッシュは、MCUがウェイクアップし、再起動によってMCUが破損してクラッシュしたことを示していると思いました。
また、図04や図05のようにクラッシュしたようなケースもありましたが、MCUはなんとか立ち直ることができました。
図 04 の最初の部分ではトグルは発生しませんが、図 05 に示す最後の部分では、トグルのダイナミクスは図 02 と非常によく似ています。
最初は、VLLS3に入る前の設定が不十分であることが問題の原因だと思いました。
サイクルが有効ではなかったにもかかわらず、MCUはなんとか回復したので、パーシャルリセットの失敗か、初期化の失敗など、ウェイクアップ後に問題が発生していると思います。
以上が、私がこれまでに導き出したテストと結論でした。
どなたか同様の経験があり、私に何か提案をいただける方がいらっしゃいましたら、ありがたいです。
よろしくお願いいたします。