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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.