Forum: Mikrocontroller und Digitale Elektronik MMC Funktionsproblem / Initialisierung


von Dennis B. (Firma: Home) (deboman)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe ein Problem mit meinem Projekt. Dabei soll eine SD-Karte als 
Speicher für Messdaten dienen. Ich verwende kein Partitionssystem, 
sondern lege die Daten direkt drauf. Der Atmega2560 dient als Prozessor.

Die 16MB Karte funktioniert einwandfrei. Wenn ich jedoch meine anderen 
Karte verwende (64MB und 256MB, beide funktionieren unter Win) dann 
hängt der Quelltext immer an der gleichen Stelle der Initialisierung.
1
#if SPI_Mode  //Routine für Hardware SPI
2
  SPDR = 0xff;
3
  while(!(SPSR & (1<<SPIF))){};
4
  Byte = SPDR;

Eines ist mir aber aufgefallen. Wenn ich die Karte entferne, während die 
Init hängt, dann läuft das Programm weiter. Stecke ich die Karte sofort 
wieder rein, dann läuft das Programm in seiner while(1) ohne Probleme 
weiter. Betrache ich den Inhalt am Rechner, dann hat er einen Sektor 
beschrieben, aber keine weiteren Messwerte, die jede Sekunde bespeichert 
werden sollten.

Vielleicht habt ihr ja ein paar Tipps.


Gruß Dennis
von Dennis B. (Firma: Home) (deboman)


Lesenswert?

Morgen,

hat keiner einen Tipp bezüglich dieses Problems?

Gruß Dennis
von Jim M. (turboj)


Lesenswert?

Naja, laut [http://www.mikrocontroller.net/articles/MMC-_und_SD-Karten 
MMC und SD-Karten] gehört da ein Pullup an Data-Out nach 3,3V. Interner 
Pullup im µC müsste aber auch tun, falls vorhanden. Allerdings zieht der 
dann nach +5 Volt. N$73 muss übrigens mindestens 100 mA liefern können.

Die Stelle an der das Programm angeblich "hängt" macht nicht die Bohne 
Sinn. Wenn SPI nicht tut dann würden auch die 16MB Karten nicht tun. Ist 
das innerhalb einer Schleife? Wenn ja sieht es nur so aus, da dort aufs 
SPI gewartet wird (evtuell länger wegen 400kHz) - d.h. wenn man das 
Programm im Debugger stoppt, dann wird es mit sehr hoher 
Wahrscheinlichkeit dort angehalten, was dann wie aufgehängt aussieht.
von Dennis B. (Firma: Home) (deboman)


Lesenswert?

Danke für deine Antwort.
Es wundert mich nur ein bisschen, dass die 16MB Karte funktioniert. Den 
Schaltplan habe ich von Ulrich Radig übernommen und er hatte kein 
Pull-Up an DO dran.
Also werde ich es mit einem 10k am DO testen, wenn ich wieder an meinem 
Lötplatz bin. Ich hoffe dies wird mein Problem lösen.
von Dennis B. (Firma: Home) (deboman)


Lesenswert?

Ich habe gerade den Pullup Widerstand eingelötet. Leider habe ich keinen 
Unterschied feststellen können und die Karten wurden nicht 
beschrieben...
von Dennis B. (Firma: Home) (deboman)


Lesenswert?

Okay jetzt habe ich den Quelltext noch etwas untersucht.

Er bricht mir die Init der Karte an diesem Punkt ab:
1
//Sendet Commando CMD1 an MMC/SD-Karte
2
  Timeout = 0;
3
  CMD[0] = 0x41;//Commando 1
4
  CMD[5] = 0xFF;
5
  while( mmc_write_command (CMD) !=0)
6
  {
7
    if (Timeout++ > 400)
8
      {
9
      MMC_Disable();
10
      return(2); //Abbruch bei Commando2 (Return Code2)
11
      }

Das Commando CMD1 überprüft doch das Spannungsniveau an der Karte oder 
nicht?

Jedoch liegt eine korrekte Spannung von 3.3V an der Karte an.
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.