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カードによって消費電流はバラバラなようです。

 

関連記事

no image

Arduino + USBホストシールド で ADK を試す(その1)

先日Google IOで発表された Android Open Accessory。みなさん知ってます

記事を読む

no image

PIC24FJ64GB002でADKを試す(その1)

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

記事を読む

no image

Arduino + USBホストシールド で ADK を試す(その3)

「Arduino + USBホストシールド で ADK を試す(その1)」では、Android上のア

記事を読む

no image

米粒AVRのEAGLEライブラリ

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

記事を読む

no image

S2 Resistor Color Code 公開しました。

このアプリは、抵抗のカラーコードから抵抗値を素早く見る為のAndroidアプリです。 4本帯と、5

記事を読む

no image

Softmodem Terminal 公開しました。

需要がどれほど有るのか疑問に思いつつ、以前のエントリ(AndroidでSoftModemを試してみた

記事を読む

Hello Tiny10

米粒AVRでI2C通信を使ってLCD表示

前の記事で紹介したI2Cライブラリを使った、LCDの表示のライブラリ的なもの  

記事を読む

no image

AndroidでSoftModemを試してみた

今回、ここで言うSoftModemとは、携帯電話のオーディオ端子(イヤホン・マイク端子)を利用し

記事を読む

no image

Android + Bluetoothドングル + PIC24F

@hrdakinori さんと言う方が、PIC24FとBluetoothドングルを使って、Andro

記事を読む

no image

オシロスコープを手に入れた

ついにオシロスコープを買っちゃいました。 と言っても、DSO QUADと言うポータブルタイプの

記事を読む

Arduinoで温湿度計 #2

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

Arduinoで温湿度計

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

ArduinoでSDカード

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

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

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

秋月の小型キャラクタLCD

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

PAGE TOP ↑