SD Karte on Ethernet Shield

Hallo Forum,

jetzt habe ich doch noch eine Frage zu dem SD-Carten Sockel auf dem Ethernet Shield.

Ich weiß das SD-Karten nicht supportet werden!

Aber, werden denn von der SD Karte noch mehr Pins belegt als von dem Ethernet Shield?

Werden denn neben den Pins 10-13 nocheinmal 4 Pins benötigt um die SD-Karte auf dem Shield anzusprechen?

regrads Kirk

SD Karten laufen idR ueber die SPI Pins, also dieselben wie das Ethernetgedoens auch. Dazu kommen noch GND und 3V3

Also gleichzeitig?

über die Pins 10-13 kann ich gleichzeitig Ethernet und SD ansprechen???

nein. Entweder du steuerst mittels SPI den Ethernet Port oder die SD Karte. Leider geht das nicht anders (soweit ich weis jedenfalls)

gibt es denn eine Notwendigkeit das die SD-Karte an SPI hängt und so Ethernet blockiert?

Die SD-Karte kann ich doch an vier beliebeige DigitalPins hängen, oder?

regards Kirk

Nein, soweit ich weis nicht. Jedenfalls widerspricht dem, dass alles, was ich bislang zu SD Karten gelesen habe SPI Ansteuerung vorraussetzte - und das geht (afaik) nur ueber diese Pins, wenn es eine SoftSPI Loesung gaebe waer ich extrem happy ,0)

hmm,

ich habe da mal das hier ausgegraben:

Der Treiber kann die MMC/SD-Karte in einen Software und Hardware SPI Mode betreiben. Die MMC/SD-Karte kann an einen beliebigen Port angeschlossen werden(Software-SPI) oder am SPI-Bus(Hardware-SPI). Des weiteren beinhaltet nun der Source Code die Unterstützung von FAT16 (Read Only). Bisher wird das Lesen von Files und Anzeigen der Directorys unterstützt.

EDIT:

