Forum: Mikrocontroller und Digitale Elektronik CFI Query Command


von Olli Z. (z80freak)



Lesenswert?

Ich versuche gerade einem Arduino Due das CFI-Protokoll beizubringen. 
Dazu habe ich das Datenblatt eines Flash Chips gelesen (Micron 
S29GL064N) aber vermutlich nicht verstanden...

Zunächst wollte ich nur den "Unique ASCII string" ("QRY") lesen. Da 
scheite ich bereits. Laut Datenblatt muss sich der Chip im "Read mode" 
befinden und man muss ihm das "CFI Query Command" senden. Zitat: "This 
device enters the CFI Query mode when the system writes the CFI Query 
command, 98h, to address 55h, any time the device is ready to read array 
data."

Den "read mode" hat der Chip nach einem RESET. Nun muss doch eigentlich 
nur auf die Adresse 0x55 das Datenwort 0x0098 geschrieben werden. Den 
Chip betreibe ich im "WORD-Mode", d.h. Pin "BYTE#" hat HIGH-Level.

Den Schreibvorgang ist laut Datenblatt so wie im beigefügten Timing 
Diagramm. Ich mache nun folgendes:
1. Byte-Swop des Daten-Worts (16 Bit) 0x0098 zu 0x9800 (der Chip 
arbeitet intern Little-Endian)
2. CE#, OE# und WE# auf HIGH (Ausgangssituation)
3. Adresse 0x55 an die Adresspins A0-A21 anlegen
4. CE# und WE# auf LOW (Übernahme der Adresse bei fallender Flanke von 
CE oder WE)
5. Daten-Pins auf Ausgang stellen und die Bits laut Daten-Wort anlegen
6. WE# und CE# auf HIGH (übernahme der Daten bei steigender Flanke von 
WE oder CE)
7. Daten-Pins auf Eingang stellen

Dann glaube ich das der Chip die gewünschte Information über einen 
normalen Read-Vorgang an der Adresse 0x10 bereitstellt. Das mache ich 
so:
1. Die Datenpins auf Eingang stellen
2. CE# auf HIGH
3. OE# auf HIGH
4. Die Adresse an die Adresspins anlegen
5. CE# auf LOW (Adresse wird übernommen)
6. OE# auf LOW (Die Daten werden vom Flash bereitgestellt)
7. Datenbits einlesen und in eine 16-Bit Variable speichern
8. OE# auf HIGH
9. CE# auf HIGH
10. Byte-Swob durchführen

Ich erhalte jedoch nur die an der adresse im Flash gespeicherte 
Information.

Was mache ich falsch?

von Olli Z. (z80freak)


Lesenswert?

Laut CFI-Spezifikation (gibt ja reichlich davon) wird der 
CFI-Query-Command Code in den Lower-Bits D0-D7 übertragen, egal welche 
Busbreite vorliegt. Von daher ist mein Byteswop im 1. Schritt oben 
natürlich Unsinn.

Leider funktioniert es ohne diesen genauso wenig. Ich stehe immer noch 
vor einem Rätsel...

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