Hallo,
ich habe mit der beiliegenden Schaltung an einem M324P eine SD-Card
angeschlossen.
Die Ansteuerung erfolgt mit dem Code von Ulrich Radig in der neuesten
Version 2_7.
uart_puts("Abbruch bei Commando1 (Return Code1)");
41
return(1);//Abbruch bei Commando1 (Return Code1)
42
}
43
}
44
uart_puts("init 2");
Ich benutze Software_SPI, die PIN-Belegung habe ich entsprechend
eingetragen.
Das Programm findet die Karte nicht und zeigt mir kein "init2".
Eine Überprüfung des CS-Signals nach "MMC_Write |=
(1<<MMC_Chip_Select);" brachte nur 1,6V, ist das nicht etwas wenig ?
Pete
So, habe noch einmal alles durchgemessen. Die LED hatte ich schon
abgelötet.
Nach dem Nachlöten einer Lötstelle am M32 bekomme ich auch 3,21V am /CS
Pin.
Das Programm erkennt die Karte (und eine Zweite) aber immer noch nicht.
>Das Programm erkennt die Karte (und eine Zweite) aber immer noch nicht.
Weitere Lötfehler ?
Was für Karten sind das denn ?
Eventuell ist der Code zu einfach für diese Karten gehalten.
Nicht alle Karten antworten grundsätzlich auf CMD1.
An welcher Stelle klemmt es denn ? Bei CMD0 oder CMD1 ?
Und ich mag es kaum sagen (weil ich dann gleich haue bekomme ;) :
Mit richtigen Pegelwandlern könnte es besser werden.
Ja, die Pegelwandler :-) Muss mir wohl doch mal einen max3378 bestellen,
aber die Platine ist jetzt bestückt.
Eine Alternative ist noch, alles mit 3,3V zu betreiben, aber das wäre
wirklich die letzte Möglichket, die ich nutzen möchte, weil noch ein LCD
angeschlossen werden soll.
Karten: Ich habe eine 32MB MMC, 2GB SD, 16MB SD sowie eine 64MB MiniSD
getestet.
Ausstieg ist bei dem CMD0 Kommando (return code 1).
>Ausstieg ist bei dem CMD0 Kommando (return code 1).
Da würde ich doch erst mal weiter Lötstellen kontrollieren.
Schreib dir einfach mal ein kleines Programm was nichts
anderes macht als die Leitungen zur Karte (einzeln) auf 1 zu setzen.
Dann nachmessen ob es pegelmässig passt.
Ein anderes Problem könnte die Software SPI sein.
Beim Init ist die möglicherweise zu schnell.
Versuchs mal mit dem kleinsten möglichen internen Takt vom ATmega.
Widerstandspannungsteiler: Böse Böse ! Ich hatte das gleiche Problem.
Hier http://www.shop.display3000.com/pi8/pi14/pd102.html (nach unten
scrollen) ist das Problem gut visualisiert.
Überbrücke doch einfach mal die Widerstände (oder löte zumindest die
Widerstände gegen Masse raus) und lass das Board mit 3,3 Volt laufen.
Dann geht es bestimmt. 16 Mhz werden evtl. eng, stell dann erstmal auf 8
Mhz.
Volker
Ich habe jetzt den Takt auf 8Mhz heruntergenommen und die Ports auf 1
gesetzt. Das klappt soweit.
Ich verwende folgendes Mapping:
#define SPI_DI 7 //Port Pin an dem Data Output der MMC/SD-Karte
angeschlossen ist
#define SPI_DO 5 //Port Pin an dem Data Input der MMC/SD-Karte
angeschlossen ist
#define SPI_Clock 6 //Port Pin an dem die Clock der MMC/SD-Karte
angeschlossen ist (clk)
#define MMC_Chip_Select 4 //Port Pin an dem Chip Select der
MMC/SD-Karte angeschlossen ist
#define SPI_SS 2 //Nicht Benutz muß aber definiert werden
Werde noch einmal 1Mhz probieren.
Hast du eine Massefläche unter dem MMC/SD Sockel ?
Damit hab ich mir auch schon mal selber ein Bein gestellt.
Wenn man die Karte reinschiebt gehen bei einigen Sockeln die
Kontakte runter bis auf die Platine.
Nein, keine Massefläche.
Bei 3,3V macht mein max232 schlapp. Leider habe ich kein max3232 hier
liegen :-(
Somit sind die debug-Möglichkeiten etwas eingeschränkt.
Korrektur:
Nicht der MAX232 macht schlapp, sondern der M324P. Wenn man die
Brown-Out-Detection auf 2,7V herabsetzt geht sogar ein max232 noch ein
bischen :-)
(indietischplattebeiss)
Die SD-Karte geht aber trotzdem nicht ... Gleiches Fehlerbild.
So, nach langer Pause habe ich mal wieder obiges Problem untersucht.
Ich habe alles auf 3,3V umgestellt und noch einen Kondensator (100nF)
direkt an den Kartenslot zwischen 3,3V und GND gelötet.
Außerdem habe ich auf die aktuelle Version 2.9 von Ulrich Radig
umgestellt und einen 7,37 Mhz Quarz eingelötet.
Den Sockel habe ich etwas angehoben und auf Kurzschlüsse überprüft.
Beim Einschalten leuchtet die LED4 an CS, also ein Zugriff findet wohl
statt.
Bei dem folgenden Code aus der mmc.h steigt das Programm aus. Ich
verwende Software SPI:
Elektrisch scheint die Karte richtig angeschlossen zu sein. Ich habe die
Pins an der SD-Karte jeweils einzeln gesetzt und wieder auf Low gezogen,
das hat funktioniert.
In den write routinen haben ich nach jeden Setzen des Signals ein
_delay_us(2) eingefügt, hat aber auch keine positive Wirkung gezeigt.