Erläuterung des Micron NOR Flash-Datenblatts

Ich arbeite daran, einen Controller für einen Micron NOR Flash-Speicher (MT25QL128ABB) zu erstellen, und ich habe Schwierigkeiten beim Schreiben/Lesen des Geräts. Ich würde gerne wissen, ob mein Vorgehen richtig ist:

Schreibvorgang:

  1. Senden Sie den Schreibfreigabebefehl (06h)

  2. Verriegeln Sie den Schreibfreigabebefehl, indem Sie die #S-Leitung erhöhen

  3. Senken Sie die #S-Linie

  4. Senden Sie den Seitenprogrammbefehl (02h)

  5. Sende die Schreibadresse (24 Bit)

  6. Senden Sie die Schreibdaten (ich schreibe 96 Bit)

  7. Nachdem das letzte Bit der Schreibdaten gesendet wurde, heben Sie die #S-Leitung an

Lesevorgang:

  1. Senken Sie die #S-Linie

  2. Senden Sie den Lesebefehl (03h)

  3. Sende die gelesene Adresse (24 Bit)

  4. Senden Sie das Taktsignal für 96 Bit weiter

  5. Nachdem die letzte Uhr gesendet wurde, heben Sie die #S-Leitung an

Das Datenblatt lautet wie folgt:

Zum Lesen:

Geben Sie hier die Bildbeschreibung ein

Für ein Write (Seitenprogramm):

Geben Sie hier die Bildbeschreibung ein

Nachdem ich einen Schreibversuch unternommen habe, lese ich das Statusregister und sehe, dass das "Write Enable"-Bit immer noch gesetzt ist. Das Datenblatt gibt an, dass der Schreibfreigabe-Latch nach einem Seitenprogrammierungsbefehl automatisch gelöscht werden sollte, unabhängig davon, ob er erfolgreich war oder nicht. Dies zeigt mir an, dass der Seitenprogrammbefehl nicht ausgeführt wird.

Wenn ich einen Leseversuch versuche, würde ich erwarten, dass ich, da ich den Speicher nicht erfolgreich programmiert habe, alle Einsen erhalten würde. Das Gerät gibt tatsächlich alle 1-Werte bei einem Lesevorgang zurück, gibt jedoch für eine bestimmte Zeit weiter aus, selbst nachdem ich die Uhr angehalten und die #S-Leitung angehoben habe.

Beachten Sie, dass ich in der Lage bin, das Statusregister, das Flag-Statusregister und die Geräte-ID erfolgreich zu lesen, den Schreibfreigabe-Latch zu setzen und den Schreibfreigabe-Latch nach Belieben zu löschen. Bevor ich einen Seitenprogrammierungsbefehl versuche, sende ich immer den Massenlöschbefehl, um sicherzustellen, dass das Gerät gelöscht wird. Ich betreibe den CLK zum Speichergerät mit 20 MHz, weit unter dem Maximum. Frequenz.

Hier ist das Zeitdiagramm dessen, was ich sehe, wenn ich einen Lesevorgang versuche:

(nicht maßstabsgetreu)

Geben Sie hier die Bildbeschreibung ein

Hier ist, was ich zum Schreiben sende:

(nicht maßstabsgetreu)

Diagramm schreiben

Beachten Sie, dass diese Diagramme nicht die tatsächliche Anzahl der Uhren zeigen

Antworten (2)

Flash benötigt zum Schreiben Zeit in der Größenordnung von Millisekunden. Was erhalten Sie, nachdem Sie den Programmseitenbefehl gesendet haben, wenn Sie den Status „Write in Progress“ lesen? Das Datenblatt sagt auch, dass die Schreibfreigabe zurückgesetzt wird, wenn der Vorgang abläuft, was darauf hindeutet, dass während des Schreibens der Schreibfreigabe-Latch immer noch gesetzt ist.

Ich sende diese Befehle manuell mit einem C-Programm, um ein FPGA zum Senden des Befehls auszulösen, daher glaube ich nicht, dass es ein Zeitproblem ist, da ich Sekunden später einen Lesevorgang versuche. Trotzdem lese ich das Statusregister, nachdem ich versucht habe zu schreiben, und das Statusbit ist 0, was anzeigt, dass das Gerät bereit ist. Ich lese auch das Flag-Statusregister und alle Bits sind 0 außer Bit 7, was anzeigt, dass keine Befehlszyklen im Gange sind und das Gerät bereit ist.
In diesem Fall würde ich versuchen, die Leitungen zum Chip zu prüfen und zu sehen, was er tatsächlich empfangen hat.
Ich habe das getan. Es empfängt trotzig genau das, was ich ihm zu senden gedenke. Ich habe mich vergewissert, dass ich auch nicht gegen die Zeitvorgaben verstoße. Ich werde ein Zeitdiagramm erstellen und es meiner Frage hinzufügen, um zu verdeutlichen, was ich sehe.

Ich habe das Problem mit meinem Setup entdeckt. Das Problem bestand darin, dass ich dem Speichergerät nicht genügend Zeit gegeben habe, um den Schreibfreigabebefehl zu speichern, bevor ich den Seitenprogrammierungsbefehl gesendet habe. Ich habe eine größere Verzögerung zwischen dem Senden des Schreibaktivierungsbefehls und dem Senden des Seitenprogrammbefehls hinzugefügt, wodurch das Problem behoben wurde. Ich kann jetzt erfolgreich Daten auf dem Gerät lesen und schreiben.