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

Atmel Studio 6

米粒AVR(ATtiny10)の開発を行う為に、Atmel Studio 6.0をインストールし

記事を読む

no image

Wimeji Client for Arduino

前回紹介したWimeji Client for WindowsXPをArduinoでやってみました。

記事を読む

no image

Softmodem Terminal 公開しました。

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

記事を読む

no image

米粒AVRでアナログ入力を試してみた

米粒AVR(ATtiny10)に搭載されている8ビット4チャンネルのアナログ入力を試してみました

記事を読む

no image

PIC24FJ64GB002でADKを試す(その2)

 前回「PIC24FJ64GB002でADKを試す(その1)」では回路の説明までしたので、

記事を読む

no image

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

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

記事を読む

no image

米粒AVRの動作周波数

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

記事を読む

no image

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

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

記事を読む

米粒AVT(tiny10) リモコンレシーバー

米粒AVRでリモコン受信処理

  米粒AVR(Tiny10)で赤外線リモコンを受信して処理をするサンプルを作ってみまし

記事を読む

no image

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

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

記事を読む

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

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

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

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

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

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

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

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

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

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

PAGE TOP ↑