M5STACKやESP32ボードで発生する a fatal error occurred:MD5 の修復方法

電子工作

はじめに

Arduino IDEでM5STACKのスケッチ書き込みができなくなりましたが修正方法がわかりました。といっても、先人たちのおかげなのですが。
私の場合はM5STACKの2台で発生していて、Web記事に記載されている修正方法のいくつかを試していたのですが、全く改善出来ることはなく諦めていました。
その後「これ、試してなかったかな?」という方法を海外のWebサイトで発見したので試してみることにしました。
もとはESP32に関する修復方法でしたが、M5Stackも同一ICを使用しているため同じ方法を適用する事で修復することができました。

今回発生した不具合の具体的なエラーメッセージこれです。
A fatal error occurred: MD5 of file does not match data in flash!

修正方法

修正作業としてはesptoolを使用してflash memoryの内容を消去することでした。次の手順で進めて下さい。

①まず初めにflash memoryの状態確認のために、下記2行をWindowsプロンプトのコマンドラインからで実行します。

>esptool.exe –port PORT read_flash_status
>esptool.exe –port PORT flash_id

私の環境では以下の画面のディレクトリにesptoolがインストールされており、そのディレクトリ下で実行しました。
C:\Users\/username\AppData\Local\Arduino15\packages\esp32\tools\esptool_py\3.0.0>esptool.exe –port COM3 read_flash_status

すると、つらつらっと実行されて、次のような画面となります。

②この結果の”Status Value”の値を覚えておいて、次に以下のflash消去のコマンドを実行します。
>esptool.exe –port PORT write_flash_status –non-volatile 0

具体的には私の環境ではm5stackを接続しているのはCOM3ですので、
C:\Users\/username\AppData\Local\Arduino15\packages\esp32\tools\esptool_py\3.0.0>esptool.exe –port COM3 write_flash_status –non-volatile 0
を実行すると、さきほどと同じくつらつらっと実行されて、

となり、Flash が初期化されます。

③そしてもう一度以下を実行してflashの状態を再確認します。
>esptool.exe –port PORT read_flash_status
すると以下の画面出ます。

ここで、Status value が初期化前の値から変化していれば初期化成功です。
私の場合は、”0x4202 -> 0x0200” になっています。
私の不具合が発生した上記復旧作業を実施した2台については、初期化後のStatus valueの値は2台で同じではありませんでしたので、status valueの値は個体差があるようですのでStatus valueの値は気にしなくて良いと思います。

なお、flashの消去が目的ですので上記の②のみを行えばよく、消去ができたかどうかを確認する①と③は必ずしも実行する必要はありません。

おわりに

この作業を行った後は、普通にArduinoでスケッチの書き込みができました。物理的にメモリが破壊されている場合など、必ずしもこの方法で全ての書き込み不具合が修復出来るとは限りませんが同じ症状の人は一度お試し下さい。

手順について詳しく知りたい方はespressif社のホームページに掲載されているesptoolのAdvanced commandsに関するページも参照になると思います。

コメント

タイトルとURLをコピーしました