www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SD FAT16 (keine Verbindung) Problem


Autor: Dennis B. (Firma: Home) (deboman)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich brauche für mein Projekt eine Datenloggingfunktion. Diese wollte ich 
mit einer SD-Karte realisieren. Verschiedene Beiträge und Forenbeiträge 
habe ich durchstöbert und bin auf das Projekt GLogger gestoßen 
(http://www.mikrocontroller.net/articles/GPS_Logger). Messwerte 
aufnehmen auf der SD-Karte als z.B. txt speicher, fertig. Denkste...
Ich habe jeweils eine 16MB und 64MB SD-Karte zur Verfügung, die es 
damals bei den Digicams dabei gab. Beide habe ich mit Winxp auf FAT 
formatiert.

Ich habe den Quelltext des Projektes an mein Projekt angepasst.

Pinbelegung in der Datei mmc.h und die Aktivierung des CS im Quelltext, 
da dieser durch die Boardstruktur (Evaluation Board) auf PortG liegt 
(siehe Anhang der SD-Karten Adaptierung).
#define MMC_Write     PORTB 
#define MMC_WriteCS   PORTG //ChipSelectPin an PORTG (PG1)
#define MMC_Read      PINB
#define MMC_Direction_REG     DDRB
#define MMC_Direction_REGCS   DDRG

#define SPI_DI        3    
#define SPI_DO        2    
#define SPI_Clock      1    
#define MMC_Chip_Select      1    
#define SPI_SS        0

Ich habe den Quelltext mit dem JTAGGER und AvrStudio durchlaufen lassen.
Die if Abfrage löst immer aus und springt, dann auf while(1). Die 
Funktion mmc_init() gibt immer etwas ungleich 0 heraus. Ich weiß aber 
nicht woran es liegt.
Die Belegung der SD-Karte ist so angegeben wie der Schaltplan es vorgab.
int main(void)
{
  if ((mmc_init() != 0) || (InitFat16() != 0))
  {
  while(1);
  }

  File logFile;
  
  fopen_((unsigned char*)"log.txt",'a',&logFile);
  fputs_(&logFile,"***START***");

  while(1);

return (0);
}

Hat jemand vielleicht Anmerkungen bzw. kann mir einen kleinen Hint in 
die richtige Richtung geben?
Bin derzeit echt am Verzweifeln.

Autor: Dennis B. (Firma: Home) (deboman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich muss mich noch einmal zu Wort melden. Nachdem verschiedene Tests 
fehlgeschlagen sind, habe ich einen anderen Code implementiert 
(http://www.ulrichradig.de/home/index.php/avr/mmc-sd). Den Code von 
Ulrich Radig habe ich ebenfalls an meine Hardware angepasst. Mit der 
seriellen Verbindung und dem Terminal konnte ich die Ereignisse 
überwachen.
 
** Keine MMC/SD Karte gefunden!! **
** Keine MMC/SD Karte gefunden!! **
** Keine MMC/SD Karte gefunden!! **
** Keine MMC/SD Karte gefunden!! **
** Keine MMC/SD Karte gefunden!! **
** Keine MMC/SD Karte gefunden!! **
** Keine MMC/SD Karte gefunden!! **
Also konnte ich kein positive Fazit ziehen. Da habe ich mein Handy 
gesehen. Ich habe die MMC Karte aus meinem Nokia genommen ausprobiert. 
Und was passiert...es funktioniert. Aber wieso? SD und MMC Karten 
müssten doch kompatibel sein oder sehe ich das falsch?
Meine 16MB und 64MB Karte konnte an meinem CardReader einlesen und in 
Windows auch FAT formatieren. Liegt es vielleicht an der 
Windowsformatierung? Also das FAT != FAT16 ist?
Finde keine andere Formatiermöglichkeit. Partitionmagic erkennt keine SD 
Karten.

Jetzt stehe ich so ein bisschen auf dem Schlauch. Wer kann helfen? :)


Gruß Dennis

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Liegt es vielleicht an der
>Windowsformatierung? Also das FAT != FAT16 ist?

Ja, das könnte gut sein. Deine 16MB Karte könnte auf
FAT12 formatiert worden sein. Dann haben einige FAT
Routinen Probleme damit wenn Sektor 0 eine Partitionstabelle
enthält (warum eigentlich?). Es wird also eine bestimmte
Formatierung der Karte erwartet. In der Regel FAT16 (FAT12 lohnt
ja auch kaum noch) und keine Partitionstabelle. Sektor 0 muss
also ein Bootsektor sein.

Autor: Dennis B. (Firma: Home) (deboman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Holger
Danke für die schnelle Antwort. Jedoch ist die Formatierung "noch" nicht 
das Problem. Ich habe wieder etwas geschrieben ohne vorher nachzudenken.
//Initialisierung der MMC/SD-Karte
  usart_write("System Ready!\r\n");  
  while ( mmc_init() !=0) //ist der Rückgabewert ungleich NULL ist ein Fehler aufgetreten
    {
    usart_write("** Keine MMC/SD Karte gefunden!! **\n");  
    }
  usart_write("Karte gefunden!!\n");
  
  fat_init();//laden Cluster OFFSET und Size
  //Initialisierung der MMC/SD-Karte ENDE!

In dem Quelltext von Ulrich Radig wird zuerst die Karte initialisiert 
und danach wird die fat_init() aufgerufen. Meine 16er und 64er SD Karten 
springen schon nach der mmc_init() aus der Reihe und erreichen gar nicht 
die fat_init() Initialisierung. Nur meine 32MB MMC funktionert. Hmm

Autor: Dennis B. (Firma: Home) (deboman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
EDIT:
So die SD-Karten funktioniere. Es lag lediglich an einer Jumperstellung 
auf dem EvaluationBoard. Anscheinend muss ich den PORTB auf Pullup und 
nicht auf den Pulldown Widerstand stehen haben. Nur wieso funktioniert 
die MMC mit dem Pulldownwiderstand und die SD-Karten nicht? Oo komisch

Autor: Chris M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du mal die Spannungen hinter den Spannungsteilern gemessen?
Kommen da 3,3 Volt raus?

Autor: Dennis B. (Firma: Home) (deboman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chris M. schrieb:
> Hast Du mal die Spannungen hinter den Spannungsteilern gemessen?
> Kommen da 3,3 Volt raus?

Ja die kommen raus. Klappt ja jetzt mit der Initialisierung. Nur wieso 
klappt es bei der MMC mit Pulldown R und bei den SD nicht. Und beide 
lassen sich mit ohne Pulldown R ansprechen. Hmm

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.