Forum: Compiler & IDEs micro SD Karte lesen liefert nur 0x00


von Matthias L. (mcl024)


Lesenswert?

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?

von Knilch (Gast)


Lesenswert?

Du musst schon etwas mehr über deine Hardware schreiben. In unseren 
Glaskugeln können wir deine Schaltung nicht erkennen.

von Matthias L. (mcl024)


Angehängte Dateien:

Lesenswert?

Reicht das?

von Bernhard R. (barnyhh)


Lesenswert?

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

von Lukas K. (carrotindustries)


Lesenswert?

Bernhard R. schrieb:
> - 3,3 V Betriebsspannung, aber 16 MHz Clock
geht bei mir problemlos hust

von holger (Gast)


Lesenswert?

>Ein Wunder, daß sich da überhaupt etwas rührt.

Und AREF hängt schon wieder an VCC. Wo kommt dieser
Unsinn eigentlich her?

von Matthias L. (mcl024)


Angehängte Dateien:

Lesenswert?

Also bisher läuft alles bestens. Das S65 Display auch. Ein GPS Modul 
hängt auch daran. Läuft auch Super.

von Matthias L. (mcl024)


Lesenswert?

Bis auf die microSD Karte.

von Sam .. (sam1994)


Lesenswert?

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?

von Matthias L. (mcl024)


Lesenswert?

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.

von Sam .. (sam1994)


Lesenswert?

Vielleicht zieht sich die Karte selbst den Strom beim Lesen weg?

von holger (Gast)


Lesenswert?

>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;)

von izmael (Gast)


Lesenswert?

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

von Matthias L. (mcl024)


Lesenswert?

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.

von Matthias L. (mcl024)


Lesenswert?

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.

von Troll (Gast)


Lesenswert?

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 :(

von Bernhard R. (barnyhh)


Lesenswert?

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

von Sam .. (sam1994)


Lesenswert?

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.

von Matthias L. (mcl024)


Lesenswert?

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.

von Troll (Gast)


Lesenswert?

Hast du überhaupt genug Leistung zur Verfügung?

von Matthias L. (mcl024)


Lesenswert?

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.

von MicroSD (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.