ArduinoでSDカード

公開日: 電子工作 | ,

ArduinoでSDカード

電子工作で大量のデータを保存する方法を調べていると、 Arduinoでも比較的簡単にSDカードを読み書きできるらしいことが分かった。
今回は、それを試してみました。 

 

SDカード

SDカード・マイクロSDカード

SDカードには、通常サイズのSDカードと、miniSDカード、microSDカードと3種類存在しています。
現在良く使っているのは、通常サイズのSDカードとmicroSDカードでしょう。(miniSDってどこ行ったんでしょうね)

端子

SDカード、マイクロSDカード、若干の違いは有るものの、カードから出ている端子はほぼ共通しているようです。

SDカード 端子

マイクロSDカード 端子

SD microSD 機能 SPIモード Arduino UNO
9 1 DAT2    
1 2 DAT3 CS (SS) D4※
2 3 CMD DI (MISO) D11
3 - VSS    
4 4 VDD VDD 3.3V
5 5 CLK SCK D13
6 6 VSS VSS GND
7 7 DAT0 DO (MOSI) D12
8 8 DAT1    

※ArduinoのCS端子は変更可能、その他は変更不可。

 

変換基板

AE-MICRO-SD-DIP AE-MICRO-SD-DIP

今回は、ターゲットをマイクロSDカードに絞って、秋月電子のマイクロSDカードスロットDIP化キットを利用しました。
ブレッドボードで利用するのに便利です。

 

抵抗で分圧して接続

SDカードの動作電圧は2.7~3.6Vと決められている。対して(一般的な)Arduinoは5V。
この電圧差をなんとかしないといけないのですが、簡単な方法として、それぞれの信号を抵抗で分圧して接続する方法が良く利用されているようです。

ArduinoでSDカード

 

プルアップ+ダイオード接続

抵抗で分圧する方法以外に、プルアップ+ダイオードを使って接続する方法も良く利用されているようです。

ArduinoでSDカード

ちなみに、秋月電子で扱われている通常サイズのSDカード変換基板(SDカードスロットDIP化モジュール)には、基板上でプルアップ抵抗が結線されているので、この方法を使わざるをえない。

 

プログラム

Arduinoには、便利なSDカード・ライブラリがあります。
また、サンプルスケッチも用意されているので、今回はサンプルスケッチを使って動作確認を行います。

ArduinoでSDカード

メニューのファイル→[スケッチの例]→[SD]で、

  • CardIndo
  • Datalogger
  • DumpFile
  • Files
  • listfiles
  • ReadWrite

これら6種類のサンプルスケッチが用意されているので、この中から適当に選んでSDカードの読み書きが出来ることを確認しました。

サンプルスケッチによっては、CS信号ピンの設定が4番ピンが利用されていたり10番ピンが利用されていたりバラバラなので、回路に合わせてソースを変更するなり、ソースに合わせて回路を変更するなり、要チェックです。

 

SDカード抜き挿し

SDカードの通電時の突入電流は割りと大きいらしい。
そのことが以下のリンクの端子処理と活線挿抜の項で述べられている。

MMC/SDCの使いかた – elm-chan.org

つまり、SDカードの抜き差し時にはその突入電力によってArduinoにBOR(低電圧リセット)が発生すると。

実際に私の手持ちのArduinoで試してみると、古いDuemilanoveではBORが発生するが、UNOだとBORは発生しませんでした。
この違いは、DuemilanoveはFTDIのUSBシリアル変換から3.3Vの電圧を取っているのに対して、UNOは3端子レギュレターから3.3V取っている違いなのかな?と考えています。
(Duemilanoveでは、BORがFTDIのチップで発生してPCとの接続が切断されてしまうので結構面倒です。)

UNOの方でも、もしかするとSDカードによっては発生するかもしれないので、SDカードの抜き差しには何等かの対策を考慮する必要があるかもしれません。
とりあえず、仕様としてSDカードの抜き差しは禁止としておくとか・・・

 

消費電力

今回、2枚のSDカードで試したところ、アイドル状態で1枚は約10mA、もう1枚は約15mA程度の電流を消費することが分かりました。
(自作の電圧・電流計なので精度は高くありませんのであくまで参考程度で見てください。)

ArduinoでSDカード
Arduino UNOで、カードを抜いた状態で55mA流れています。

ArduinoでSDカード
1枚目のSDカードでは66mAに上昇

ArduinoでSDカード
2枚目では70mAまで上がりました。

当たり前なのでしょうが、SDカードによって消費電流はバラバラなようです。

 

関連記事

Raspberry Pi - Ethernet

Raspberry Pi インターネット接続

Raspberry Piをインターネットに接続してみた。 有線で接続(Ethern

記事を読む

soundIR 受信機 回路図

赤外線リモコン受信機(イヤホンジャック接続)の回路

  前回からだいぶと時間が経ってしまっていますが、今回はイヤホンジャック接続のリモコン受

記事を読む

no image

米粒AVRで小型8連ナイトライダーを作ってみた

米粒AVR(ATtiny10)を2つ使って、8つのLEDを順番に点灯しています。 &nbs

記事を読む

no image

米粒AVRのEAGLEライブラリ

EAGLEを使って米粒AVR(ATtiny10)の回路図を書こうと思ったら何か様子がおかしい。

記事を読む

no image

AVRISPmk2

米粒AVR(ATtiny10)のプログラム書き込み用にAVRISPmk2を購入しました。 先人

記事を読む

Raspberry Pi

Raspberry Piを買った

先日、Raspberry Pi(ラズベリーパイ)を買いました。 Raspberry Piは噂で

記事を読む

no image

PIC24FJ64GB002でADKを試す(その1)

先日、MicrochipからPIC向けのAndroid Open Accessoryのライブラリが公

記事を読む

Arduinoで温湿度データロガー

Arduinoで温湿度計 #2

今回は、前回作った温湿度計にRTCモジュールとSDカードアダプタを取り付けて温湿度データロガーを

記事を読む

soundIR 送信機

赤外線リモコン送信機(イヤホンジャック接続)の回路

前回は受信機で、今回は送信機を作ってみました。 受信機と違って、送信機の作成は少し面倒です。

記事を読む

no image

米粒AVRの動作周波数

  米粒AVR(ATtiny10)のデフォルトでは内臓発振器利用の1MHzが指定されてい

記事を読む

Arduinoで温湿度データロガー
Arduinoで温湿度計 #2

今回は、前回作った温湿度計にRTCモジュールとSDカードアダプタを

Arduinoで温湿度計
Arduinoで温湿度計

秋月電子の温湿度モジュールを使って、温湿度計を作ってみました。 以前

SDカード・マイクロSDカード
ArduinoでSDカード

電子工作で大量のデータを保存する方法を調べていると、 Arduin

秋月電子 リアルタイムクロック(RTC)モジュール
秋月のリアルタイムクロック(RTC)モジュール

今回は秋月電子のI2C接続のリアルタイムクロック(RTC)モジュールを

秋月電子 キャラクタLCD
秋月の小型キャラクタLCD

今回秋月電子で売られている小型のキャラクター液晶2種を買ったので、

PAGE TOP ↑