こんにちは、みんな、
私はMK22FN1M0VLQ12を搭載したデバイスを持っています。
問題は、しばらく動作させた後、起動時にリセットループに陥ってしまうことです。
最初はフラッシュメモリの破損(アプリケーションがログをフラッシュに保存します)の問題かと思いました。私は卓球の戦略を使ってそれを解決しました。
しかし、一部の端末は同様の問題を抱えたまま返品された。あるデバイスのデバッグを試みましたが、ブレークポイントを設定しなくても常にASerialLDD2_InitかIntFlashLdd1_Eraseで止まります。どちらもプロセッサエキスパートが生成する関数です。他のデバイスではメモリダンプを使ったところ、メモリが確かに破損していることが分かったので、FLASHの使い方を直しました。
もう一つ重要な点は、それが数か月後に起こる場合もあれば、ほぼ1年後に起こる場合もあるということです。また、1年半以上前に設置したデバイスの中には、問題なく動作しているものもあります。
もう一つは、USBでメモリダンプを試みて同じアドレスを読み取ろうとしたところ、時には問題なく読み取れる時もあれば、ARMトランスエーションフォルトを返すこともあります。
誰か、そんな感じの人を見たことがありますか?
こんにちは、 @Rigolon さん。
投稿ありがとうございます。
これはASerialLDD2_InitやIntFlashLdd1_Erase自体の問題というよりは、フラッシュメモリの動作に関連する障害、あるいはフラッシュメモリの内容の破損の問題のように見えます。RMは、MCUがアクティブなフラッシュコマンドで操作されている間にFTFEリソースを読み取ると、FSTAT[RDCOLERR]が設定され、読み込みデータが保証されないと述べています。
AN4835を参照すると、そこには「イレイズやプログラムコマンドの中断はフラッシュの内容の破損を引き起こす可能性があります」とも書かれています。中断にはリセット、電力喪失、プロセッサ上で動作するコードとの競合などが含まれます。」これは、同じアドレスを読み取っても時に成功し、時にはARMトランザクションフォールトが返されるという観察と一致します。フラッシュ領域が破損したり不確定状態にある場合、それを読み取ることでバスフォールトが発生する可能性があります。同様の場合、影響を受けたセクターの消去や必要に応じてマス消去によってフラッシュアレイを復元します。詳細については、「解決済み:内部フラッシュ MK22FX512VLH12の破損を探す - NXPコミュニティ」をご覧ください。
お役に立てば幸いです。
BR
セレステ
ご返信ありがとうございます
メモリ読み取りコマンドの実行時と重なるタイミングで問題が発生しているため、調査してみます。ただし、本来HIGHになるべきではないピンがHIGHに設定されている箇所があります。このピンはLOW出力として初期化されます。
とはいえ、デバッグ中にそれらの関数で一時停止する理由を説明できるような何かはあるのでしょうか?読み取りコマンドの前にASerialLDD2_Init()が呼び出されるのは、PE_low_level_init()内のみです。
デバッグにはPE Microマルチリンクを使用しています。