Gast
#2151306
Moin leute. Eigentlich viel zu schönes Wetter um sich mit bockigen SD-Karten rumzuschlagen ^^. Aber naja. Meine Aufgabe besteht immo darin, eine SD-Karte an einen AT89C51RE2 per SPI anzubinden. An sich scheint das auch in gewisser Weise zu funktionieren. Aber ich bin grad bei einem Punkt wo ich einfach nicht weiterkomme. Der SPI-Bus des AT89C51RE2 läuft mit dem kleinsten einstellbaren Takt. Cpol und CPha sind jeweils auf 1 gesetzt. Mein Problem liegt in der Initialisierung der Karte. Laut des "Simplyfied_physical_layer_spec.pdf" von Sun, soll man zuerst ein CMD0 senden und auf die Antwort von R1 warten welches idealerweise ein 0x01 beinhaltet. Vorher hab ich 10x 0xff gesendet damit die Karte 80 Takte bekommt. Dann schick ich ein CMD8 mit dem Parameter 0x1AA (Spannungsbereichsgedöns usw). Als Antwort erhalte ich im 1. und 2. Byte des OCR-registers ein 0x01 bzw ein 0xAA. (Also so wies sein soll). Weil ja die Antworten von der SD_Karte (zumindest bei den ersten zwei Komandos) richtig ankommen, geh ich davon aus das die Kommunikation per SPI an sich funktioniert. So. Jetzt soll man laut dem oben genannten PDF ja ein ACMD41 senden. Ich geh also hin und schicke zuerst ein CMD55 und dann ein ACMD41. Dieses ACMD41 gibt mir nun Rätsel auf. CMD55 gibt ein 0x01 zurück. (In idle mode =1). ACMD41 hab ich einmal mit HCS-Bit und einmal ohne versucht. Mit dem 30. bit gesetzt erhalte ich die Antwort 0xe1. D.h. alle Error-flags gesetzt und immer ncoh im idle. (Was mich wundert ist, das sogar das MSB auf 1 is, was laut PDF immer 0 sein soll ^^) Schick ich aber ACMD41 mit allen Bits auf 0, bekomm ich ein 0xe0 zurück und bei dem nächsten, vom SPI-Master, gesendeten 0xff ein 0x7f. HÄÄÄ? ^^ An sich soll man ja so oft CMD55 + ACMD41 senden, bis irgendwann dieses idle-flag auf 0 ist. Nur passiert das bei mir auch nach 10000 durchläufen nicht. Irgendwas stimmt da nicht. Ich bin echt langsam ratlos. Ich hab auch schon die anderen Beiträge im Forum gelesen, aber das hat mir nciht geholfen. Aso. Ich benutze eine etwas meinem µC angepasste Form der PetitFS-Bibliothek von ELM. Wenn ich den CPOL und CPHA auf 0 setze, bekomm ich manchmal seltsamme Daten vond er SD-karte zurück. Meine Pegelwandlung von 5V auf die 3,3 der karte hab ich mit einem schnellen Komperator realisiert. Die Signale sehen auf beiden Seiten gut aus (gemessen mit dem Oszi). Also da erwarte ich eher weniger Probleme. Ich wär für eine Idee oder ein Tip echt dankbar. Mir geht die SD-Karten-geschichte langsam auf die nerven. Aso ich hab hier 3 verschiedene SD-Karten liegen. Alle 3 funktionieren am PC ohne probleme.


