Autor |
gelöschter Zustand einer SD Karte |
|
|
|
|
BID = 801050
wulf Schreibmaschine
Beiträge: 2246 Wohnort: Bozen
|
|
Hallo,
wie im Titel bereits angedeutet würde ich gerne wissen welchen Zustand die Bits einer SD Karte haben wenn sie gelöscht sind.
Ich würde gerne eine Karte unformatiert mit einem µC beschreiben und dazu dann leere Bytes von beschriebenen Bytes unterscheiden können. Es wird ASCII verwendet, also kommen niemals Zeichen wie 0x00 oder 0xFF im "Text" vor. Prinzipiell könnte es mir eigentlich egal sein da ich die Karte sowieso vor dem Einsatz initialisieren (also löschen) muss, da SDHC Karten mit FAT32 ausgeliefert werden.
Dennoch wäre der "Ruhezustand" der Bits interessant zu wissen um das gleich ordentlich ausprogrammieren zu können.
Wikipedia meint zwar, dass der Ruhezustand eines NAND Flash "1" ist, aber wird das vom Speichercontroller möglicherweise invertiert, sodass ich dann "0" zum Löschen schreiben soll?
Kennt sich jemand in dieser Richtung aus?
Grüße
Simon
_________________
Simon
IW3BWH |
|
BID = 801167
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
|
Zitat :
| Dennoch wäre der "Ruhezustand" der Bits interessant zu wissen um das gleich ordentlich ausprogrammieren zu können. |
Zitat :
| The card data after an erase operation is either “0” or “1”, depending on the card vendor.
The SCR register bit DATA_STAT_AFTER_ERASE (bit 55) defines whether it is “0” or “1”. | So stehts in der Spezifikation.
Prinzipiell kann es dir egal sein, denn du bekommst den wirklichen Speicherinhalt sowieso nicht zu Gesicht.
Das läuft alles durch den Controller, der z.B. ECC-Informationen hinzufügt und auswertet, Wear-Management betreibt und defekte Bereiche ummappt.
Bei diesem Speichermanagement lässt er sich auch nicht in die Karten schauen.
Du solltest nach dem Löschen wenigstens ein paar Verwaltungsinformationen aufbringen, aus denen hervorgeht, wo gültige Daten zu finden sind und was frei ist.
P.S.:
Zitat :
| sodass ich dann "0" zum Löschen schreiben soll? | DU schreibst zum Löschen überhaupt keine Daten, sondern verwendest eines der Erase-Kommandos!
[ Diese Nachricht wurde geändert von: perl am 30 Nov 2011 0:37 ] |
|
BID = 801184
wulf Schreibmaschine
Beiträge: 2246 Wohnort: Bozen
|
Zitat :
|
DU schreibst zum Löschen überhaupt keine Daten, sondern verwendest eines der Erase-Kommandos!
|
Wie soll ich denn von einem Betriebssystem aus (damit soll die Karte initalisiert werden) einen SD spezifischen Befehl absetzen? Ich kann in Linux die Karte direkt mit Nullen oder Einsen beschreiben, mehr aber auch nicht. Die einzige Möglichekeit das selber zu machen, wäre das den µC erledigen zu lassen. Aber das wollte ich aus Zeitgründen vermeiden.
Deine Idee mit den Verwaltungsdaten auf der Karte ist zwar nicht schlecht. Die Karte soll als Speicher für eine Wetterstation nebenbei mitlaufen und alle Werte loggen.
Da brauchts m.E. keine Verwaltungsdaten. Der Karte wird einfach linear beschrieben.
Leider hat die aktuelle Hardware keinen Batteriegestüzten SRAM, sonst könnte ich die Schreib- und Lesepointer so mitschreiben. In der nächsten Hardware wird das vorgesehen (sprich die RTC hat dann genug General purpose SRAM).
Mit dieser Hardware soll der Schreibpointer beim Einschalten durch einen binären Suchalgorithmus gefunden werden. Der Lesepointer hingegen wird vom Server mitgeliefert (der Server ruft die Station regelmäßig über GSM an und fragt neue Daten ab).
Grüße
Simon
_________________
Simon
IW3BWH
|
BID = 801188
Ltof Inventar
Beiträge: 9334 Wohnort: Hommingberg
|
Du kannst Doch selbst einen definierten Zustand herstellen: Erzeuge ein Textfile, das die Karte vollständig ausfüllt.
Mit einer geschickten Struktur einer darin befindlichen Tabelle findet sich der µC ganz einfach zurecht. Nebenbei können die Daten im Klartext lesbar abgelegt werden.
Das könnte dann so aussehen:
#000001;0025;1013;0012;0001
#000002;0025;1013;0012;0001
#000003;0025;1013;0012;0001
#000004;0025;1013;0012;0001
*000000;0000;0000;0000;0000
*000000;0000;0000;0000;0000
*000000;0000;0000;0000;0000
*000000;0000;0000;0000;0000
*000000;0000;0000;0000;0000
*000000;0000;0000;0000;0000
Der µC müsste nicht die erste freie Zelle suchen, sondern nur die erste freie Zeile.
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 801232
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
Zitat :
| Wie soll ich denn von einem Betriebssystem aus (damit soll die Karte initalisiert werden) einen SD spezifischen Befehl absetzen? |
Prinzipiell genau so, wie du es beim Lesen und Schreiben der Daten machst.
Dabei kannst du auch nicht einfach die Daten rein kloppen, sondern brauchst die entsprechenden Befehle, damit der Controller weiß wohin, woher und wieviel.
Überhaupt werden die Daten auch nicht byteweise, sondern blockweise geschrieben. Insofern hat die Bedienung eines solchen Speichers einiges mit dem Betrieb einer Harddisk gemeinsam.
Nebenbei gesagt fühlt sich eine CF-Karte genau wie ein IDE-Laufwerk an und ist sogar nahezu pinkompatibel.
Egal, ob USB, CF oder SD, auf jeden Fall geht das Löschen über Erase viel schneller, als ein Neubeschreiben.
Wenn du erst einmal versuchst 2GB mit dem µC zu schreiben, wirst du dich wundern, wie lange das dauert.
|
BID = 801254
Ltof Inventar
Beiträge: 9334 Wohnort: Hommingberg
|
Zitat :
perl hat am 30 Nov 2011 10:54 geschrieben :
|
... damit der Controller ...
|
Mir kommt der Verdacht, dass wulf nicht verstanden hat, dass damit der Controller auf der Karte gemeint ist und nicht der µC, der das ganze bedienen soll.
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 801328
wulf Schreibmaschine
Beiträge: 2246 Wohnort: Bozen
|
Neee das hab ich schon verstanden. Nur läuft das alles über eine relativ langsame SPI Schnittstelle und selbst wenn Blockweise gelöscht wird, dann könnte das mit dem µC lange dauern.
Bisher habe ich auch selbst einen definierten Zustand hergestellt. Ich wollte eigentlich nur wissen ob ich als Grundzustand lieber '1' oder '0' nehmen sollte.
Aber da ich (laut perl) keine Möglichkeit habe zu wissen was der Memory Controller genau macht, werde ich einfach wie bisher angedacht, die Karte mit '0' vollschreiben.
Zitat :
| Wenn du erst einmal versuchst 2GB mit dem µC zu schreiben, wirst du dich wundern, wie lange das dauert. |
Genau darum geht es ja, und deshalb wird die SD Karte am PC "initialisiert".
@Ltof:
Die DAten werden sowieso menschenlesbar (ASCII) abgelegt.
Das mit dem zeilenweisen Ansatz habe ich mir auch schon durchdacht. Es gibt zwar für mehrere Stationen als gleiche Hardware, aber jeweils eine unterschiedliche Anzahl von Sensoren, und damit Werten. Um das so universell wie möglich zu gestalten bleibe ich beim byteweisen Ansatz und programmiere einen binären Suchalgorithmus wenn der µC neu gesta[/ot]rtet wird (um das Lesen und Schreiben der Blöcke kümmert sich eine darunterliegende Bibliothek).
Zitat :
| Prinzipiell genau so, wie du es beim Lesen und Schreiben der Daten machst. |
Das sehe ich ja ein. Aber das Betriebssystem stellt mir diese (tiefen) Befehle ja nicht direkt zur Verfügung.
Zusammenfassung; Ich werde es so machen:
PC initialisiert Karte mit '0'.
µC beschreibt Karte mit einem Endlosstring.
Um die Karte im Notfall aus der Ferne neu initialisieren zu können, werde ich die C Bibliothek der SD Karte um einen Löschbefehl erweitern (auf dem tiefen Level kann ich ja).
Ich danke euch für eure Ausführungen und schreite zur Tat =)
[ Diese Nachricht wurde geändert von: wulf am 30 Nov 2011 17:08 ]
|
BID = 801330
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
Zitat :
| Aber das Betriebssystem stellt mir diese (tiefen) Befehle ja nicht direkt zur Verfügung. |
Ich denke du verwendest Linux?
Das sollte der Quellcode offen gelegt sein, sodaß du ggfs. die nötigen Befehle noch dazustricken kannst.
|
BID = 801335
wulf Schreibmaschine
Beiträge: 2246 Wohnort: Bozen
|
Wie recht du da hast. Wenn ich nur diese Fähigkeiten hätte.
Im Ernst, so gut bin ich leider nicht. Und um mich da einzuarbeiten fehlt mir auch die Zeit.
Grüße
Simon
_________________
Simon
IW3BWH
|
BID = 801441
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
Zitat :
| Wenn ich nur diese Fähigkeiten hätte |
Dann bring das Erase doch dem µC bei.
Read_Data und Write_Data musst du ja ohnehin implementieren und damit ist das Ärgste ja schon geschafft.
|
BID = 801451
wulf Schreibmaschine
Beiträge: 2246 Wohnort: Bozen
|
Ja das werde ich machen.
Danke nochmal.
_________________
Simon
IW3BWH
|