Forum: PC Hard- und Software Cache auf SD-Kartencontroller?


von F. P. (pl504)


Lesenswert?

Wie groß ist eigentlich der interne RAM einer SD-Karte? Also wenn ich 
Daten auf die SD-Karte abspeichern will, muß der Controller diese Daten 
ja irgendwie erstmal zwischenspeichern und dann auf der Karte verteilen.

Hintergrund:
Habe einen Datenrekorder gebaut, µC schreibt eine Textdatei auf die 
SD-Karte. Es wurden schon ein paar wenige kB an die Karte geschickt, 
diese wurden offensichtlich aber noch nicht physikalisch in den Flash 
geschrieben (habe mir im Anschluß ein Image der SD-Karte gezogen und mit 
dem Hex-Editor angeschaut). Jedenfalls habe ich keine zusammenhängenden 
5 Byte gefunden, die hätten aufgezeichnet sein müssen. Ich würde jetzt 
nicht erwarten, daß der Controller die Daten derart zerstückelt (eher 
clusterweise?).

Da gibt es ja diesen fflush-Befehl, diesen habe ich noch nicht 
ausgeführt. Der µC ist mir leider abgeschmiert und ich konnte die Datei 
nicht schließen.

Deswegen frage ich mich, wann ist der interne RAM einer SD-Karte voll 
und wann sich deswegen die Karte genötigt sieht, die Daten in den Flash 
abzulegen, auch wenn die Datei noch nicht geschlossen wird? Können 
überhaupt z.B. 100 MB am Stück reingeschrieben werden ohne den 
"fflush-Befehl", oder verweigert die Karte dann die Annahme von Daten, 
weil ihr Cache voll ist?

von Jim M. (turboj)


Lesenswert?

F. P. schrieb:
> Da gibt es ja diesen fflush-Befehl, diesen habe ich noch nicht
> ausgeführt. Der µC ist mir leider abgeschmiert und ich konnte die Datei
> nicht schließen.

Dan pack die Karte in einen PC und lass sie "prüfen" und reparieren. 
Danach stimmt zwar die Größe nicht 100%ig, aber die geschriebenen Daten 
sind drin.

Je nach FAT-Implementation könnten aber signifikant Daten noch gar nicht 
weggeschrieben worden sein. Was Du da an Software verwendetst hast Du 
uns leider nicht verraten.

SD Karten haben nach dem Schreiben ein "Busy", aber wenn der Zustand 
vorbei ist darf man den Strom komplett wegnehmen, ohne Daten zu 
verlieren.

von F. P. (pl504)


Lesenswert?

Jim M. schrieb:
> Dan pack die Karte in einen PC und lass sie "prüfen" und reparieren.
> Danach stimmt zwar die Größe nicht 100%ig, aber die geschriebenen Daten
> sind drin.

Wie gesagt: Die Daten sind definitiv noch nicht physikalisch im Flash 
gelandet, sondern müssen irgendwie noch im RAM/Cache der SD-Karte 
geblieben sein (bis zum Stromausfall).

von Dr. Sommer (Gast)


Lesenswert?

F. P. schrieb:
> Da gibt es ja diesen fflush-Befehl, diesen habe ich noch nicht
> ausgeführt.

Der schickt lediglich alle Daten vom Puffer des Treibers an die Karte. 
SD-Karten kennen keinen Befehl der den RAM leert. Allerdings garantiert 
die Spezifikationen, dass nach Abschluss eines Schreib Befehls die Daten 
"sicher" sind. Somit muss der Absturz während des Schreibens erfolgt 
sein, oder bevor der Treiber überhaupt angefangen hat den Puffer zu 
leeren.

von F. P. (pl504)


Lesenswert?

Der µC hat lediglich 512 Byte Puffer und hat diesen mehrfach mit 
unterschiedlichem Inhalt zur Karte geschickt (Schreibbefehl), insgesamt 
waren es ein paar kB an Daten. Da nahm ich an, daß die Karte diese Daten 
auch auf den Flash geschrieben hat, aber offenbar hat sie einen Cache 
(wie eine Festplatte) und schreibt die Daten erst endgültig in den 
Flash, wenn der Befehl zum Schließen der Datei eingeht oder wenn ihr 
eigener Cache voll ist. Jedenfalls konnte ich im Image nicht die neuen 
vermeintlich geschriebenen Daten finden, der mutmaßliche Cache der 
SD-Karte war wohl noch nicht voll.

von g457 (Gast)


Lesenswert?

> Da nahm ich an, daß die Karte diese Daten auch auf den Flash geschrieben
> hat, aber offenbar hat sie einen Cache (wie eine Festplatte) und schreibt
> die Daten erst endgültig in den Flash, wenn der Befehl zum Schließen der
> Datei eingeht oder wenn ihr eigener Cache voll ist.

Nein.

> Jedenfalls konnte ich im Image nicht die neuen vermeintlich geschriebenen
> Daten finden, der mutmaßliche Cache der SD-Karte war wohl noch nicht voll.

