かねてより STM32 の開発を STM32CubeMX + STM32CubeIDE で行っていますが、どのツールでもそれなりにすんなりいかない点があります。STM32CubeIDE では、わけのわからないエラーで開発が中断することが多いので困りものです。
ときどき発生するのが、Flash 書き込み時の「Failed to execute MI command」エラーです。
1つの復帰方法は、一度 ST-Link の USB ケーブルをさしなおして、別の正常なプロジェクトのFlashを書き込んでから、戻って再度書き込むことです。そうするとなぜか書けることがあります。
他に効果があったのは、デバッガ設定のポート番号を変えることです。これで復帰できることもありました。
ST社のフォーラムを見ると、同じエラーの相談はいくつか見かけますが、いずれも解決していないようにみえます。
git clone したプロジェクトを新しいバージョンのソフトで開くと、このエラーになりがちです。あるいはファイルが不足しているのかもしれません。
わかりました。ボードとプロジェクトの組み合わせによっては、SPI Flash など、内蔵 Flash 以外の場所に書き込む必要があり、その場合 Run Configurations の External loaders の指定が必要です。TouchGFX などでプロジェクトを作るとここが指定されています。
この設定は .project ファイルではなく、IDE フォルダ内の “(プロジェクト名) Debug.launch” のような名前のファイルに格納されています。
つまり、このファイルをパッケージし忘れたり、何らかの理由でおかしくなったら、Failed to execute MI command エラーに行きつくわけです。 適切な Loader を指定したら、正しく書き込めるようになりました。