Forum: Mikrocontroller und Digitale Elektronik Probleme mit SD-Karte


von Andreas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, und schonwider eine SD-Karte........Sorry, aber ich komm nicht 
weiter.
Ich habe mir ein Board wie im Anhang gebaut, und wollte nun die SD-Karte 
Testen. Die Anschlüße sind nur auf Stifftleisten gezohgen, die wie bei 
dem STK-500 über brücken mit dem AVR-Port verbunden werden. Benutzt wird 
ein Mega644 mit 3,3V und 16 Mhz. Ich habe die Lib von Ulrich Radig 
genommen und habe folgendes Problem. Es wird manchmal angezeigt, das die 
Karte gefunden wurde, obwohl noch garkeine im Slot steckt. Das passiert 
aber nicht immer. Wenn eine Karte im Slot steckt, wird sie nicht sicher 
oder garnicht , weil er ja auch eine findet, wenn keine drinn ist. 
Hättet Ihr einen ansatz wo der fehler liegen könnte ?

Danke !!!

von holger (Gast)


Lesenswert?

>weil er ja auch eine findet, wenn keine drinn ist

Mach einen Pullup an den Ausgang der Karte.

von Andreas (Gast)


Lesenswert?

An "DO" ?

von Benedikt K. (benedikt)


Lesenswert?

Ja.

von Andreas (Gast)


Lesenswert?

Ich habe auch gelesen, das ein Pullup an CS sollte. Ist das richtig ?

von Benedikt K. (benedikt)


Lesenswert?

Es ist auf jeden Fall nicht verkehrt, u.a. auch damit die SD Karte dem 
ISP nicht in die Quere kommt wenn sich diese die SPI Schnittstelle 
teilen.

von Andreas (Gast)


Lesenswert?

OK, danke. Werde ich mal ranlöten..........

von Andreas (Gast)


Lesenswert?

Hat leider nix gebracht, spielt immernoch verrückt.................

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Clever wären auch noch 100nF direkt an der Versorgung der Karte.

von Andreas (Gast)


Lesenswert?

Ich bin am verzweifeln, auch der C in der versorgung der SD-Karte 
brachte keine verbesserung..........................

von Andreas (Gast)


Lesenswert?

Hätte bitte jemand ein file für mich, das nur die SD-Karte 
initiallisiert, damit ich das mal richtig testen kann ? Wäre echt 
super!!!

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

In der Library sollte doch alles drin sein...

von Andreas (Gast)


Lesenswert?

So, ich habe nun je einen 10K pullup am CS,DO und CLK , 2X100nF an der 
versorgung, und es spinnt immernoch. Ist mein Code überhaupt richtig ???
P.S. ist mein erster ............

#include <avr/io.h>
#include <stdlib.h>
#include <util/delay.h>
#include "lcd.h"
#include "mmc.h"
#include "fat.h"
#include "usart.h"


int main()
{
     usart_init(9600);
     lcd_init(LCD_DISP_ON);


   while ( mmc_init() !=0)
    {
    lcd_clrscr();
    lcd_puts("Keine Karte!!");
    }


   lcd_clrscr();
   lcd_puts("Karte gefunden!!");



   while(1);


   return 0;


}

von Oje (Gast)


Lesenswert?

Vielleicht solltest du dir erst mal ein Buch über C-Programmierung 
zulegen...

von Andreas (Gast)


Lesenswert?

Also ist es komplett falsch???

von Peter F. (piet)


Lesenswert?

Andreas schrieb:
> Also ist es komplett falsch???

Sagen wir es mal so, es ist alles andere als richtig...

von Andreas (Gast)


Lesenswert?

wo habe ich denn einen Fehler gemacht ?

von Gast (Gast)


Lesenswert?

Hi,

ist das ein "normaler" Mega 644? Im Datenblatt ist eine Grafik, die die 
maximale Frequenz bezogen auf die Versorgungsspannung darstellt. Ganz 
genau genommen dürftest du bei 3,3V mit max. 13MHz takten... Ich halte 
es für eher unwahrscheinlich, dass das dein Problem ist, aber du 
solltest vielleicht mal einen Test mit einer kleineren Taktfrequenz 
machen um sicher zu gehen.