Nein. Such mal eher in die Richtung 'µC ist abgeschmiert, hat er 
davor(!) überhaupt das getan, was er tun soll?' (i.e. korrekten Puffer 
korrekt befüllen und korrekt mit den korrekten Kommandos an die korrekte 
SD-Karte an die korrekte Stelle übertragen, oder so ähnlich).

von (prx) A. K. (prx)


Lesenswert?

Wenn man Daten in Flash-Medien mit Filesystem schreibt, dann sind das 
mindestens 2 Stufen:
- Die Daten selbst werden geschrieben.
- Die Metadaten der Flash-Verwaltung werden angepasst.

Es kann also sein, dass die Daten bereits auf den Flash-Chips sind, aber 
die Metadaten noch auf dem alten Stand sind. Deshalb ist die 
Cache-Grösse des Flash-Controllers nicht wirklich relevant.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Ich hatte mit einem Dataflash ein ähnliches Problem. Da das Dataflash 
seitenweise geschrieben wird, also erst wenn die laufende Seite voll 
ist, waren im Problemfall etliche Daten weg. Weshalb ich noch ein FRAM 
hinzu fügte, in dem die letzten Daten ebenfalls enthalten sind. Da ein 
FRAM praktisch verzögerungsfrei schreibt, ist dessen Inhalt stets 
aktuell.

von SD-Karte (Gast)


Lesenswert?

Ich kenne das von SD-Karten. Ich verwende FATFS, muss ich dazu sagen.
Aber wenn man mehrere kByte auf die SD schreibt, ohne das File expliziet 
zu schließen, sind viele Daten dann weg.

Irgenwo wird also zwischengespeichert.

Wenn man sicher für einen Stromausfall sein will, muss man nach dem 
Ausfall der Versorgung mehrere hundert ms haben, um alle Files schließen 
zu können.

Das ist nicht immer einfach umzusetzen, und einer der größten Nachteile 
einer SD-Karte (auch wenn viele das nicht wahrhaben wollen).

wie man das löst, wenn man direkt auf die Karte schreibt, weiß ich auch 
nicht.

von F. P. (pl504)


Lesenswert?

g457 schrieb:
> Nein. Such mal eher in die Richtung 'µC ist abgeschmiert, hat er
> davor(!) überhaupt das getan, was er tun soll?' (i.e. korrekten Puffer
> korrekt befüllen und korrekt mit den korrekten Kommandos an die korrekte
> SD-Karte an die korrekte Stelle übertragen, oder so ähnlich).

Ja, wenn ich ganz normal die Datei schließe, sind die Daten korrekt 
geschrieben.
Aber angenommen, ich würde 100 MB auf die Karte schreiben (und warten, 
bis die Karte nicht mehr "busy" ist), ohne die Datei danach zu 
schließen, dann müssen doch die Daten physikalisch im Flash gelandet 
sein. Die FAT ist natürlich noch nicht aktualisiert, aber wenn ich den 
Saft wegnehme und anschließend den Flash byteweise auslese (Image 
erstellen), müßte ich meine Daten irgendwo wiederfinden (je nachdem, wo 
der SD-Kartencontroller die Daten im Flash verteilt hat).

von Dr. Sommer (Gast)


Lesenswert?

F. P. schrieb:
> Aber angenommen, ich würde 100 MB auf die Karte schreiben (und warten,
> bis die Karte nicht mehr "busy" ist), ohne die Datei danach zu
> schließen,

Die Frage ist, ob der Treiber die 100MB auch abschickt wenn du kein 
fclose () aufrufst. Vermutlich nicht. Nochmal: Die Karte hat keinen 
Puffer , der nach einem abgeschlossenen Schreib Befehl an die Karte noch 
Daten enthält. Der Puffer ist im Treiber.

von Dr. Sommer (Gast)


Lesenswert?

fclose() reicht übrigens ggf. auch nicht, das Dateisystem muss auch 
unmounted werden (Windows: auswerfen, Linux: umount, FatFs: f_umount), 
damit der Treiber wirklich alles an die Karte schickt.

von (prx) A. K. (prx)


Lesenswert?

F. P. schrieb:
> müßte ich meine Daten irgendwo wiederfinden

In den Flash-Chips findest du sie vielleicht wieder, aber nicht 
notwendigerweise auch alle über das µSD Interface. Erst wenn die 
Metadaten der Flash-Verwaltung ebenfalls aktualisiert wurden - was die 
letzte Aktivität ist - sind auch alle Informationen persistent 
gespeichert.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Dr. Sommer schrieb:

> Nochmal: Die Karte hat /keinen/
> Puffer , der nach einem abgeschlossenen Schreib Befehl an die Karte noch
> Daten enthält.

Das ist richtig, besonders wichtig ist dabei das "abgeschlossen".

Denn Puffer-RAM besitzt die Karte sehr wohl, zwingend mindestens in der 
Größe der kleinsten schreibbaren Einheit des verbauten Flash, 
üblicherweise aber wohl eher das Doppelte bis Vierfache davon.

Aber wie du richtig schreibst: wenn nach dem Schreibbefehl nicht mehr 
busy zurückkommt, dann hat der Inhalt sämtlicher dieser Puffer im Flash 
gelandet zu sein.

Wird aber vorher die Versorgung geklaut, ist natürlich nur ein Teil der 
Daten aus dem Puffer der Karte in den Flash geschrieben worden. Und man 
muss diesen Teil nicht einmal dann sehen können, wenn man ein Image 
zieht. Es ist vor allem bei bereits zuvor mehrfach "vollgeschrieben" 
Karten sogar recht wahrscheinlich, dass man den Teil nicht sieht, weil 
er im aktuellen Spare gelandet ist und das wear leveling den noch nicht 
umgemapped hat.  Dann taucht er im Image nicht auf.
Er ist aber im Flash, wenn man diesen "roh" ausliest, unter Umgehung des 
Controllers, bekommt man ihn auch zu sehen.

von F. P. (pl504)


Lesenswert?

OK, läßt sich der Controller für das "rohe" auslesen softwaremäßig 
umgehen, gibt es da Spezialprogramme?

von Soul E. (Gast)


Lesenswert?

F. P. schrieb:
> OK, läßt sich der Controller für das "rohe" auslesen softwaremäßig
> umgehen, gibt es da Spezialprogramme?

Ja, vom Hersteller des Controllers. Dem muss man ja auch mitteilen 
wieviel Flash wo angeschlossen ist, man muss ihn dazu bringen, einen bad 
block scan auszuführen und im letztendlich auch noch sagen, mit welchem 
Namen und welcher User-Kapazität er sich am Bus melden soll.

Diese Tools unterliegen einem NDA (genau wie die Beschreibung der 
Algorithmen des Controllers). Ab und zu diffundiert trotzdem mal was 
raus, da dürfte dann Google Dein Freund sein.
https://www.bunniestudios.com/blog/?p=3554

von Soul E. (Gast)


Lesenswert?

Dem Controller, nicht dem Hersteller ;-)

von F. P. (pl504)


Lesenswert?

OK, so weit will ich es nun doch nicht treiben. :) So wichtig waren die 
Daten nicht, aber man hat wieder etwas dazugelernt.

von Marc H. (marchorby)


Lesenswert?

soul e. schrieb:
> Ja, vom Hersteller des Controllers

Quelle?

Ich lese dies hier fortlaufen, aber bei den Herstellern findet man diese 
Tools nicht! Setze mal bitte einen Link!

von (prx) A. K. (prx)


Lesenswert?

Marc H. schrieb:
> Ich lese dies hier fortlaufen, aber bei den Herstellern findet man diese
> Tools nicht!

Schon mal höflich angefragt? Wenn die nur per NDA verfügbar sind, dann 
werden sie kaum offen zum Download rumliegen.

: Bearbeitet durch User
von g457 (Gast)


Lesenswert?

bunnie wurde oben doch schon verlinkt. xobs gäbs da auch noch. Und einen 
Vortrag mit der Nummer 5294 auf dem ccc. Viel Spaß beim Staunen!

von Marc H. (marchorby)


Lesenswert?

A. K. schrieb:
> Marc H. schrieb:
>> Ich lese dies hier fortlaufen, aber bei den Herstellern findet man diese
>> Tools nicht!
>
> Schon mal höflich angefragt? Wenn die nur per NDA verfügbar sind, dann
> werden sie kaum offen zum Download rumliegen.

Ist dein Wissen verlässlich, oder nur Vermutung?

von Soul E. (Gast)


Lesenswert?

Marc H. schrieb:

> Ist dein Wissen verlässlich, oder nur Vermutung?

Der Lieferant handelt mit Eurem Einkauf und Eurer Rechtsabteilung eine 
Geheimhaltungsvereinbarung (NDA) aus. Wenn die unterschrieben ist, 
bekommst Du die für Dein Projekt notwendigen Unterlagen. Üblicherweise 
ganz oldschool auf einer DVD, nicht zum runterladen.

Wenn Du Glück hast lädt mal jemand was bei Wikileaks hoch. Es kann aber 
auch sein, dass den Leuten an ihrem Job und ihrem Eigenheim (die Höhe 
der Vertragsstrafe liegt darüber) gelegen ist und sie sich an ihre 
Verträge halten.

von Jim M. (turboj)


Lesenswert?

soul e. schrieb:
> Wenn Du Glück hast lädt mal jemand was bei Wikileaks hoch.

Das passt dann aber üblicherweise nicht zu aktuell erhältlichen Karten. 
Da ändert sich auch der Controller bzw. dessen Software öfters mal.

soul e. schrieb:
> Der Lieferant handelt mit Eurem Einkauf und Eurer Rechtsabteilung eine
> Geheimhaltungsvereinbarung (NDA) aus.

Das machen die üblicherweise aber nur wenn damit ein Auftrag mit >10k 
oder 100k Karten rauskommt.

Und die Infos für Karte A nutzen Dir für Karte B wenig.

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.