読者です 読者をやめる 読者になる 読者になる
一人もくもく会 α verでサービス開始しました。

arduinoでSDカード操作

arduinoでSDカードの操作を行ってみた。

・せっかくなのでarduino単体でできたら、
出来たばっかのarduino ISPシールドでも可能かどうか試す

・秋月のSDカードスロットDIP化モジュールを使用
繋ぎ方は
3.3VとGNDarduinoの3.3VとGND
SDI(=CMD/SDI)…D11
SD0(=DAT0/SD0)…D12
CLK…D13
CS…D4
CDはCard Detect。
よくわからないのでLEDとつないでみたら
SDカードが入っていない時だけ点灯している。

・同じく秋月のマイクロSDカードスロットDIP化キットも試した。
CD/DAT3…D4
CMD…D11
CLK…D13
DAT0…D12

とりあえずarduino IDEの適当なSDカードサンプルを幾つか実行してみたら
問題なく上手く行った。
最終的に下記プログラムをarduino ISPで試したら上手く行った。
プログラムがはじまったらLEDが5回光り、
SDカードの認識に成功したら5回光り、
最後にtest.txtに記述されている数値の数だけ光る。
今回は3とだけ入力して保存しておいた。

#include <SD.h>

const int LED = 9;

File myFile;

void ledCount(int count) {
  for (int i = 0; i < count; i++) {
    digitalWrite(LED, HIGH);
    delay(200);
    digitalWrite(LED, LOW);
    delay(200);
  }
}

void setup()
{
  int number;
   pinMode(LED, OUTPUT);
  ledCount(5);
   
  if (!SD.begin(4)) {
    return;
  }
  ledCount(5);
  
  myFile = SD.open("test.txt");
  if (myFile) {
    if (myFile.available()) {
      
    	char c = myFile.read();
      number = c - '0';
    }
    // close the file:
    myFile.close();
    delay(1000);
    ledCount(number);
  } else {
    digitalWrite(LED, LOW);
  }
}

void loop()
{
	// nothing happens after setup
}

ただ、最初試した時は書き込み時に妙なエラーが発生し、
最初の5回の点滅しかしなかった。
原因は未だにわからない。
avrdude: verification error, first mismatch at byte 0x0249
0xc0 != 0x24
avrdude: verification error; content mismatch
こんなの。
線を挿し直したりなんだかんだやってたらいつの間にか出来るようになった。
線が外れかけていたか、逆に指しているせいで電力の関係でうまくいかないのか、
詳しくはわからない。

microSDでもやってみたので
再度いろいろ試してみると、下記みたいな感じ。
・回路つないだままでやるとエラー発生
・全部線を外すか、SDカードモジュール外すと書き込み可能。
(ここでdelayしておいてその間にSDカードモジュールを指すと上手く動く)
・上記で書き込んだ後、線を全部さしたままでも上手く行くときといかない時がある。

という感じなので、回路があるせいで信号が別で消化されてしまうか
ぐちゃぐちゃになってしまうか、というような原因ぽい。
シールドにソケットつけて回路つなげたまま簡単開発、
という最初のアイデア自体がそもそも間違っているのかもしれない。
なるべく10〜13ピンは使用をさけるか、4セットのDIPスイッチがあると便利かもしれない。

ちなみにPICで読む方法もざっと見てみたが大変すぎる…。
MLAも見てみたがPIC24しか対応してないし…。
というか、仕様的に512バイトより多くメモリが必要なので
それを満たしているICを持ってないとダメだ。