Go Down

Topic: MEGA2560 und SD Karte (Read 2528 times) previous topic - next topic

mde110

Sep 08, 2012, 06:48 pm Last Edit: Sep 17, 2012, 06:48 pm by Mardetuino Reason: 1
Hallo,

ich bin seit mehreren Stunden daran, den SD-Leser an meinem Board in Griff zu bekommen - bis jetzt ergebnislos.
Ich hoffe deshalb, dass mir jemand von euch helfen kann.

Zu aller erst eine einfache Frage, hat jemand von euch den SD-Leser am MEGA Board und den PINs 50-53 zum laufen bekommen?

Nach unzähligen Suchanfragen an das große weiße G musste ich feststellen, dass die konstellation MEGA Board und SD nicht so oft zu finden ist. Es wird von Software-SPI gesprochen, und von Bugs in den Libs etc...
Nichts hat mir wirklich weitergeholfen.

Die Beschaltung ist folgendermaßen:
MISO 50 --------> 10k ---------> 2k2 ----------> SD Pin 7 DAT0
SCK  52 --------> 10k ---------> 2k2 ----------> SD Pin 5 CLK
MOSI 51 --------> 10k ---------> 2k2 ----------> SD Pin 2 DI
CS   53 --------> 10k ---------> 2k2 ----------> SD Pin 1 CS

Es handelt sich um das 3,2" TFT Shield...

Momentan bin ich soweit, dass der Kartentyp erkannt wird. D.h.:
Ich verwende das Beispiel CardInfo und die zwei Karten die ich zur Verfügung habe (Sandisk Mikro SD 2GB, Samsung 8GB SDHC).
Die Sandisk wird als "SD1" erkannt
Die Samsung zuverlässig als "SDHC"

Daraus schlussfolgere ich, dass die Kommunikation generell funktioniert.
Erst bei diesem Punkt gibt es Probleme:
Code: [Select]
 // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
 if (!volume.init(card)) {
   Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
   return;
 }

Als Antwort kommt dann halt:
Could not find FAT16/FAT32 partition.
Make sure you've formatted the card


Das wars dann auch mit der weiteren Kommunikation.

Ich würde mich über eine Lösung wirklich freuen!
Codeschnipsel führe ich gerne umgehend aus!  8)

Nathax

Hallo,
ich habe bereits eine SD per selbstgebauten SD-Kartenleser am Mega2560 betrieben.
Dazu habe ich folgende Infos benutzt:





(http://arduino.cc/forum/index.php/topic,106728.0.html)

Code: [Select]

int PIN_CS = 11;      // CS (glaub ich frei wählbar)
int PIN_MOSI = 51;    // DI
int PIN_MISO = 50;    // DO
int PIN_CLOCK = 52;   // SCK


Villeicht helfen dir die oben genannten Infos ja weiter,
genaueres kann ich dir zu deinem Problem aber leider nicht sagen.

uwefed

Welche Bibiothek verwendest Du?
Grüße Uwe

mde110

Arduino 1.0.1 und dann das SD Beispiel

libraries\SD\examples\CardInfo\CardInfo.ino

Kickboxer

Hallo auch...

1.Mega mit sd shield an 50... läuft 1a
2. SD mit Widerständen statt Pegelwandler kann fehlerbehaftet sein.
3. Die Formatierung muss Standard entsprechen. Betriebssysteme machen dies nicht immer, so dass die eingelegten Karten nicht laufen. Bei Ladyada ist dies beschrieben.

Viele Grüße

Jörg
Mein erstes Tutorial für Anfänger:

youtube.com/watch?v=mRwV4UxsSGI

Kickboxer

Bitte schön:

http://www.ladyada.net/make/logshield/sd.html

Mein erstes Tutorial für Anfänger:

youtube.com/watch?v=mRwV4UxsSGI

mde110

#6
Sep 10, 2012, 07:19 pm Last Edit: Sep 10, 2012, 07:21 pm by Mardetuino Reason: 1
Also schon mal netten Dank für die Infos!

Nathax, hast du das jetzt auf die Pins 50,51,52,53 angeschlossen, oder mit Software SPI an den 10,11,12,13 gelassen?
Der CS/SS Pin ist frei wählbar. Dies ist nur das Aktiv-Schalten der Karte.


Kickboxer, verwendest du den Widerstands-Shifter oder den 74x125 Quad Buffer?
BTW: Formatieren hat keinen Erfolg gebracht.
Mich würde interessieren, was bei dir die folgende Ausgabe für Infos ausgibt:

Code: [Select]
cid_t cid;
 cid.psn = 0;
 cid.mid = 0;
 cid.pnm[0]=' ';
 cid.pnm[1]=' ';
 for (int i=0;i<5;i++) cid.pnm[i]=0;
 
 Serial.println("Lade SD CID/Info");
 Serial.print("readCID:");
 Serial.println(card.readCID(&cid));
 Serial.print("mid:");
 Serial.println(cid.mid);
 Serial.print("oid:");
 Serial.println(cid.oid);
 Serial.print("pnm:");
 for (int i=0;i<5;i++) Serial.print(cid.pnm[i], HEX);
 Serial.print("\n");
 Serial.print("psn:");
 Serial.println(cid.psn);
 Serial.print("crc:");
 Serial.println(cid.crc);


Bei mir siehts so aus:
Lade SD CID/Info
readCID:0
mid:0
oid:
pnm:00000
psn:0
crc:0

Bedeutet für mich also, dass die SPI Ebene noch nicht richtig funktioniert. So wie ich das in den LIBs sehe, kommuniziert die Sd2Card Klasse nur über den SPI per RAW Commands.

Ich werde demnächst die Widerstände ändern (auf 1,8k und 3,3k gegen Ground / sowie auch 4,7k und 10k gegen Ground) und dann auch das mit dem 74LVX125 testen.

mde110

So, ich habe nun vom großen R alles bekommen.
Mit dem 74LVX125 funktioniert es wunderbar. Mit der stabilen Konfiguration und dem Testaufbau konnte ich nun auch eine (minimum) Widerstandskonfiguration finden.

MEGA2560          Wid.            SD Pin       
MISO 50 --------> 2k2 ----------> SD Pin 7 DAT0
GND  ---------------------------> SD Pin 6 VSS2
SCK  52 --------> 2k2 ----------> SD Pin 5 CLK
3,3V ---------------------------> SD Pin 4 VDD
GND  ---------------------------> SD Pin 3 VSS1
MOSI 51 --------> 2k2 ----------> SD Pin 2 DI
CS   53 --------> 2k2 ----------> SD Pin 1 CS

MISO ist nur der "Rückkanal". Das Bedeutet die 3,3V von der SD gehen direkt in den Input vom µC. Zu Sicherheit sollte hier auch noch ein Widerstand in Reihe stehen, damit eine fehlerhafte Konfiguration (als Output) des PINs nichts abschießt.
Die Widerstandsbeschaltung ist nicht optimal, weil sie die Schutzdioden der SD "strapaziert". Es können ca. 0,8mA über die Dioden abfließen.

Ich werde die SD Applikation nur mit dem 3,3V Treiber verwenden, damit meine SD-Karten keinen Schaden bekommen und dann vielleicht nur ein Jahr durchhalten.

Go Up