Forum: Mikrocontroller und Digitale Elektronik MMC/SD: Mit welchem Wert wird bei "ERASE" gefüllt?


von sebastians (Gast)


Lesenswert?

Hallo,
mit google hab ich das hier gefunden:
http://www.embeddedrelated.com/usenet/embedded/show/63205-1.php

Versteh ich das richtig?
- Löschen geht nur Sektor-weise.
- Schreiben eines bytes geht nur wenn es vorher gelöscht wurde.
- Wenn ich ein byte schreiben will, dann merkt die MMC selbst ob es
  sofort geschrieben werden kann (es war schon gelöscht).
  Wenn nicht, dann löscht sie den ganzen Sektor, macht aber vorher ein
  Backup in einem internen RAM und beschreibt dann den Sektor wieder,
  mit meinem byte und mit dem Rest aus dem Backup.
- Ein gelöschtes byte hat einen bestimmten Wert.
  "merkt die MMC" im vorherigen Punkt ist ein Vergleich auf diesen Wert.
  Stimmt das?
  Und welcher Wert ist es? 0x00 oder 0xFF?

Hintergrund der Frage:
Ich möchte eine MMC mit einem PC "formatieren" (Komplette MMC füllen mit 
dem ERASE-Wert, NICHT mit einem Dateisystem formatieren), mit einem 
Microcontroller (AVR) byteweise beschreiben und mit einem PC wieder 
auslesen.

Wenn der Microcontroller byteweise schreibt möchte ich verhindern, dass 
jedesmal der ganze Sektor gelöscht und neu geschrieben wird.
- Weil das langsam wäre.
- Weil die Anzahl Schreib-Zyklen von Flash-Speicher begrenzt sind.

Sebastian

von sebastians (Gast)


Lesenswert?

Hab noch was gefunden:
http://www.compuphase.com/mbr_fat.htm
    a write operation on Flash memory can only write 0 bits.
    To write a 1 bit, the Flash memory must be "erased".
    An erase operation sets all bits to 1 in a "Flash sector"
Das bestätigt meine Vermutungen, hilft aber nicht wirklich weiter:
Um festzustellen ob sie löschen muss, liest die MMC dazu wirklich das 
byte und prüft ob zu viele bits auf 1 gesetzt sind?

Und ist der Lösch-Wert wirklich 0xFF oder ist er das nur im FLash, aber 
die MMC hat noch einen Negierer eingebaut weil Filesysteme beim 
Formatieren mit 0x00 füllen?

Falls mir hier keiner weiterhelfen kann, werde ich folgendes versuchen:
- ERASE-Befehl im AVR programmieren
- auslesen was danach drin ist
- Zeit messen, wie lang es dauert, in einen Sektor zu schreiben
  - wenn er mit 0x00 gefüllt ist
  - wenn er mit 0xFF gefüllt ist

Sieht jemand einen Denkfehler?

Sebastian

von ABC (Gast)


Lesenswert?

Also ich kenn jetzt nur SD - karten. mmc wird ählich sein.

1. es sind block orientierte Datenträger. bei denen ein Block 
normalerweise die 512 Byte hat. Bei SD - karten sind auch grössere 
Sektoren denkbar. mir aber bisher noch nicht untergekommen.

2. Diese können nur am stück gelesen oder geschrieben werden (zumindest 
SD ist das so) Was intern abläuft ist noch mal was anderes.


3. SD - karten setzten als speichermedium einen Flash speicher ein. die 
interne aufteilung ist meist grösser als ein sektor. die eigenschaften 
hast du ja schon rausbekommen, das so eine Zelle nur am stück gelöscht 
werden kann. Daraus folgt, das die SD - Karte beim Schreiben von einem 
Sektor, erst die zu schreibenden daten in eine gelöschte zelle schreibt, 
und danach die nicht überschriebenen "Sektoren" aus der orginal zelle 
umkopiert.

4. eine SD - Karte hat intern mehr Zellen zur verfügung als nach ausen 
sichtbar sind. um z.B. Fehler zu kompensieren, die Schreibvorgänge 
überhaupt realisieren zu können, ...

5. mit einem speziellen befehl kann der SD - Card gesagt werden eine 
bestimmte anzahl von internen zellen zu löschen. bzw. für einen 
schreibvorgang vorzubereiten. damit entfällt das warten bis die SD - 
karte eine passende Zelle gefunden hat, den sie für den Schreibvorgang 
verwenden kann.


ps. die dokumentation zu mmc / SD sollten doch zum teil verfügbar sein.

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.