www.mikrocontroller.net

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


Autor: sebastians (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
mit google hab ich das hier gefunden:
http://www.embeddedrelated.com/usenet/embedded/sho...

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

Autor: sebastians (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ABC (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.