Viele Grüße

von Oje (Gast)


Lesenswert?

>wo habe ich denn einen Fehler gemacht ?

Dein gepostetes Programm macht folgendes:

USART wird initialisiert
LCD wird initialisiert

bis hierher ist noch alles OK

Dann startest du eine Endlosschleife, die erst dann abgebrochen wird, 
wenn die Funktion mmc_init eine "0" zurückliefert. Solange diese 
Schleife läuft, wird tausende male pro Sekunde das Display gelöscht und 
gleich danach wieder mit "Keine Karte!!" wieder beschrieben. Ist das 
sinnvoll?

Der Hauptfehler kommt aber erst danach:

Wenn die Funktion mmc_init das erste mal eine 0 liefert, die Schleife 
also verlassen wird, schreibst du ein einziges mal "Karte gefunden!!" 
ins Display. Gleich danach kommt mit while(1); eine Endlosschleife, die 
nie mehr verlassen wird, dein µC hängt sich auf und macht gar nichts 
mehr.

von Ben _. (burning_silicon)


Lesenswert?

naja den µC "aufhängen" mach ich bei tests genauso... entweder er darf 
noch mit einer LED blinken um zu zeigen, daß er "am ende" ist oder eben 
einfach einfrieren wenn das programm durchlaufen ist.

von Andreas (Gast)


Lesenswert?

Ich möchte ja auch erst nur wissen, ob die sd-karte erkannt und die ini 
ok ist. Ich beckomme aber auch ein "Karte gefunden", obwohl keine karte 
eingesteckt ist........

von Chris H. (wuselwutz)


Lesenswert?

Vor einiger Zeit hatte ich ein ähnliches Problem. Dabei ging es darum, 
die SD-Karte sektorenweise auszulesen und als PWM Audio abzuspielen. 
Manchmal tat das Ding, was es sollte und nach irgendeiner 
Softwareänderung (an einer ganz anderen Stelle) plötzlich nicht mehr. 
Nach stundenlangem suchen bin ich dann darauf gekommen, mal dem GCC auf 
den Zahn zu fühlen. Mit -O0 bis -O3 lief es, mit -Os nicht. Ich habe 
dann nicht weiter hinterfragt, was dahinter steckt sondern einfach die 
mmc-Library mit -O3 und den Rest mit -Os kompiliert und gut war.

Gruß
Chris

von Andreas (Gast)


Lesenswert?

Wie compeliere ich denn einzelne libs unterschiedlich ? So gut kenn ich 
mich noch nicht mit AVR-Studio aus......

von holger (Gast)


Lesenswert?

>Wie compeliere ich denn einzelne libs unterschiedlich ? So gut kenn ich
>mich noch nicht mit AVR-Studio aus......

Brauchst du nicht zu machen.

>Ich möchte ja auch erst nur wissen, ob die sd-karte erkannt und die ini
>ok ist. Ich beckomme aber auch ein "Karte gefunden", obwohl keine karte
>eingesteckt ist........

Das dürfte ein Software oder Hardwareproblem sein.

Wenn an MISO ein Pullup hängt und keine Karte drin ist,
dann bekommst du immer 0xFF über SPI. Klares Zeichen
für keine Karte drin.

von Chris H. (wuselwutz)


Lesenswert?

Komipliere doch einfach mal das ganze Projekt mit anderen 
Optimierungseinstellungen. Nur um zu sehen, ob's hilft...

von holger (Gast)


Lesenswert?

>Komipliere doch einfach mal das ganze Projekt mit anderen
>Optimierungseinstellungen. Nur um zu sehen, ob's hilft...

Bringt nichts.

von Pete K. (pete77)


Lesenswert?

Ist 16 Mhz bei 3,3V nicht etwas viel für den 644? Laut Datenblatt ist 
das außerhalb der Spezifikation.

Hast Du die Möglichkeit es mit einem kleineren Quarz zu testen (evtl. 
auch dem internen Quarz)?

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.