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:
Senden Sie den Schreibfreigabebefehl (06h)
Verriegeln Sie den Schreibfreigabebefehl, indem Sie die #S-Leitung erhöhen
Senken Sie die #S-Linie
Senden Sie den Seitenprogrammbefehl (02h)
Sende die Schreibadresse (24 Bit)
Senden Sie die Schreibdaten (ich schreibe 96 Bit)
Nachdem das letzte Bit der Schreibdaten gesendet wurde, heben Sie die #S-Leitung an
Lesevorgang:
Senken Sie die #S-Linie
Senden Sie den Lesebefehl (03h)
Sende die gelesene Adresse (24 Bit)
Senden Sie das Taktsignal für 96 Bit weiter
Nachdem die letzte Uhr gesendet wurde, heben Sie die #S-Leitung an
Das Datenblatt lautet wie folgt:
Zum Lesen:
Für ein Write (Seitenprogramm):
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)
Hier ist, was ich zum Schreiben sende:
(nicht maßstabsgetreu)
Beachten Sie, dass diese Diagramme nicht die tatsächliche Anzahl der Uhren zeigen
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 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.
David
Joneleth Irenicus
David