※本ブログは現時点での情報です、最新情報はM5StickC非公式日本語リファレンスを参照してください。
使うことはないとは思いますが、手元にSPI接続のSDカードリーダーがあったので、、、
利用デバイス
いろいろなSDカードリーダーがありますが、これの右側みたいなやつを使いました。SPI接続以外にもいろいろとSDカードリーダーがあるので、気をつけて選びましょう。
接続方法
M5StickC | SD |
3V3 | 3V3 |
GND | GND |
0 | CLK |
26 | MISO |
32 | MOSI |
33 | CS |
M5StickC側はどのピンでもアサイン可能ですが、初期化時に若い番号から並ぶようにアサインしました。
SDカードの仕様上、プルアップする必要がありますが、基板上に抵抗などの部品があれば内部でやってくれているはずですので、そのまま直結させます。
SDカードは3.3Vで動きますので、間違ってGROVE端子などの5Vを接続しないようにしましょう。
サンプルスケッチ
#include <M5StickC.h> #include "SD.h" // PIN配置 enum { spi_sck = 0, spi_miso = 26, spi_mosi = 32, spi_ss = 33 }; void setup() { // M5StickC初期化 M5.begin(); M5.Lcd.setRotation(3); // SPI初期化 SPI.begin(spi_sck, spi_miso, spi_mosi, spi_ss); // SDカード初期化 if (!SD.begin(spi_ss)) { M5.Lcd.println("Card Mount Failed"); return; } // SDカード種別取得 uint8_t cardType = SD.cardType(); if (cardType == CARD_NONE) { M5.Lcd.println("None SD Card"); return; } M5.Lcd.print("SD Card Type: "); if (cardType == CARD_MMC) { M5.Lcd.println("MMC"); } else if (cardType == CARD_SD) { M5.Lcd.println("SDSC"); } else if (cardType == CARD_SDHC) { M5.Lcd.println("SDHC"); } else { M5.Lcd.println("UNKNOWN"); } // SDカード容量取得 uint64_t cardSize = SD.cardSize() / (1024 * 1024); M5.Lcd.printf("SD Card Size: %lluMB\n", cardSize); } void loop() { }
SDカードをマウントしてから種別と容量を取得するだけのサンプルです。
まとめ
SDカードはSPI接続以外にも接続方法がありますが、M5StickCの場合利用できるピン数の関係でSPIしか利用できません。
今回4線全部利用していますが、CSはGNDに落とすことで使わなくすることができますが、SD.begin()で何らかのピンを指定しないといけないので、33を割り振っています。
コメント