【RP2350】SDカードモジュール不要!余った変換アダプタの再利用でデータの読み書きを実現
前回セットアップしたRP2350ボードを使って、今回はSDカードへのデータの読み書きに挑戦します。
センサーデータの記録や設定ファイルの保存に欠かせないSDカードですが、通常は専用の接続用モジュールを購入して利用します。しかし、MicroSDカードを購入した際に付いてくる「SDカード変換アダプタ」が余っていれば、それを加工してスロットとして利用することが可能です。
今回は、専用モジュールを買い足さず、手元のアダプタを再利用してRP2350でデータを読み書きする手順をまとめました。熱に弱いプラスチック製のアダプタを壊さずに配線する、私なりのハンダ付けのコツも合わせてご紹介します。
まずは市販モジュールで動作確認
いきなり自作スロットで試すと、動かなかった時に「配線が悪いのか」「プログラムが悪いのか」切り分けができません。まずは、手元にあった市販のSDカードモジュールで、RP2350との通信テストを行いました。
これは3.3V/5Vのレベル変換チップが載っている安心設計ですが、RP2350(3.3V)なら直結でも動きます。
ライブラリ「SdFat」の導入
テストを行う前に、Arduino IDEでSDカードを扱うためのライブラリをインストールします。 今回は、RP2350とも相性が良く高機能な SdFat を使用します。
- Arduino IDEのメニュー「ツール」→「ライブラリを管理」を開く。
- SdFat を検索し、インストールする。
このライブラリを使って読み書きのテストを行い、正常に動作することを確認しました。よし、これでマイコン側とプログラムの準備は完了です。
変換アダプタへの「直付け」に挑戦
さて、ここからが本番です。 変換アダプタの端子は金メッキされておりハンダが乗りやすい…と思いきや、土台は熱に弱いプラスチックです。 もたもたしていると、熱が伝わって内部が変形し、SDカードが入らなくなってしまいます。
従来は「不要なSDカードを挿したままハンダ付けして、変形を防ぐ」のが定石でしたが、私は道具と化学の力でこれを解決しました。
納戸工房流:溶かさないハンダ付けの極意
成功の鍵は、「熱を伝える時間を極限まで短くすること」です。そのために以下の道具を使いました。
これを爪楊枝などで、アダプタの端子の先端だけちょこんと乗せます。
コードがないので手元が狂わず、狙った場所に一撃で決められます。
【作業手順】
この方法なら、熱がプラスチック部分(根元)まで伝わる前に作業が終わるため、ダミーカードを挿さなくても変形しませんでした。「ハンダ付けは、温度ではなくスピード」。これを実感した瞬間です。
配線とプログラム
完成した「自作SDスロット」をRP2350に接続します。
【配線図】(※端子面を手前にアダプタの角の凹みを左上にした状態でのピンアサイン)
| アダプタの端子 (左から) | 信号名 (SPI) | RP2040-Zero | 役割 |
| Pin 9 (一番左) | DAT2 | (未接続) | SPIでは使いません |
| Pin 1 (2番目) | CS / DAT3 | GP 5 | チップセレクト (通信相手の選択) |
| Pin 2 (3番目) | MOSI / CMD | GP 7 | データ送信 (マイコン→SD) |
| Pin 3 (4番目) | VSS1 (GND) | GND | 接地 ※1 |
| Pin 4 (5番目) | VDD | 3V3 | 電源 (3.3V) |
| Pin 5 (6番目) | SCK / CLK | GP 6 | クロック (通信の拍子) |
| Pin 6 (7番目) | VSS2 (GND) | GND | 接地 ※1 |
| Pin 7 (8番目) | MISO / DAT0 | GP 4 | データ受信 (SD→マイコン) |
| Pin 8 (一番右) | DAT1 | (未接続) | SPIでは使いません |
テストプログラム
ステップ1で動作確認したものと同じコードを使います。 ※注意:SdFatライブラリを使う場合、クラス名は File ではなく SdFile を使います。
#include <SPI.h>
#include "SdFat.h"
// — ピン設定 (RP2350 / Pico 2) —
// RP2040と同じピン配置を使用
const int PIN_MISO = 4;
const int PIN_CS = 5;
const int PIN_SCK = 6;
const int PIN_MOSI = 7;
// SdFat設定
SdFat sd;
SdFile myFile;
void setup() {
Serial.begin(115200);
// シリアル接続待ち
while (!Serial) { yield(); }
delay(1000);
Serial.println("\n— RP2350 (Pico 2) SPI SD Card Test —");
// チップ情報の表示(ブログのスクショ用に便利です)
Serial.print("Board Target: ");
#if defined(ARDUINO_ARCH_RP2040)
Serial.println("RP2040 / RP2350 Architecture");
#else
Serial.println("Unknown Architecture");
#endif
// 1. SPIピンの割り当て (RP2350でもこの関数は有効です)
SPI.setRX(PIN_MISO);
SPI.setTX(PIN_MOSI);
SPI.setSCK(PIN_SCK);
Serial.println("Initializing SD card…");
// 2. SDカード初期化
// RP2350は高速ですが、まずは安定の16MHzで接続テスト
if (!sd.begin(PIN_CS, SD_SCK_MHZ(16))) {
Serial.println("Error: SD card initialization failed.");
Serial.println("- Check wiring?");
Serial.println("- Check format (FAT32)?");
sd.initErrorHalt(&Serial);
return;
}
Serial.println("Success: SD card initialized!");
// — 書き込みテスト —
Serial.print("Writing test.txt… ");
if (!myFile.open("test_rp2350.txt", O_RDWR | O_CREAT | O_APPEND)) {
Serial.println("Error: Failed to open file for writing.");
return;
}
// RP2350からの書き込みであることを記録
myFile.println("Hello from RP2350 (Pico 2)! SPI write test successful.");
myFile.close();
Serial.println("Done.");
// — 読み込みテスト —
Serial.println("Reading test.txt content:");
Serial.println("————————-");
if (!myFile.open("test_rp2350.txt", O_READ)) {
Serial.println("Error: Failed to open file for reading.");
return;
}
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
Serial.println("\n————————-");
Serial.println("Test Complete.");
}
void loop() {
// 何もしない
}
道具への投資がDIYを成功させる
数百円のSDモジュールを買うのも正解ですが、手元の変換アダプタを活用できれば、スロットの配置や向きを自由に決められるメリットがあります。 そして何より、「適切なフラックスを使えば、難易度の高いハンダ付けも一瞬で終わる」という経験値が得られました。
これで、大容量データの読み書き環境が整いました。 次回は、このSDカードアダプタでPIO SDIOを使った高速読み書きを試してみます。





