このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

クラス SDCard -- SD メモリカード

SD カードは、リムーバブルストレージメディアの最も一般的な小型フォームファクターの1つです。SD カードにはさまざまなサイズと物理的なフォームファクターがあります。MMC カードは SD カードと同様のリムバーブルストレージデバイスであり、eMMC デバイスは 電気的には MMC カードと同様のストレージデバイスですが、他のシステムに組み込むように設計されています。3つの形式はすべて、ホストシステムとの通信に共通のプロトコルを使っていて、高レベルのサポートはすべて同じです。このプロトコルの MicroPython でのサポートは、 machine.SDCard という単一のクラスに実装しています。

SD と MMC の双方のインターフェイスは、さまざまなバス幅でのアクセスをサポートしています。1ビット幅のインターフェイスでアクセスする場合、SPI プロトコルを使用してアクセスできます。MicroPython ハードウェアプラットフォームにより、さまざまな幅とピン構成をサポートしていますが、ほとんどのプラットフォームでは、ハードウェアに適した標準構成があります。一般に、パラメータを渡さずに SDCard オブジェクトを構築すると、使っているハードウェアのデフォルトのカードスロットのインターフェイスが初期化されます。以下にリストされている引数は、非標準スロットまたは非標準のピン割り当てのいずれかを使うのに設定が必要な共通の引数を表しています。サポートする引数の厳密なサブセットは、プラットフォームごとに異なります。

class machine.SDCard(slot=1, width=1, cd=None, wp=None, sck=None, miso=None, mosi=None, cs=None, freq=20000000)

このクラスは、専用の SD/MMC インターフェイスハードウェアか、SPI チャネルを介しての、SD または MMC ストレージカードへのアクセスを提供します。このクラスは vfs.AbstractBlockDev で定義されたブロックプロトコルを実装しています。これにより、SD カードのマウントが次のように簡単になります。

vfs.mount(machine.SDCard(), "/sd")

このコンストラクタは次のパラメーターを取ります。

  • slot は、使用可能なインターフェースのどれを使用するかを選択します。この指定を省略すると、デフォルトのインターフェースが選択されます。

  • width は、SD/MMCインターフェイスのバス幅を選択します。

  • cd でカード検出ピンを指定できます。

  • wp で書き込み保護ピンを指定できます。

  • sck で SPI クロックピンを指定できます。

  • miso で SPI miso ピンを指定できます。

  • miso で SPI mosi ピンを指定できます。

  • cs で SPI チップ選択ピンを指定できます。

  • freq は SD/MMC インタフェースの周波数を Hz で指定します(ESP32 でのみサポート)。

ハードウェア固有の詳細

異なるハードウェア上の SDCard クラスの実装は、上記のオプションのさまざまなサブセットをサポートします。

PyBoard

標準の PyBoard にはスロットが1つしかありません。引数は不要またはサポートされていません。

ESP32

ESP32 は SD/MMC ハードウェアの2つのチャネルを提供し、ユーザーが通常利用できる2つの SPI ポートのいずれかを介したSDカードへのアクセスもサポートします。結果として、 slot 引数は 0 から 3 までの値を取ることができます。スロット 0 と 1 は組み込みの SD/MMCハードウェアを使い、スロット 2 と 3 は SPI ポートを使います。スロット 0 は 1, 4, 8ビット幅のアクセスをサポートし、スロット1 は 1 または 4ビットアクセスをサポートします。SPIスロットは1ビットアクセスのみをサポートします。

注釈

スロット 0 は、ほとんどの ESP32 モジュールではオンボードのフラッシュメモリとの通信に使っているため、ユーザーは使用できません。

注釈

専用ハードウェアを使って SD カードスロットを提供するほとんどの ESP32 モジュールは、1データピンのみを配線しているため width のデフォルト値は1です。

専用の SD/MMC ハードウェアで使われているピンは固定されています。SPI ハードウェアで使うピンは再割り当てできます。

注釈

SPI 信号のいずれかが再マッピングされると、すべての SPI 信号が GPIO マルチプレクサユニットを通過するため、高周波信号のパフォーマンスが制限される可能性があります。SDカードの通常の動作速度は 40MHz であるため、一部のカードで問題が発生する場合があります。

デフォルト(および推奨)のピン割り当ては次のとおりです。

スロット

0

1

2

3

Signal

ピン

ピン

ピン

ピン

sck

6

14

18

14

cmd

11

15

cs

5

15

miso

19

12

mosi

23

13

D0

7

2

D1

8

4

D2

9

12

D3

10

13

D4

16

D5

17

D6

5

D7

18

cc3200

pins 引数にタプルを渡すことにより、SPI アクセスに使うピンを指定できます。

注記: 現在の cc3200 SDカードの実装では machine.SDCard ではなく、machine.SD のほうを使います。

mimxrt

mimxrt ポートの SDCard モジュールは、4ビットモード、クロック周波数 50MHz の専用 SD/MMC ペリフェラル (USDHC)経由のアクセスのみをサポートしています。残念ながら、MIMXRT1011 コントローラは USDHC ペリフェラルをサポートしていません。したがって、このコントローラでは machine.SDCard モジュールが機能しません。

クロック周波数 50MHz の4ビットモードのみをサポートすることにしたため、インタフェースは簡素化され、コンストラクタのシグネチャは次のようになっています。

class machine.SDCard(slot=1)

USDHC ペリフェラルで使うピンは mpconfigboard.h で設定する必要があります。mimxrt ポートでサポートされるほとんどのコントローラは、最大2つの USDHC ペリフェラルを提供します。したがって、ピン設定はマクロ MICROPY_USDHCx (x は1または2)を使って行います。

以下は USDHC1 の設定例を示しています:

#define MICROPY_USDHC1 \
  { \
        .cmd   = { GPIO_SD_B0_02_USDHC1_CMD}, \
        .clk   = { GPIO_SD_B0_03_USDHC1_CLK }, \
        .cd_b  = { GPIO_SD_B0_06_USDHC1_CD_B },\
        .data0 = { GPIO_SD_B0_04_USDHC1_DATA0 },\
        .data1 = { GPIO_SD_B0_05_USDHC1_DATA1 },\
        .data2 = { GPIO_SD_B0_00_USDHC1_DATA2 },\
        .data3 = { GPIO_SD_B0_01_USDHC1_DATA3 },\
  }

カード検出ピンを使わない場合(cb_b ピン)、各エントリに次のダミー値を設定する必要があります。

#define USDHC_DUMMY_PIN NULL , 0

マクロ MICROPY_USDHC1MICROPY_USDHC2 の定義に基づき、 machine.SDCard モジュールは1スロットまたは2スロットをサポートします。どちらか一方しか定義されていない場合、 machine.SDCard() または machine.SDCard(1) を呼び出すと、それぞれの USDHC ペリフェラルを使ったインスタンスが返されます。両方のマクロが定義されている場合、 machine.SDCard(2) を呼び出すと、USDHC2 を使用するインスタンスが返されます。