Hallo Zusammen, ich nutze folgenden Code für meine micro SD Karte: AVR FAT32 Die Initialisierung funktioniert und auch der card_type wird mit 1 bestimmt. Beim lesen des Block 0 liefert mir die funktion mmc_read_sector() allerdings für alle 512 Byte 0x00. Wenn ich die Karte mit dd unter Linux anschaue kommt ca. ab Byte 474 einige andere Daten als 0x00. Woran könnte das liegen?
Du musst schon etwas mehr über deine Hardware schreiben. In unseren Glaskugeln können wir deine Schaltung nicht erkennen.
Deine Schaltung läuft anscheinend außerhalb aller Spezifikationen: - 3,3 V Betriebsspannung, aber 16 MHz Clock - "Angstkondensatoren" eingespart, sowohl am ATMEGA als auch an der SD-Karte. Ein Wunder, daß sich da überhaupt etwas rührt. Bernhard
>Ein Wunder, daß sich da überhaupt etwas rührt.
Und AREF hängt schon wieder an VCC. Wo kommt dieser
Unsinn eigentlich her?
Also bisher läuft alles bestens. Das S65 Display auch. Ein GPS Modul hängt auch daran. Läuft auch Super.
Bernhard R. schrieb: > - 3,3 V Betriebsspannung, aber 16 MHz Clock > - "Angstkondensatoren" eingespart, sowohl am ATMEGA als auch an der > SD-Karte. Das würde ich dir schon empfehlen. Außer du willst vielleicht eines Tages dich Stundenlang fragen warum die Schaltung sich ganz undefiniert verhält. Kostet nichts und vermeidet unnötige Probleme! Wo ist das Problem sie einfach dranzuhängen?
Kein Problem. Bis auf das mit dem 3,3V. Aber das eigentliche Problem besteht eher beim lesen einens Blocks von der micoSD Karte. Da die Initialisierung funktioniert gehe ich mal von keinem Hardwareproblem aus.
Vielleicht zieht sich die Karte selbst den Strom beim Lesen weg?
>Aber das eigentliche Problem besteht eher beim lesen einens Blocks von >der micoSD Karte. Da die Initialisierung funktioniert gehe ich mal von >keinem Hardwareproblem aus. Die Initialisierung läuft normalerweise mit einem eher geringen Takt so um 400kHz. Danach wird auf Vollgas umgeschaltet. Dann zieht die Karte mehr Strom. Da keine Angstkondensatoren verbaut sind geht der Schaltung dann vermutlich die "Luft" aus. >Vielleicht zieht sich die Karte selbst den Strom beim Lesen weg? Passt doch irgenwie;)
Matthias Laubnitz schrieb: > Da die Initialisierung funktioniert gehe ich mal von > keinem Hardwareproblem aus. Siehe Samuels Beitrag: Samuel K. schrieb: > Bernhard R. schrieb: >> - 3,3 V Betriebsspannung, aber 16 MHz Clock >> - "Angstkondensatoren" eingespart, sowohl am ATMEGA als auch an der >> SD-Karte. > Das würde ich dir schon empfehlen. Außer du willst vielleicht eines > Tages dich Stundenlang fragen warum die Schaltung sich ganz undefiniert > verhält. Da bekommen die Leute schon Hilfe und lesen sie nicht mal richtig durch... Ansonsten steht das meiste auch unter SD-Card
Ja richtig die Intialisierung läuft mit einer geringeren Taktfrequenz. Um den Sector zu lesen sende ich zuerst cmd 17 an die Karte mit hoher Taktfrequenz und dann warte ich noch in einer while schleife auf das Start-Byte 0xFE, auch mit maximaler Taktfrequenz. Erst dann geht es los mit dem lesen der 512 Byte. Sollte das bei einem Hardwareproblem nicht auch schon scheitern? Probemäßig habe ich das lesen des Sektors auch schon mit der Initfrequenz laufen lassen. Leider auch ohne Erfolg. Des weiteren habe ich einen 100nF Kondensator parallel zu den 3,3V und GND so nah wie möglich an Karte gehangen. Auch leider ohne Erfolg.
izmael schrieb: > Da bekommen die Leute schon Hilfe und lesen sie nicht mal richtig > durch... Moment mal. Ich probiere nur das Problem einzugrenzen. Matthias Laubnitz schrieb: > Da die Initialisierung funktioniert gehe ich mal von > keinem Hardwareproblem aus.
Matthias Laubnitz schrieb: > Des weiteren habe ich einen 100nF Kondensator parallel zu den 3,3V und > GND so nah wie möglich an Karte gehangen. Auch leider ohne Erfolg. Onkel ATmega32 möchte gerne auch ein paar von den Kondensatoren an seinen VCC und GND Pins haben. Das macht ihn sonst traurig :(
Luk4s K. schrieb: > Bernhard R. schrieb: >> - 3,3 V Betriebsspannung, aber 16 MHz Clock > geht bei mir problemlos hust Wozu schreibt der Hersteller Datenblätter? Der ATMega32 ist lt. dem mir vorliegenden Datenblatt mit 4,5 ... 5,5 V und 16 MHz maximaler Taktfreuqenz spezifiziert. Es gibt auch eine Ausführung für niedrigere Betriebsspannung, die ist aber über ihren gesamten Betriebsspannungsbereich nur mit 8 MHz spezifiziert. Alles, was außerhalb der Spezifikationen liegt, bewegt sich im Bereich "geht per Zufall, nicht per Design." Ähnlich verhält es sich mit den "Angstkondensatoren". Hier gilt anscheinend für manche Frickler: "No Risk, no Fun!" Bernhard
Ich bin nicht ganz sicher, aber die Karte müsste beim lesen/schreiben mehr Strom ziehen als normal. Wenn dann die Spannung nur kurz einbricht ist das Ergebnis nicht definierbar. Ergo: Abblockkondensatoren Ich hab mir vor kurzem bei Eb*y 100 smd kondensatoren (805) für 1€ gekauft.
So habe jetzt den Atmega mit 8MHz laufen und "Angstkondensatoren" an die SD-Karte sowie an den Atmega32 gelötet. Leider immer noch ohne Erfolg. Wie oben schon beschrieben läuft die Init sowie das Kommando zum Single Block lesen wunderbar.
So erstmal danke für alle Antworten. Habe das Problem gelöst. Es war KEIN Hardwareproblem. Habe einen sehr dummen Softwarefehler beim übertragen der Daten via UART zum PC gemacht.
Matthias Laubnitz schrieb: > Es war KEIN Hardwareproblem. Aber du hast wenigstens bei der Fehlersuche ein paar potentielle Hardwareprobleme beseitigt... vorrausgesetzt du schmeisst die Kondensatoren nicht wieder raus... Noch eine potentielle Fehlerquelle: Laut Spec müssen Micro-SD Karten das Auslesen per SPI garnicht unterstützen. War wohl zum "Platz sparen" gedacht. Zum Glück hat sich scheinbar noch kein Controller-Chip-Hersteller die Mühe gemacht, den SPI-Teil aus seinem Design wieder rauszunehmen.
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.