2018-10-30に更新

arduinoでSDカード操作

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

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

・秋月のSDカードスロットDIP化モジュールを使用
繋ぎ方は
3.3VとGND…arduinoの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とだけ入力して保存しておいた。

|c|

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を持ってないとダメだ。

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント