Elm Chan FatFs, funktioniert nicht mit Intenso microSD

OP #6950306
Lesenswert?

Hallo,

ich habe folgendes Problem: für ein Projekt verwende ich das Fats File 
System von Eml Chan inklusive dessen Layer für die SD-Karte. Jetzt habe 
ich reproduzierbar das Problem, dass ich bei dieser microSD von Intenso 
(4GB) 
https://www.intenso.de/produkte/speicherkarten/microsd-karte-class-10 
einen Fehler 3 (FR_NOT_READY) bekommen. Ich habe mehrere Karten 
getestet, immer das gleiche. Alterativ habe ich noch SanDisk Ultra 16GB 
da. Die funktionieren problemlos, haben aber auch bessere Werte für die 
Datenraten.

Controller ist ein ATXMEGA128A3U mit internem 32MHz Quarz.

Ich habe folgendes schon versucht: SPI Clock ist beim initialisieren 
minimal (größtmöglicher Vorteiler). Beim normalen Betrieb habe ich mit 
maximaler Clock-Frequenz und halbe maximale Clock-Frequenz versucht. Ich 
habe versucht, das Timeout zu variieren.

Ich konnte auch die Stelle lokalisieren, wo der Fehler auftritt:
in der mmc_avr.c bei disk_initialize wird eine Funktion select 
aufgerufen:
1
static
2
int select (void)  /* 1:Successful, 0:Timeout */
3
{
4
  CS_LOW();
5
  xchg_spi(0xFF);  /* Dummy clock (force DO enabled) */
6

7
  if (wait_ready(500)) return 1;  /* OK */
8
  deselect();
9
  return 0;  /* Timeout */
10
}

die darin aufgerufene Funtion wait_ready liefert Timeout, weil die 
Variable d immer 0 ist.
1
static
2
int wait_ready (  /* 1:Ready, 0:Timeout */
3
  UINT wt      /* Timeout [ms] */
4
)
5
{
6
  BYTE d;
7

8
  Timer2 = wt / 10;
9
  do
10
    d = xchg_spi(0xFF);
11
  while (d != 0xFF && Timer2);
12

13
  return (d == 0xFF) ? 1 : 0;
14
}

Woran kann das liegen? Was könnte ich noch versuchen?

Danke und viele Grüße,

Alex
OP #6950361
Lesenswert?

Hallo Falk,

Falk B. schrieb:
> Den gibt es nicht. Bestenfalls einen internen RC-Oszillator.

Den meinte ich, sorry falsch ausgedrückt.

Ich wollte gerade den Schaltplan posten. Die Hardware ist nicht von mir, 
sondern von eine von einem externen Dienstleister entwickelte und 
gefertigte Platine, also keine Bastellösung. Die SD hat auch eine eigene 
Spannungsversorgung (eigener Spannungswandler). Der Tip mit dem Pullup 
war genau der richtige. Ich hab ihn zugeschaltet, jetzt geht es. Vielen 
vielen Dank. Das war mir bisher nicht bekannt. Steht das irgendwo, 
kannst du mir da kurz noch was dazu sagen?

Grüße, Alex
#6950364
Lesenswert?

Alexander H. schrieb:
> Der Tip mit dem Pullup
> war genau der richtige. Ich hab ihn zugeschaltet, jetzt geht es. Vielen
> vielen Dank.

Das macht ein Bier!

> Das war mir bisher nicht bekannt. Steht das irgendwo,
> kannst du mir da kurz noch was dazu sagen?

https://www.mikrocontroller.net/articles/MMC-_und_SD-Karten

"Ein Pullup-Widerstand am Ausgang der MMC/SD Karte (DO) ist für eine 
saubere Initialisierung per SPI notwendig! (Thread mit Erklärung dazu). 
Bei manchen Karten sogar, um überhaupt ein Signal auf DO zu bekommen."

Ich würde nicht den internen Pull-Up des AVRs nutzen, der ist relativ 
hochohmig, so im Bereich 50k. Eher extern mit 5-10k.
OP #6950365
Lesenswert?

