microSD カードモジュールです。
秋月で購入しました。
細ピンヘッダが付属しているのでハンダ付けするだけです。
ピンが何本か省略されたタイプもあります (microSD は全結線に 8 ピン必要)。こちらは Amazon で購入しました。普通のピンヘッダが付属しますので、ブレッドボードで使うのなら細ピンヘッダを用意しましょう。
余っている変換アダプタと L 字ピンヘッダを使って自作する方法もありますが、工作難易度は割と高いです。
microSD の動作電圧は 2.7 - 3.6V なので、UNO 等の 5V 動作 Arduino では信号の電圧を 3.3V に落としてやる...つまりロジックレベル変換が必要になります。ロジックレベル変換に分圧回路を使ってもいいのですが、今回は専用の IC を使ってみます。
このモジュールは Fairchild Semiconductor 社製 FXMA108 とパスコンをパッケージにしたもので、最大 8 本の信号線のロジックレベル変換が可能です。こちらも細ピンヘッダが付属しているのでハンダ付けしておきます。
Arduino UNO との接続は以下のようになります。
Arduino と microSD カードスロットとの接続は SPI (Serial Peripheral Interface) となります。SPI 用の 4 本の信号線はロジックレベル変換が必要となります。
SPI | microSD | FXMA108 | Arduino UNO | |
(3.3V 側) | (5V 側) | |||
SCK | 5 CLK | A4 | B4 | 13 (SCK) |
MISO | 7 DAT0 | A2 | B2 | 12 (MISO) |
MOSI | 3 CMD | A6 | B6 | 11 (MOSI) |
SS | 2 CD / DAT3 | A7 | B7 | 4 |
- | 4 VDD | VCCA | - | 3V3 |
- | 6 VSS | GND / OE | GND | |
- | - | - | VCCB | 5V |
テストスケッチは [ファイル | スケッチの例 | SD | CardInfo] です。SS (スレーブ選択ピン) はスケッチ内で 4 が指定されていますが、microSD カード (の載った) シールドによっては 4 ではない事があるので注意してください。
スケッチを実行し、シリアルモニタを開くと、microSD カードの情報が表示されます。
Arduino UNO 互換機の中には 5V / 3.3V を切り替えられるものがありますが...
3.3V 動作の場合にはロジックレベル変換が不要なのでシンプルな接続となります。Arduino Due や Arduino Pro、Arduino Pro Mini、Pro Micro などの 3.3V 動作 Arduino でも同様です。
動作が安定しない場合には 3.3V と GND の間に 0.1μF のセラミックコンデンサ (パスコン) を入れるか、MISO (DAT0 / DO) になっているピンを 10kΩ抵抗でプルアップしてください。
ESP-WROOM-02 でも microSD カードが使えます。SS に IO4 を使うとスケッチの変更が不要です (ESP-WROOM-02 の本来の SS は IO15)。
microSD | ESP-WROOM-02 |
1 DAT2 | (NC) |
2 CD / DAT3 | 4 |
3 CMD | IO13 (MOSI) |
4 VDD | 3V3 |
5 CLK | IO14 (SCK) |
6 VSS | GND |
7 DAT0 | IO12 (MISO) |
8 DAT1 | (NC) |
9 SW1 | (NC) |
10 SW2 | (NC) |
ESP-WROOM-32 でも microSD カードが使えます。SS に IO4 を使うとスケッチの変更が不要です (ESP-WROOM-32 の本来の SS は IO5)。MISO はプルアップしてください。
microSD | ESP-WROOM-32 |
1 DAT2 | (NC) |
2 CD / DAT3 | IO4 |
3 CMD | IO23 (VSPID) |
4 VDD | 3.3 |
5 CLK | IO18 (VSPICLK) |
6 VSS | GND |
7 DAT0 | IO19 (VSPIQ) |
8 DAT1 | (NC) |
9 SW1 | (NC) |
10 SW2 | (NC) |
STM32F103 でも microSD カードが使えます。スケッチの変更は不要です。
microSD | STM32F103C8T6 |
1 DAT2 | (NC) |
2 CD / DAT3 | PA_4 (SS) |
3 CMD | PA_7 (MOSI) |
4 VDD | 3.3 |
5 CLK | PA_5 (SCK) |
6 VSS | GND |
7 DAT0 | PA_6 (MISO) |
8 DAT1 | (NC) |
9 SW1 | (NC) |
10 SW2 | (NC) |
BBC micro:bit でも。SS に 4 を使うとスケッチの変更が不要です (micro:bit の本来の SS は 16)。
microSD | micro:bit |
1 DAT2 | (NC) |
2 CD / DAT3 | 4 |
3 CMD | 15 (MOSI) |
4 VDD | 3.3 |
5 CLK | 13 (SCK) |
6 VSS | GND |
7 DAT0 | 14 (MISO) |
8 DAT1 | (NC) |
9 SW1 | (NC) |
10 SW2 | (NC) |
ICSP / SPI ピンヘッダのあるボードではこちらを使う事もできます。
microSD | ICSP / SPI |
1 DAT2 | (NC) |
2 CD / DAT3 | (4) |
3 CMD | 4 MOSI |
4 VDD | (3.3V) |
5 CLK | 3 SCK |
6 VSS | 6 GND |
7 DAT0 | 1 MISO |
8 DAT1 | (NC) |
9 SW1 | (NC) |
10 SW2 | (NC) |
microSD カードを手っ取り早く試してみたいのなら、イーサーネットシールド2 やタッチスクリーンシールド 等のコンボになっているシールドを使うか、最初からレベル変換 IC の載ったモジュールを購入するといいでしょう。
SPI | microSD | Arduino Uno | ESP-WROOM-02 |
SCK | SCK | 13 (SCK) | IO14 (SCK) |
MISO | MISO | 12 (MISO) | IO12 (MISO) |
MOSI | MOSI | 11 (MOSI) | IO13 (MOSI) |
SS | CS | 4 | IO4 |
- | VCC | 3V3 / 5V | 3V3 |
- | GND | GND | GND |
3.3V / 5V 両用なので便利です。
microSD カードモジュールの表記と SPI 信号の対応表です。
SPI | MMC | SD | miniSD | microSD | OTHER |
SS | 1 RES | 1 CD / DAT3 | 1 CD / DAT3 | 2 CD / DAT3 | CS / RES |
MOSI | 2 CMD | 2 CMD | 2 CMD | 3 CMD | DI / CMD |
3 VSS1 | 3 VSS1 | 3 VSS1 | 6 VSS | GND | |
4 VDD | 4 VDD | 4 VDD | 4 VDD | 3.3V / VCC | |
SCK | 5 CLK | 5 CLK | 5 CLK | 5 CLK | SCLK |
6 VSS2 | 6 VSS2 | 6 VSS2 | GND | ||
MISO | 7 DAT | 7 DAT0 | 7 DAT0 | 7 DAT0 | DO / DAT |
8 DAT1 | 8 DAT1 | 8 DAT1 | |||
9 DAT2 | 9 DAT2 | 1 DAT2 | |||
10 NC | |||||
11 NC | |||||
CD / SW1 / SW2 / C-D / CDN (カード検出用ピン) |
microSD カードモジュールによってシルク印刷がバラバラだったり、スケッチのコメントもバラバラだったりして混乱しますよね。
ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。