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