今回確認した現象は、タイトル通りM5Stack Basic(無印)では起きないのにM5Stack Basic V2.6だと起きる障害です。
障害は次の写真の組み合わせで発生します。
障害内容
M5Stack BasicをArduinoで使っている人は「Library for M5Stack Core development kit」を使ってると思います。
でも、殆どのバージョン(試した限りでは0.1.2以外)はM5.begin()を実行すると、SDカードのファイルのオープンに失敗してしまいます。
確認用プログラム
確認用のプログラムは、Arduinoの「ファイル」メニューから[スケッチ例] > [M5Stack-Core-ESP32用のスケッチ例] [SD] > [SD_Test]を選ぶと表示されるものを元にして、なるべく短くなるように作りました。
テストプログラム
#include <m5stack.h> void writeFile(fs::FS &fs, const char * path, const char * message){ Serial.printf("Writing file: %s\n", path); File file = fs.open(path, FILE_WRITE); if(!file){ Serial.println("Failed to open file for writing"); return; if(file.print(message)){ Serial.println("File written"); } else { Serial.println("Write failed"); } file.close(); } void setup(){ M5.begin(); //M5.begin(true, false); if(!SD.begin(4)){ Serial.println("Card Mount Failed"); return; } writeFile(SD, "/hello.txt", "Hello "); Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024)); } void loop(){ }
確認用プログラムの実行結果
これを実行したときのシリアルモニタの表示はこうなります。
全てが動かない訳ではないんです。SD.totalBytes()
はちゃんと動いていて15185
と表示されています。
でも、ファイルのオープンは失敗しています。
では、20行目のM5.begin();
をコメントにして、23行目のM5.begin(true, false);
のコメントを外してプログラムを実行してみましょう。
この通り、エラーなく実行されます。
ドキュメントではM5.begin()
の第2引数はTFカード(SDカードの中国名)を有効にするものなのですが、このSDカードの設定を無効にすると正常に動作します。