SD.begin()に失敗するときの対処法

Arduino UNO R3に秋月電子のmicroSDカードDIP化キットを使ったときに割と頻繁にSD.begin()に失敗することがあったのですが、以下で解決しましたのでご参考になればと思いメモしておきます。

回路が間違ってないか確認する

これは最低限といった感じではありますが、結線が間違っていると動作しないばかりか破損する可能性もありますので、回路が間違っていないか確認しましょう。

特に5V動作のArduino UNOなどで使用する場合は以下の点にも注意しましょう。

  • VDDは3.3Vから取る
  • 各ピンとの間に分圧回路を入れて3.3Vに電圧を下げて入力する

コンデンサーを入れる

ArduinoでSDカードを操作するサンプルコードや解説はたくさんのサイトですでに書かれているのですが、どのサイトにもさらっと書かれていることが多いのがこれ。

中には入れてない回路もたくさん見かけますが、0.1〜100μFくらいのコンデンサーをVDD(DIP化キットの場合は4番ピン)とGND(DIP化キットの場合は3番ピンまたは6番ピン)の間に入れてあげると動作が安定するようです。

microSDカード自体を疑う

開発中は何でもいいやという感じで、とりあえず手元にあった昔のスマホに使っていた2GBのmicroSDカードを使っていたのですが、なぜかほぼランダムにSD.begin()に失敗しました。

カードを別のものに変えたらこの現象は発生しなくなりました。カードの相性なのか古いカードなので寿命なのかはわかりませんが、もしお悩みの方がいたらカードを変えてみるのもいいかもしれません。意外と盲点でした。

なお、microSDHCカード(つまり規格上は32GB)までしか対応していないのでご注意ください。そんなに大容量のデータを扱うこと自体ないとは思いますが…。