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

米粒AVRでシリアル通信(ただし送信だけ)

米粒AVR(ATtiny10)にUART機能は搭載されていないので、シリアル通信を行う為には自前

記事を読む

no image

Wimeji Client for Arduino

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

記事を読む

no image

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

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

記事を読む

Arduinoで温湿度データロガー

Arduinoで温湿度計 #2

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

記事を読む

no image

米粒AVR(ATtiny10)

通称「米粒AVR」で知られるTiny10を使ってみたくて、秋月の通販で買ってみました。 超小型

記事を読む

no image

SoundIRModemライブラリのサンプル

 SoundIRModemライブラリは、米粒AVR(Tiny10)とAndroid端末をイ

記事を読む

Raspberry Pi

Raspberry Piを買った

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

記事を読む

米粒AVRで温度計

米粒AVRで温度計(STTS751使用)

前回までに紹介したI2CライブラリとLCDライブラリを使って作る、温度計のサンプルです。 温度

記事を読む

no image

PIC24FJ64GB002でADKを試す(その1)

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

記事を読む

no image

気になる物

HT-03Aで使えるのかどうかは知らないけど、Bluetooth-シリアルモジュール(BT-MOD1

記事を読む

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

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

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

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

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

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

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

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

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

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

PAGE TOP ↑