Allerdings scheint die Intenso irgendwie langsamer zu sein. Wenn ich den 
Timeout (wie in der Library eingestellt) wieder zuschalte, gibt's wieder 
den Fehler. Muss mal noch mit den Werten experimentieren. Sind die 
Karten da echt so unterschiedlich?

Edit:
Erster Satz unter Do und Don't im von dir verlinkten Artikel sagt ja 
schon alles.

> Lasst euch nicht verrückt machen wenn es einfach nicht funktioniert, sondern
> probiert zu allererst mal eine SD-Karte eines anderen Herstellers aus. Die
> MMC-Implementierung für AVR von Elm Chan z. B. funktioniert mit SanDisk
> problemlos hat aber mit Platinum Karten ein Problem.
#6950609
Lesenswert?

Jim M. schrieb:
> Ja, sind sie. Billige Intenso sind hier bei mir im µC Betrieb schnell
> ausgefallen (aber YMMV) - ich verwende lieber Sandisk oder Samsung
> Karten.

Also die Leute welche Intenso gekauft haben, die hatten nicht viel 
Freude an ihrer SD, SSD oder was auch immer. Mit SanDisk habe ich auch 
schon schlechte Erfahrungen gemacht. Ich setze eher auf Samsung, die 
scheinen dann doch eher qualitativ bessere Hardware zu produzieren.
Moderator (Firma: Titel) Persönliche Seite #6950646
Lesenswert?

Alexander H. schrieb:
> ind die Karten da echt so unterschiedlich?
Intenso ist billigste Consumerware. Die nehme ich bestenfalls, um Daten 
kurz mal von A nach B zu transferieren. Aber nicht, um darauf was zu 
speichern, das ich eine Woche später noch brauche.

> Sind die Karten da echt so unterschiedlich?
Nimm ein Oszi und sieh dir die Pegel und die Flanken an. Vergleiche sie 
mit Karten, die funktionieren.
OP #6950674
Lesenswert?

Danke für's Augen öffnen. Mir war schon bewusst, dass es billige 
(schlechtere) und teurere (meist bessere) Karten gibt. Aber wenn man die 
Dinger nur in den Rechner schiebt und da Daten drauf packt, wird einem 
der Unterschied nicht so deutlich. Man nimmt es nur wahr, wenn man die 
Datenraten auf den Verpackungen vergleicht (ja, Euphemismusalarm), dass 
es da Unterschiede gibt.
#6950861
Lesenswert?

Alexander H. schrieb:
> Man nimmt es nur wahr, wenn man die
> Datenraten auf den Verpackungen vergleicht (ja, Euphemismusalarm), dass
> es da Unterschiede gibt.

Darum geht es eigentlich auch nicht.
Bei den SanDisk µSD-Karten war es so dass es da offenbar thermische 
Spannungsrisse gab und die elektrische Verbindung dann nicht mehr 
richtig funktioniert hat. Man konnte nach dem einstecken der SD-Karte in 
den PC etwa 10-15 Sekunden lang auf die Karte normal zugreifen, danach 
konnte man nichts mehr lesen, aber man sah noch das Dateisystem und nach 
etwa 10 Minuten konnte man mit der Karte gar nicht mehr kommunizieren.

Um die paar Gigabyte auszulesen hatte ich also nur 10-15 Sekunden Zeit, 
aber das eben mehr fach, so oft ich die Karte eben nach dem Abkühlen in 
den PC steckte.

Man hatte ja Zeit um die Ordner und Dateistruktur abzufragen, so wusste 
man wo alles ist. Dann hat man einfach nur noch ein Skript geschrieben 
welches die Dateien runter lädt. Ich habe dann die in den 10-15 Sekunden 
runtergeladenen Dateien jedes mal aus den Skript gelöscht.

Hat schon ein paar Stunden gedauert.
Mein Bekannter (für den ich das gemacht habe) hat natürlich nichts für 
die Datenrettung bezahlen müssen, also hat er sich wieder eine 
billig-SD-Karte gekauft.

Wenn er die Arbeitskosten für so etwas mit auf die Karte hoch rechnen 
würde, dann würde er sich lieber eine etwas teurere Karte kaufen und 
keinen Billigmüll.

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