こんにちは、
FRDM_k64 に似た MK64FN01M を実行するボードがあります。
最後のバイトに CRC を保存して、フラッシュに設定を保存します。
ボード上の1つのセクターで、そのセクションを読み込むとバス障害が発生します
このコードは、0xE5FF8 から 8 バイトの長さの RAM への単純な memcpy を呼び出します。
このコード内のこの関数は、以前に異なるメモリ セクションで呼び出されます。
これらの場所でのみコードがクラッシュします。
このセクターを他の場所に移動すると、機能します。
その特定のメモリが問題になる可能性がある理由について何かアイデアはありますか?
ありがとう、アディブ
こんにちは@theadib
BR
アリス
こんにちは@theadib
こんにちは@Alice_Yang 、
おそらく、この問題は、私が SEGGER JLink を使用しているときに認識した奇妙な動作によるものだと思います。
JLink で MK64FN1M0XXX12 を使用して MK64FN1MOVLQ12 に接続すると、次のようになります。
デバイス MK64FN1MoXXX12
SWDの場合
スピード1000
connect
消去する
ロードビン イメージファイル.bin 0
通常、JLink は消去後にデバイスが保護されていると主張します。
そして、この添付のダイアログを提示します。
消去コマンドの後、デバイスは保護されておらず、セキュリティも保護されていないと予想されます。
JLink を使用してフラッシュを完全に消去し、新しいイメージをロードする場合の推奨されるシーケンスは何ですか?
前もって感謝します
こんにちは@Alice_Yang
ご迷惑をおかけして申し訳ございません。
根本的な原因は、同じアドレスに同じデータが二重に書き込まれていることにまで遡りました。
バグのないコードではこのようなことは起こらないはずだ
しかし、
2回目の書き込みはエラーコードを返します
しかし、そのセクターを読み取るだけでも BUS_FAULT トラップが発生します。
アクセスによってプログラム全体がクラッシュする前に、セクターの状態を確認する方法はありますか?
そうすることで、セクターを再度適切に消去し、セクターを正しい状態にすることができます。
???
リファレンスマニュアルのセクション29.4.10.2でFSFEの説明を確認しました。フラッシュコマンド。
しかし、プログラム メモリからセクターを「テスト」できるコマンドは見つかりません。
何か見逃しているでしょうか?
そうすれば、再起動後にフラッシュの状態を確認するための、より回復力のあるアプリケーションを作成できます。
前もって感謝します、
アディブ
こんにちは@theadib
Alice_Yang_0-1767951588914.png
ありがとう。
BR
アリス
こんにちは@theadib
Erase Flash Sector コマンドを起動すると、FRFE は選択したフラッシュを消去し、消去されたことを確認します。消去検証に失敗した場合、FSTAT[MGSTAT0]ビットが設定されます。CCIFフラグはフラッシュセクター消去操作後に設定されます。
完了します。フラッシュセクター消去コマンドは一時停止可能です(FCNFG[ERSSUSP]ビットと図29-11を参照)。
Alice_Yang_0-1767953891145.png
BR
アリス