2010年4月5日月曜日

SDカードの出力

Ethernet Shieldではイーサネットの処理に WIZnet社の W5100という ICを使用しているが、この ICの制御は SPIで行なわれている。そして使用不可能とはなっているが、SDカードの制御は SPIではなく、通常のデジタル I/Oで行うようになっている。

もともと SPIは複数のデバイスが制御可能なので、信号線を共用できれば I/Oの節約にもなる。ところが少々やっかいなことに、SDカードの出力にはくせがあり、気を付けないと他のデバイスの出力と衝突する。このあたりの情報はChaNさんのMMCの使いかたが詳しい。

制御の工夫次第で衝突は回避できるようだが、Roland Riegelさんのライブラリではどうだろうか。実際の出力を見てみよう。



まず SDカード直結の場合。DOは出力がハイインピーダンスになったことが判るように、抵抗分圧で終端してある。SSが SDカードのセレクト信号でローアクティブ。連続したアクセス期間の前後で DOが開放されていない。拡大部分のように DOが開放される場合もあるが、このままでは他のデバイスとは共存できない。


















次は SSを使用して DOを切り離す仕組みを追加した場合。連続したアクセス期間の前後で DOが開放されている。もちろん拡大部分のようにアクセス期間中の非アクセス時も DOはが開放されている。これならば他のデバイスとの共存に問題はない。

もちろんこの状態で SDカードへのアクセスは問題ない。
ライブラリを修正しても対応は可能と思うが、互換性等を考えればハードウェアで対処するのが良いだろう。

0 件のコメント:

コメントを投稿