NOR-Flash-Speicher Voller Chip vs. Block vs. Sektorlöschung

Ich versuche, ein NOR-Flash-Speichergerät zu verwenden: SST25VF016B (mit STM32 Discoveryboard F407VG). Ich bin jedoch bei einigen Begriffen auf ihrem Datenblatt verwirrt. Das Datenblatt finden Sie hier: https://www.elfa.se/Web/Downloads/_t/ds/SST25VF016Bx_eng_tds.pdf

Im Datenblatt wird erwähnt, dass dieses Gerät 16 Megabit Speicher hat. Im Löschabschnitt heißt es jedoch, dass es Folgendes hat: 1. Vollständiges Chip-Löschen 2. 4-KB-Sektorlöschung 3. 32-KB-Blocklöschung 4. 64-KB-Blocklöschung

Was ich verstehe, nachdem ich mir einige Referenzen angesehen habe, ist, dass der Sektor der kleinste Abschnitt in einem Speichergerät ist, und dann haben wir Blöcke. Aber in diesem Fall bedeutet ein 4-KByte-Sektor, dass er beispielsweise von Adresse 0 bis Adresse 4000 gelöscht wird?

Und noch eine Frage, als ich versuchte, dieses Gerät zu programmieren, hieß es, dass wir den Chip zuerst löschen müssen, bevor wir programmieren. Wird es dasselbe sein, wenn ich das vollständige Chip-Löschen verwende, oder sollte ich es Block für Block (oder Sektor für Sektor) löschen?

Kann mir jemand helfen, das zu verstehen? Vielen Dank!!

Beifall

Antworten (1)

Das erste, was Sie über NOR-Flash verstehen müssen, ist, dass das Programmieren einzelner Bytes nur 1-Bits auf Null ändern kann, aber kein bereits auf Null gesetztes Bit ändern kann. Um ein bisschen auf eins zurückzusetzen, muss der gesamte kleinste löschbare Abschnitt gelöscht werden.

Bei diesem Chip ist der kleinste löschbare Abschnitt ein 4-KByte-Sektor (4096 Bytes, beispielsweise Bytes 0–4095). Die Blöcke mit 32 KByte (32.768 Byte) und 64 KByte (65.536 Byte) sind einfache Gruppen von Sektoren, die in einem einzigen Vorgang gelöscht werden können. Es spielt keine Rolle, ob Sie einen Sektor löschen, entweder einen Block oder den gesamten Chip. Alle Bytes im Bereich werden auf Einsen zurückgesetzt (0b11111111).

Bei den meisten NOR-Chips ist es eigentlich nicht erforderlich, ein Byte vor dem Programmieren zu löschen. Allerdings kann eine solche Umprogrammierung wieder nur Einsen in Nullen ändern. Das Schreiben aller Nullen in ein bereits programmiertes Nicht-Null-Byte oder Bytes kann nützlich sein, um beispielsweise einen Datenblock schnell als ungültig oder veraltet zu markieren.

Hallo zusammen, danke für deine Erklärungen! Jetzt habe ich auch Probleme. Ich weiß nicht warum, aber nachdem ich den gesamten Chip gelöscht habe, liest er immer noch die letzten Daten, die ich dort geschrieben habe, wenn ich einige Adressen lese. Und wenn ich versucht habe, andere Daten an einer anderen Stelle zu schreiben, ist die Ausgabe "ÿ". Haben Sie einen Vorschlag, was ich tun sollte, um dieses Problem zu beheben? Danke!
Fragen Sie nach dem Abschluss des Löschvorgangs? Ein vollständiges Löschen des Chips dauert (relativ gesehen) lange. Wenn Sie andere Vorgänge versuchen, bevor der Löschvorgang abgeschlossen ist, wird er abgebrochen.
Was ich tat, war nach der Operation, ich wartete 1 Sekunde mit einer Verzögerungsfunktion. Meinten Sie das mit Umfragen? Tut mir leid für die dumme Frage, aber ich bin ganz neu :) danke!
@Stanleyaley Worauf ich mich bezog, war das Lesen des Statusregisters, bis Sie das BUSY als Null gelesen haben. Dieses Datenblatt besagt jedoch, dass die Chip-Löschzeit 50 ms beträgt, sodass Ihre Verzögerung funktionieren sollte. Zweite Frage: Führen Sie den Write-Enable-Befehl aus, bevor Sie den Chip löschen?
ahh ich verstehe. Ja ja, ich habe die Schreibaktivierung für alle Vorgänge verwendet, z. B. beim Lesen, Schreiben und sogar beim Löschen von Chips. Ich werde es heute noch einmal versuchen und Ihren Vorschlägen erneut folgen, um zu sehen, ob es funktioniert oder nicht. Aber vielen Dank für deine Erklärungen! Es hilft wirklich!
Hallo @DoxyLover! Ich habe es noch einmal mit Ihren Vorschlägen versucht und ja, es hat funktioniert !! Mir ist gerade aufgefallen, dass ich vergessen habe, in einem Teil meines Codes die Schreibfreigabeanweisung zu verwenden. Vielen Dank für die tollen Erklärungen!!! Beifall