[備忘]SDカードスロットモジュールをRaspberry pi picoのmicroPythonで認識させるときのコツ的なもの 2月 03, 2026 リンクを取得 Facebook × Pinterest メール 他のアプリ 別エントリに書いたUART WR BoxというSDカードにあるファイルをUART経由で読み込み、保存するモノをつくったのですが、その際にかなり苦労したのがSDカードスロットのカード認識だったので、次に思い出したときに同じような失敗を繰り返さないように、自分用の備忘として記録しておきます。 まず、最近はこの辺のつまづきはAIに聞くようにしています。 ただ、こういうややニッチなトラブルシューティングはAIも学習データが少ないのか、見当違いな答えを返すことも結構あったりします。 前は動いていたはずのSDカードモジュールですが、もともとmicroSDカードスロットを使っていました。ただ、ファイルの保存をSDで行ったあとに、PCに移したりする場合もあるので、SDカードの抜き差しは結構発生すると思っていました。 そうなると、microSDはちょっと使いにくいな・・・ということで、このカードスロットをそっくりそのままSDカードスロットに付け替えてみました。 ブツはAmazonなんかで普通に手に入るこれ↓です。 [](https://amzn.to/4bsOjgJ) もちろん、ユニバーサル基板にはんだ付けしているので、ハンダを吸い取っての換装です。やや手間はかかりましたが、換装も完了して、接続してみるとSDカードを全然認識しません。 AIに状況を聞いてみますと、AMS1117というレベルシフタ(電圧を5Vから3.3Vに降圧してくれる部品)を使っている安いSDカードスロットモジュールは出力信号が5VになっていたりしてMCU(Raspberry pi pico)を痛めることがあるので、できれば3.3Vを直接電源として使ったほうが良いとか、MicroPythonはC++と比べると初期化のタイミングなどがシビアなので、SPI通信の周波数を下げたほうが良いとか、いくつかの対策案を出してきました。 幸いにも、このSDカードスロットモジュールは5Vピンと3.3Vピンを持っており、どちらの電圧でも入力が可能です。実際のところは、SDカードスロットモジュールは3Vで駆動するため、5Vが入力された場合は前述のレベルシフタを使って3.3Vに変換して使うようなのですが、最初から3.3Vで入力すれば、レベルシフタをバイパスするので、レベルシフタの不具合などを気にする必要がないというのがメリットになるようです。 ただ、残念ながら3.3Vから入力するだけでは状況は変わりませんでした。 次に、SPI接続時の周波数です、通常、400Mhzくらいがデフォルトらしいのですが、10Mhzくらいに下げてやってみましょうというアドバイスがあり、試しましたがこれも効果なく。 結論から言うと、3.3V駆動で接続しても、SPI接続時の周波数を下げても認識できなかったのですが、どうも原因はスロット側ではなくて、カード(メディア)のほうだったのです。 SDカードのフォーマットは、Windowsでもエクスプローラなどで普通に行うことができますが、実はSDアソシエーションというSDカードの業界団体?標準化団体?から提供されているフォーマットアプリを使うと、認識するようになりました。 フォーマットアプリはこちら↓ [https://www.sdcard.org/ja/downloads-2/formatter-2/sd-memory-card-formatter-for-windows-download/](https://www.sdcard.org/ja/downloads-2/formatter-2/sd-memory-card-formatter-for-windows-download/) とはいっても、接続に使っていたSDカードは、フォーマットがおかしかったのかというと、別にWindows上では普通に認識されファイル内容を見ることもできていました。 そのため、SDカードのフォーマットが原因だっというのは、かなり気づきにくかったです。 確かに、以前このUART WR Boxを組んだときと、今回とでは使っているSDカードも違うものなので、そこも切り分けの対象になる、といえばそうなのですが、よもやPCのOS上で普通に認識しているメディアが原因なんて・・・という思い込みがどうしてもあったわけです。 なので、またしばらく間が空いて、このモジュールを使うときに同じようにハマる可能性はあるなと思って記録に残している次第です。 コメント
コメント
コメントを投稿