MMC Funktionsproblem / Initialisierung

OP (Firma: Home) #2449222
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
Angehängte Dateien:
#2450587
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.
OP (Firma: Home) #2450609
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.
OP (Firma: Home) #2451770
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren