知的好奇心 for IoT

IoT関連の知的好奇心を探求するブログです

M5Stack Basic V2.6にM5GO/FIREバッテリーボトムを付けるとM5.begin()でSDカードをfalseにしないとSDカードのファイルオープンに失敗する。

今回確認した現象は、タイトル通り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カードの設定を無効にすると正常に動作します。