今回はmicro_SDの読み書きをやって見ます。
先ずは回路の確認
- 左が回路図。右がmicro_SDのピンアサイン。
- micro_SDとの通信方式はSPI。
- 通常SPI通信には、クロック(SCLK)、データIN(DI)、データOUT(DO)の3本とチップセレクト(CS)が使われる。
- 1番ピン:接続無し、8番ピン:リザーブ。8番ピン(HS2_DATA1またはDAT1)は、LED_FLASHに繋がれている。1番ピン、8番ピン共に47kΩでプルアップされているところを見ると何かの信号ラインと思われるが。
- 回路図の9番ピン(SD)はメディア検知用。メディアが挿入されていると、”Low”になる。この回路ではこの信号は使われていない。
各信号ラインがESP32のDefault通りに配線されているので下記のコードでmicro_SDに書き込む事が出来ます。
#include "FS.h"
#include <SD_MMC.h>
void setup()
{
File fo;
SD_MMC.begin();
fo = SD_MMC.open("/test.txt", FILE_WRITE);
fo.println("This is test.\nThis is test.");
fo.close();
SD_MMC.end();
}
void loop()
{
}
実行するとThis is test. This is test. と書かれた”test.txt”ファイルがmicro_SDに作られます。問題無く動くのですが、LED_Flashが何故か光ってしまいます。micro_SDにアクセスする度にLED_Flashが光っては眩しくてたまりません。8番ピンはリザーブですがプログラムの中で使っている様です。
SD(SPI)モードで試してみる
micro_SDの変わりにSDモードで書込を行ってみました。SD_MMC.begin();の変わりにSD.begin();を使います。DefaultでのSDモードのピンアサインは、 SCK:IO18、 MISO:IO19、 MOSI:IO23。配線と違うのですが、SPI.begin関数の引数で対応可能。
#include "FS.h"
#include <SD.h>
#define sd_sck 14
#define sd_mosi 15
#define sd_ss 13
#define sd_miso 2
void setup()
{
File fo;
SPI.begin(sd_sck, sd_miso, sd_mosi, sd_ss);
SD.begin(sd_ss);
fo = SD.open("/test1.txt", FILE_WRITE);
fo.println("This is test.\nThis is test.");
fo.close();
SD.end();
}
void loop()
{
}
- SPI.beginで各ピンを指定する。引数は、順にSCK、MISO、MOSI、SS(CS)
- 回路図より、SCK:14、MISO:15、MOSI:2、SS:13 となる。
- プログラムは、前回同様、This is test. を2回書いたファイル、”test1.txt”を作成する。
今度はLED_Flashは光りません。micro_SDへのアクセスはこちらのプログラムを使用する事にします。Flashが光らないから。
次回は、カメラとPSRAMについてです。