STM32L4R5チップをだまして、特定のフラッシュアドレスのエラーチェック情報を破損します。
Flash ECCを備えたSTM32デバイスの破損したフラッシュアドレスから読み取ると、マスク不可能なECC検出割り込みが表示されます。この割り込みの取り扱いは、一部のアプリケーションにとって重要です。たとえば、衛星などの放射線にさらされる可能性のあるものなどです。ただし、実際にハードウェアでハンドリングコードをテストするのは難しいです。チップに意図的に間違ったフラッシュエントリを生成するように直接指示することはできないためです。
そのため、このツールはそれを正確に行う方法を提供します。特定のアドレスでエラー修正情報を具体的に破壊します。これは、リセットがフラッシュライティングプロセスを妨げるタイミングを自動的にバイナリ検索することにより行います。
main.rsファイルの上部にあるアドレスを調整し、STM32L4R5チップのデバッグコネクタをプラグインしてから、 make flashを実行します。
次に、チップの青いLEDが間隔で点滅するのを見る必要があります。それは、フラッシュの腐敗が起こるのを待つためにどれだけ必要かを試すバイナリ検索です。ライトは数秒間外れているように見えます(タイミングが非常に短く、LEDがかろうじてオンになる可能性があるため)、その後、緑または赤のLEDがオンになります。緑は、正確なアドレスがヒットしたことを意味し、赤はそれが見逃されたことを意味します。緑の場合、ECC割り込みに対してテストするコードをフラッシュできるようになりました(エラーを含むページを上書きしないようにしてください - 消去するとエラーが消えます)。また、赤いLEDがオンになった場合には、再試行するためにリセットボタンを押す必要があります(場合によっては、再試行するパワーサイクルも役立ちます)。
グリーンLEDが点灯した場合、プログラムは正しい場所にヒットしました。正確なアドレスを確認するには、GDBを介して添付してから、 FLASH_ECCRレジスタのコンテンツを読み取ることもできます。
(gdb) x/wx 0x40022018
0x40022018 : 0x80006000最初のヘックス文字が8または2場合、腐敗は機能しました。最後の20ビット(または5ヘックス文字)は、破損したメモリアドレスです。この場合、 0x6000腐敗するために与えられ、正確にヒットしました。
1つのシェルで、実行します
st-util次に、GDBを使用して添付します。
arm-none-eabi-gdb -ex " target extended-remote :4242 " target/thumbv7em-none-eabi/release/stm32-flash-corruptorこのコマンドを使用して、バックアップレジスタコンテンツを表示します。
x /32w 0x40002850各レジスタの詳細については、 main.rsのコメントをご覧ください。