PlatformIOからM5Paperに書き込むと起動しなくなって困った
久々にM5Paperで遊ぼうと思ったらつまづいたので、対処法を共有できればと思います。
前提条件
M5Paper: v1.0 (古いやつ)
環境:VSCode上のPlatformIO(Core 6.1.5, Home 3.4.3)
やったこと: GitHubのFactoryTest[1]をcloneしてPlatformIOで書き込み
状況
・コンパイル、書き込みは成功するが、M5Paperが起動しなくなる。
・画面は下図の初期画面が点滅する。
・シリアルモニタでは以下が繰り返し表示される。
M5EPD initializing...[ 2643][D][M5EPD_Driver.cpp:68] begin(): Init SUCCESS.
[ 3270][E][esp32-hal-cpu.c:110] addApbChangeCallback(): duplicate func=0x400fc9c8 arg=0x3ffbde2c
[ 3416][W][sd_diskio.cpp:186] sdCommand(): token error [0] 0x12
[ 3417][W][sd_diskio.cpp:516] ff_sd_initialize(): GO_IDLE_STATE failed
[ 3417][E][sd_diskio.cpp:802] sdcard_mount(): f_mount failed: (3) The physical drive cannot work
[ 3435][D][GT911.cpp:35] begin(): GT911: Initialization
[ 3435][I][esp32-hal-i2c.c:75] i2cInit(): Initialising I2C Master: sda=21 scl=22 freq=100000
[ 7][D][esp32-hal-cpu.c:244] setCpuFrequencyMhz(): PLL: 480 / 2 = 240 Mhz, APB: 80000000 Hz
[ 456][I][esp32-hal-psram.c:96] psramInit(): PSRAM enabled
原因、対処法
画面でもシリアルモニタでもわかる通り、FactoryTestのブートに失敗しているみたいです。
シリアルモニタの出力でググってみると、M5Stack Communityに対処法がありました[2]。
どうやらPlatformIOのM5Paper(の中身のESP32)用のフレームワーク(framework-arduinoespressif32)の最新バージョン(v.5.2.0)では、FactoryTestが動かないようです。以前のバージョン(v.5.1.1以下)のフレームワークなら動くらしい。
なので、platformio.iniのplatformで読み込むものをv2.0.4に変更すればいいわけです。
GitHubからクローンした状態では以下のようになっています。
platform = espressif32
espressif32とだけ書いた場合、自動で最新版を使うようなので、
platform = espressif32@5.1.1
と@以後にバージョンを追記すればいいです。
フレームワークとArduinoのバージョンが合わないでエラーが出ることはよくありますが、この場合はなまじコンパイルと書き込みが通ってしまうだけ面倒ですね。
ちなみに
今回の問題はPlatformIOのフレームワークの問題なので、FactoryTestに限らず、PlarformIOからM5Paperに書き込む場合すべてで発生しますが、同様の対処法で解決します。
PlatformIO以外で書き込んだ場合はうまくいくようで、M5burnerからのFactoryTestの書き込みを試してみたところ、正常に起動しました。初期状態に戻したいだけならM5burnerを使った方がいいかもしれません。
最初に書いたように僕は古いM5Paper(v.1.0)を使っています。M5Paperの新しいバージョン(v.1.1)では状況が違う可能性があるので注意してください。
ちなみに、のちなみにですが、FactoryTestを書き込めたのはいいものの、以前(2年前くらい)では読み込んでくれたSDカードを認識してくれませんでした。
Discussion