最近入手した新Ethernet Shield(Ver.5)のSDカードを動作させるのに少し苦労したのでメモを残す。

新Ethernet Shieldのピンアサインは少し違う

SDカードアダプタのテストでArduinoにfat16libをインストールした。SDCardなどの他のライブラリィでも変更なしに動いた。そこで、新Ethernet ShieldでSDカードもSPIだろうから、SDカードアダプタの時と同じピンアサインで動いてるのだろうと予想して、何も修正せずにテストしたところ動作せず。

fat16libなどのライブラリィが想定してるピンアサインは以下の通り

D10[PB2(SS)] <—-> CS
D11[PB3(MOSI)] <—> DI
D12[PB4(MISO)] <—> DO
D13[PB5(SCK)] <—> CLK
※左はArduino(CPU)、右はSDカードの端子

素直にCPUのピンの機能なりに、アサインしてます。

ピンアサインが不明だったので、回路をネットで探し調べてみると、やはりSDカードのCS端子のアサインが違いました。オイオイ…

新Ethernet Shieldの図面

新Ethernet Shieldの図面

矢印で示してるとこがSDカード関係の端子。図面から調べたピンアサインは、以下の通り

D4[PD4(XCK)] <—-> CS
D11[PB3(MOSI)] <—> DI
D12[PB4(MISO)] <—> DO
D13[PB5(SCK)] <—> CLK
D14[PC1(ADC0)] <—> WriteProtect検出信号
D15[PC2(ADC1)] <—> カード検出信号
※左はArduino(CPU)、右はSDカードの端子

となってます。
しかしWriteProtect検出信号って、microSDにライトプロテクトのSWはないと思うけどコレは何だろうか?
しっかりと回路図にはある。

ピンアサインが違う理由

W5100もSDカードも共にSPIでCPUと通信してます。SPIでW5100もSDカードの信号が競合しないように選択するのがSS端子。W5100が切り替えを行うので、SDカードは、D4に変更したと推測します。(自信がないので間違えがあったら指摘してください。)

修正ポイント

新Ethernet ShieldでSDカードを動作させるには、ライブラリィの変更が必要です。

ピンアサインを修正するだけなのでたいしたことはないのです。fat16libならSdCard.hのSSを定義してる箇所を修正するだけ…

#define SPI_SS_PIN 10
 ↓に修正
#define SPI_SS_PIN 4

fat16lib以外色々ライブラリィがあると思いますが、SSの宣言を修正する必要がありそう。

SDカードに書き込みしてる新Ethernet Shield

SDカードに書き込みしてる新Ethernet Shield

おわりに

新Ethernet Shieldは、WebにアクセスしながらSDカードに読み書きが出来ると思うのだが、さらに検証が必要なようだ。

追記(2010年10月13日)

新Ethernet ShieldのSDカードの件、ネットに記事がありました。既に解決済みだったのですね。f(^_^;;;
Arduino Ethernet+SD“です。
“Arduino Ethernet+SD”の記事を元に追テストをしてみた。問題なく動作した。