Hi, ich möchte eine SD-Karte mit einem ATMEGA8A in Betrieb nehmen. www.ulrichradig.de gab hierzu die Anregung. Das Ganze funktioniert aktuell jedoch nicht und daher hoffe ich auf kompetente Hilfe hier aus dem Forum. ## Konfiguration ## Ich verwende einen ATMEGA8A µC der auf 4 MHz läuft. Die Betriebsspannung liegt bei 3,3 V, damit ich keinen Pegelwandler benötige. Im Anhang befindet sich ein Ausschnitt aus meinem Schaltplan, wie er auch auf der Platune umgesetzt wurde. Wie im Schaltplan ebenfalls zu erkennen ist, habe ich den SD-Kartenleser nicht an das SPI gehängt. Ich möchte gern ein Software-SPI realisieren. Die Frage "warum?" kann ich nur damit beantworten, dass ich der Übersichtlichkeithalber alles was ich mit dem µC ansteuer gern Portseitig getrennt haben möchte. (Ich weiß, dass ich auch einen BUS mit CS aufbauen könnte.) Es wurden 4 verschiedene SD-Karten ketestet: 8 GB Sandisk, 2 GB HAMA, 1 GB Verbatim, 256 MB NoName. Softwareseitig möchte ich die Bibliothek von Ulrich Radig verwenden und habe diese auf meine µC-Ports angepasst. ## Problem ## Die Problembeschreibung kann recht kurz erfolgen: Es funktioniert nicht! Ich hole mir den ERRORCODE, den die mmc_init() zurückgibt ab und gebe diesen auf einer 7-Segment Anzeige aus: Fehlercode "1". Wenn ich die Bibliothek richtig verstehe, dann schlägt also schon die erste Initialisierung fehl. ## Fehlersuche ## Leider habe ich nicht "allzumodernes" Equipment zur Verfügung. Ein HAMEG 20 MHz Oszilloskop und ein Multimeter müsen es tun. Ich habe mir mit dem Oszi die Di(CMD), Do, CLK sowie den CS angeschaut. Beim CS findet definitiv ein Pegelwechsel statt, die Karte wird also ausgewählt. Ein Clock liegt ebenfalls an der Karte, das kann man mit dem Oszilloskop einigermaßen gut erkennen. Zumindestens sind Taktflanken erkennbar - zwar nicht übermäßig periodische Flanken, aber sie sind da. Auf der DI(CMD)-Leitung passiert ebenfalls allerhand! Auf der DO-Leitung der Karte passiert auch kurz etwas. Allerdings lässt sich mit dem HAMEG nur schlecht erkennen, ob die Leitung tatsächlich komplett auf 0V heruntergezogen wird. Es sind aber einige Taktflanken zu erkennen. Okay ich weiß, dass es bereits allerhand zu diesem Thema hier im Forum gibt. Ja, ich habe die Suchfunktion benutzt. Hierbei bin ich unter anderem darauf gestoßen, dass manche SD-Karten eine niedrigere Initialisierungsfrequenz fahren (400 kHz ?) Ein Heruntertakten des µC's brachte keinen Erfolg. Ich bin mir absolut unsicher, ob das Problem Hard- oder Softwareseitig zu suchen ist. Daher wäre ich froh, wenn ich ein paar gute Tipps bekommen könnte. Vielen Dank und Viele Grüße Elko
Hallo! Ich hatte mit diesem Code auch meine Probleme. Probier mal diesen hier (sd_raw.*), der hat bei mir funktioniert: http://www.roland-riegel.de/sd-reader/ Darin werden SDHC-Karten anders behandelt, vielleicht liegt es daran. Viel Glück! :)
@ H. O. (elko) >Ich verwende einen ATMEGA8A µC der auf 4 MHz läuft. Die Betriebsspannung >liegt bei 3,3 V, damit ich keinen Pegelwandler benötige. Im Anhang >befindet sich ein Ausschnitt aus meinem Schaltplan, wie er auch auf der >Platune umgesetzt wurde. Es fehlt ein Pull-Up von ca 2-4K an MISO! >Wie im Schaltplan ebenfalls zu erkennen ist, habe ich den SD-Kartenleser >nicht an das SPI gehängt. Ich möchte gern ein Software-SPI realisieren. Warum? Ist SPI in Hardware zu schnell? Zu einfach? >Softwareseitig möchte ich die Bibliothek von Ulrich Radig verwenden und >habe diese auf meine µC-Ports angepasst. Ich hab vor einigen Monaten die von ELM Chan benutzt, die lief auf Anhieb! >Bibliothek richtig verstehe, dann schlägt also schon die erste >Initialisierung fehl. Weil der Pull-Up fehlt! Der Datenausgang der SD-Karte ist vor der Initialisierung ein Open Drain!
Hi, Vielen Dank schon einmal für die Antworten. Falk Brunner schrieb: > Weil der Pull-Up fehlt! Der Datenausgang der SD-Karte ist vor der > Initialisierung ein Open Drain! Ich habe bereits versucht den internen Pull-UP zu verwenden. Keinen erfolg damit gehabt. Extern hatte ich 5.6k dran, das hat ebenfalls nichts verändert. Vielleicht war ich noch ein wenig zu Hochohmig (glaube ich zwar aktuell nicht aber es ist immerhin einen Versuch wert. Matthias H. schrieb: > Ich hatte mit diesem Code auch meine Probleme. Probier mal diesen hier > (sd_raw.*), der hat bei mir funktioniert: > http://www.roland-riegel.de/sd-reader/ Die Bibliothek habe ich mir auch schon angeschaut. Wenn ich das richtig gesehen habe, dann unterstützt die aber nur Hardware-SPI? Oder habe ich das falsch gesehen? Falk Brunner schrieb: > Warum? Ist SPI in Hardware zu schnell? Zu einfach? Bei beiden Aussagen stimme ich dir zu. In erster Linie waren Ports übrig die ich gern Opfern wollte und ich habe nichts anderes Sinnvolles gefunden, was ich da hätte dran klemmen können. Ich werde mal versuchen mit dem PullUP etwas niederohmiger zu werden und ein paar andere Bibliotheken zu nutzen. Drei der vier Karten waren SDHC, vielleicht bringt da die Bibliothek von Roland Riegel etwas.
@ H. O. (elko) >> Weil der Pull-Up fehlt! Der Datenausgang der SD-Karte ist vor der >> Initialisierung ein Open Drain! >Ich habe bereits versucht den internen Pull-UP zu verwenden. Zu hochohmig. >erfolg damit gehabt. Extern hatte ich 5.6k dran, das hat ebenfalls >nichts verändert. 5k6 sollte reichen, viel mehr sollte es aber nicht sein. >Bei beiden Aussagen stimme ich dir zu. In erster Linie waren Ports übrig >die ich gern Opfern wollte und ich habe nichts anderes Sinnvolles >gefunden, was ich da hätte dran klemmen können. Dann lass die Pins Pins sein.
AVCC is the supply voltage pin for the A/D Converter, Port C (3..0), and ADC (7..6). It should be externally connected to VCC , even if the ADC is not used.
H. O. schrieb: >> Ich hatte mit diesem Code auch meine Probleme. Probier mal diesen hier >> (sd_raw.*), der hat bei mir funktioniert: >> http://www.roland-riegel.de/sd-reader/ > > Die Bibliothek habe ich mir auch schon angeschaut. Wenn ich das richtig > gesehen habe, dann unterstützt die aber nur Hardware-SPI? Oder habe ich > das falsch gesehen? Ja, das stimmt. Um dies zu ändern, braucht man jedoch nur 2 Funktionen umschreiben:
1 | void sd_raw_send_byte(uint8_t b) |
2 | uint8_t sd_raw_rec_byte() |
Dafür kann man den Code aus deiner mmc.c Datei verwenden.
Okay jetzt läuft es auch mit der Bibliothek von Ulrich Radig. Ich habe 4.7k PullUP an den DO der SD-Karte gehängt. Das allein brachte allerdings keine Änderung. Danach habe ich AVCC mit VCC verbunden. Ich hätte es nicht gedacht, aber die Karte funktionierte danach. Vielen Dank für die Hilfe.
H. O. schrieb: > Danach habe ich AVCC mit VCC verbunden. Ich > hätte es nicht gedacht, aber die Karte funktionierte danach. Aus dem ATMega8.pdf: AVCC is the supply voltage pin for the A/D Converter, Port C (3..0), and ADC (7..6). It should be externally connected to VCC, even if the ADC is not used. Thomas
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.