M5StickCでSPI接続のSDを使う(3線)

※本ブログは現時点での情報です、最新情報はM5StickC非公式日本語リファレンスを参照してください。

SPI接続のディスプレイはSPI以外に制御線が必要だったので、Grove端子も使っていましたが、純粋なSPI接続だと3線あればできるのですっきりと接続が可能でした!

接続図

GPIO36が入力専用pinなのでMISOに使っています。CSはSPIデバイスが1つだけなのでGNDに接続しています。

デバイス

前回と同じで、SPI接続のSDカードであればどれでも使えると思います。ただし抵抗とかの部品がついていない素のブレークアウトは他に部品が必要なので注意しましょう。

接続方法

M5StickCSD
3V33V3
GNDGND
0CLK
36MISO
26MOSI
GNDCS

MISOは入力専用の36にアサインして、それ以外は自由に設定できます。

サンプルスケッチ

#include <M5StickC.h>
#include "SD.h"

// PIN配置
enum { spi_sck = 0, spi_miso = 36, spi_mosi = 26, spi_ss = -1 };

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の種類と容量を表示するだけのコードです。

まとめ

SPIが3pinだけで動かせるのが確認できたので、EXT IOはSPI接続と、Grove端子にI2C接続ってのが最大限の拡張性かな?

使ってみたいSPIデバイスがSPI以外にも制御線が必要なので、I2CのI/O拡張とか使って制御してみようかな。

コメントする

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)