so einfach scheint es dann doch nicht zu sein :( Ob man mit einem extra "Treiberchip" SD ohne SPI zum fliegen bekommen könnte?

SD-Karten können über SPI oder über das proprietäre 4-Bit-Interface [1] angesteuert werden.

Für Software-SPI gibt es mehrere Lösung hier im Forum, weil die SD-Karte auf dem Ethernet-Shield nach dem 4-Bit-Interface angeschlossen ist und somit nicht die Hardware-SPI-Pins des AVRs benutzt.

Hier gibt es auch einen Hardware-Hack zum Umlegen der SPI-Pins der SD-Karte auf dem Ethernet Shield: http://translate.google.at/translate?u=http%3A%2F%2Fwww.geocities.jp%2Fjun930%2Fetc%2Farduinosd.html&sl=ja&tl=en&hl=de&ie=UTF-8

[1] http://www.mikrocontroller.net/topic/83407

Gruß Andreas

was soll denn dieses "proprietäre 4-Bit-Interface" sein und wieviel Pins belegt das ?

regards Kirk

Das normale Interface einer SD-Karte. Steht alles in dem Link aus meinem letzten Post oder in der “Simplified Version of Physical Layer Specification” der SD Card Association:
http://www.sdcard.org/developers/tech/sdcard/

Gruß
Andreas

ah ok,

wie ist denn der SD Port auf dem Ethernet Shield verdrahtet? Gibts da auch einen Schaltplan von? Dann wirds vielleicht klarer...

regards Kirk

Auf der Seite zum Ethernet Shield gibts n pdf und sogar eagle files.

Auf der Seite zu SD Karten sind auch nochmal die Pins aufgelistet.

Der SD Slot ist wohl also folgendermaßen angeschlossen: 3 => DAT0 4 => DAT1 5 => DAT2 6 => DAT3 8 => CMD 9 => CLK

GND + 3,3V sind ja eh da.

Mir erschliest sich aber nicht ganz warum der Kartenslot nicht funktionieren soll. Gibts da irgendwo nen Link was das Problem ist?

Am besten wäre natürlich die Karte übers Hardware SPI anzusprechen, schon allein um die ganzen Pins zu sparen, aber da gibts wohl irgendwelche Bugs im WIZnet chip der das SPI kaputt macht.

Ansonsten wär wohl die Software SPI Variante am besten weil sie zumindest 2 Pins spart. Das müsste doch über die vorhandenen Verbindungen funktionieren. Woher weiss die Karte dass sie SPI sprechen soll?

Ich habs bis jetzt noch nicht zusammen zum läufen gebracht. Da gibts wohl sowas wie Software SPI aber Daten auf SD zu schreiben und per Ethernet rauszuschicken hat noch nicht gefunzt.

Gruß Kirk

sdfatlib unterstützt mittlerweile von haus aus soft-SPI allerdings mit dem MEGA pinout.

Ich kann es leider nicht testen da ich zzt. kein unmodifiziertes Ethernetshield da habe.

Aber in der Theorie müsste es funktionieren wenn man in der Sd2Card.h folgendes ändert.

#define SOFTWARE_SPI

direkt am Anfang einfügen.

Und diesen Teil:

#else // SOFTWARE_SPI
// define software SPI so Mega can use unmodified GPS Shield

#define SOFT_SPI_SS_DDR  PIN10_DDRREG
#define SOFT_SPI_SS_PORT PIN10_PORTREG
#define SOFT_SPI_SS_BIT  PIN10_BITNUM

#define SOFT_SPI_MOSI_DDR  PIN11_DDRREG
#define SOFT_SPI_MOSI_PORT PIN11_PORTREG
#define SOFT_SPI_MOSI_BIT  PIN11_BITNUM

#define SOFT_SPI_MISO_DDR  PIN12_DDRREG
#define SOFT_SPI_MISO_PIN  PIN12_PINREG
#define SOFT_SPI_MISO_BIT  PIN12_BITNUM

#define SOFT_SPI_SCK_DDR  PIN13_DDRREG
#define SOFT_SPI_SCK_PORT PIN13_PORTREG
#define SOFT_SPI_SCK_BIT  PIN13_BITNUM

#endif // SOFTWARE_SPI

auf die richtigen Ports umbiegt:

#else // SOFTWARE_SPI
// define software SPI so Mega can use unmodified GPS Shield

#define SOFT_SPI_SS_DDR  PIN6_DDRREG
#define SOFT_SPI_SS_PORT PIN6_PORTREG
#define SOFT_SPI_SS_BIT  PIN6_BITNUM

#define SOFT_SPI_MOSI_DDR  PIN8_DDRREG
#define SOFT_SPI_MOSI_PORT PIN8_PORTREG
#define SOFT_SPI_MOSI_BIT  PIN8_BITNUM

#define SOFT_SPI_MISO_DDR  PIN3_DDRREG
#define SOFT_SPI_MISO_PIN  PIN3_PINREG
#define SOFT_SPI_MISO_BIT  PIN3_BITNUM

#define SOFT_SPI_SCK_DDR  PIN9_DDRREG
#define SOFT_SPI_SCK_PORT PIN9_PORTREG
#define SOFT_SPI_SCK_BIT  PIN9_BITNUM

#endif // SOFTWARE_SPI

Habe es mittlerweile testen können. Funktioniert wunderbar mit dem unmodifizierten Ethernetshield.

Ausserdem habe ich hier mal zusammengeschrieben wie man das EthernetShield modden muss um den Hardware SPI zu nutzen.

Hallo Duckula,

hast du getestet, welcher Datendurchsatz mit Soft-SPI bei der SD-Karte möglich ist? - Mich würde interessieren ob es da große Unterschiede zu Hardware SPI gibt.

Ich habe gerade die Hardware-SPI-Lösung zusammengebastelt (mit Seeeduino Mega) - siehe hier: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1256558171/15

Funktioniert jetzt endlich zufriedenstellend. Aber es muss dafür einiges umverdrahtet werden.