2010年4月4日日曜日

SDカード

手元に Ethernet Shieldがある。Arduinoに載せるだけでイーサネットI/F完成という、非常に便利なものだ。もちろんライブラリもサンプルコードも IDEに標準で用意されていて、サンプルの IPアドレスを設定すればすぐに動いた。
このシールドには目立つ部品未実装のスペースがある。以前は SDカードソケットが「NOT SUPPORTED」のシールとともに実装されていたようで、使えないから今はソケットも載せてないということのようだ。
探してみると SDカードの需要はあるようで、ソケット付きの Ethernet Shieldを改造した例もあった。また本家arduino.ccにも Ethernet Shieldで使用する例が紹介されているが、紹介されている方法には問題があるように思え、私はお勧めできない。

ちょうど SDカードソケットもあることだし、Ethernet Shieldとは別に SDカードの実験をしてみた。

SDカードは SPIモードでアクセスすると簡単に制御できる。いくつか見付かるライブラリも AVRの SPI機能を使っているので、先人の例にならって SPI接続とする。注意が必要なのは Duemilanoveの I/Oが 5Vなのに対し、SDカードは3.3V I/Oなので、電圧変換が必要ということ。実験ということで多くの方と同様に出力は抵抗分圧、入力は AVRの実力に期待することとする。
ライブラリに関してはRoland Riegelさんのものをベースにしたものが多く見られるが、今回はarms22さんのFatFs libraryを使わせて頂いた。Arduinoで扱うには非常に手軽でありがたい。

先例があるにも関わらず、最初は動かなかった。原因が 3点あり、分圧抵抗が大き過ぎ、電源コンデンサ不足、SDカードのフォーマットが問題だった。分圧抵抗もコンデンサも SDカードの物によっては問題にならない場合もあるが、安定動作させることを考えたらそれなりの回路が必要と思う。フォーマットは Windowsのエクスプローラでフォーマットした場合に非互換になる場合があるようで、SDアソシエーションで配布しているフォーマッタを使用して解決した。

次は Ethernet Shieldと共存させることを考えてみたい。

0 件のコメント:

コメントを投稿