1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP32でSD_MMC.hを使用する方法

Posted at

背景

ESP32-WROOM-32Eの開発ボード(秋月)を使用してSDMMCでmicroSDカードに読み書きをしようとしましたが、色々エラーが起きて大変だったためメモします。

環境

  • PlatformIO
  • Windows11 or macOS Sonoma
  • pythonインストール済み

方法

1. コードを書く

main.cppに以下のコードを書きます。

main.cpp
#include <Arduino.h>
#include <SD_MMC.h>

const char *filename = "/test.txt";
bool is_sd_initialized = false;

void setup() {
  Serial.begin(115200);
  Serial.println("SDMMC Initiating...");
  bool result = SD_MMC.begin("/root", true, false);
  if (result) {
    Serial.printf("SDMMC initialized successfully\n");
  } else {
    Serial.printf("SDMMC initialization failed\n");
  }
  is_sd_initialized = result;
}

void loop() {
  if (!is_sd_initialized) {
    return;
  }
  static int count = 0;
  Serial.printf("count: %d\n", count++);
  // SDカードにファイルを書き込む
  File file = SD_MMC.open(filename, FILE_APPEND);
  if (!file) {
    Serial.printf("Failed to open file for writing\n");
    return;
  }
  file.println(count);
  file.close();
  delay(1000);
}

2. ピンを接続する

次の表の様にピンを接続します。

ESP32 pin SD card pin メモ
IO14 CLK 10kΩ プルアップ
IO15 CMD 10kΩ プルアップ
IO2 D0 10kΩ プルアップ
IO4 D1 10kΩ プルアップ
IO12 D2 10kΩ プルアップ
IO13 D3 10kΩ プルアップ
3.3V VDD 容量大きめのパスコンを配置
GND VSS

この時、3.3VとGNDの間にパスコンを配置するのを忘れないでください。

3. 書き込み設定を変更する

ESP32は起動時のIO12の電圧で、フラッシュメモリの動作電圧を切り替える機能があるみたいです。

この記事を参考に、IO12の電圧に関わらず、フラッシュメモリの動作電圧を3.3Vに固定するための設定をします。

3-1. esptoolのインストール

次のコマンドを実行してesptoolをインストールします。

pip install esptool

3-2. 設定の確認

現在の設定を確認します。

espefuse.py --port <ポート> summary

<ポート>には、使用しているポートの名称を入れてください。

(例)

  • Windows:COM5
  • Mac:/dev/tty.usbserial-3120

ここで、XPD_XXXXXの部分(下の方)が0になっていればOKです。

3-3. 設定を変更する

次のコマンドで、フラッシュメモリの動作電圧を3.3Vに設定します。

espefuse.py --port <ポート> set_flash_voltage 3.3V

4. 書き込む

IO2がプルアップされた状態だとESP32に書き込むことができないため、IO2のプルアップを一度外してください。
その後、PlatformIOで書き込みます。
書き込み終わったら再びIO2のプルアップを繋げてください。

5. 確認する

しばらくコードを実行した後、SDカードを外してPCに接続し確認すると、text.txtが作成され、その中に

1
2
3
4
5
...

と書き込まれているはずです。

最後に

SDカードのパスコンがなかったり、容量が小さいと早い速度では読み書きができませんでした。
これに気づくまで時間がかかりました😢

初めてのQiitaでの記事なので、間違い等がありましたらコメントで教えてください。

参考にしたサイト等

1
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?