Hat jemand zufällig schon einmal den Flash Memory AM29LV017D von AMD benutzt? http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/21415.pdf Wie habt ihr ein Byte in den Flash Memory gebracht. ich kriege das irgendwie nicht hin. Ist ein ziemlich komplziertes Signalspiel nötig. Habe versucht einfach 4 Schreibbefehle nacheinander, aber klappt nicht ?? Danke, falls jemand antwortet.
Hi also um das Flash zu beschreiben musst du ja erst die 3 Commands reinschreiben, und als letztes erst das Byte das du im Flash haben möchtest. Ahja.. beim schreiben musst du DQ7 abfragen, ob der Flash das Commando verarbeitet hab... wenn du die 4 Schreibbefehle einfach reinhaust, bist du warscheinlich zu schnell, und der Flash is noch nicht so weit, um zum nächsten Befehl zu gehen.. gruss Darko
Muss ich nach jedem Command (0xAA,0x55,0xA0) das DQ7 bit abfragen, oder erst nach Abschluss des 4-zykligen Byte-Programs, um damit ein neues Byte schreiben zu können ? Also 1. Schreibe 0xAA nach DQ0..DQ7 DQ7 abfragen Schreibe 0x55 nach DQ0..DQ7 DQ7 abfragen Schreibe 0xA0 nach DQ0..DQ7 DQ7 abfragen Schreibe Datum nach DQ1..DQ7 und Adresse nach A0..A20 DQ7 abfragen oder 2. Schreibe 0xAA nach DQ0..DQ7 Schreibe 0x55 nach DQ0..DQ7 Schreibe 0xA0 nach DQ0..DQ7 Schreibe Datum nach DQ1..DQ7 und Adresse nach A0..A20. DQ7 abfragen ????????????? Danke
lass mich überlegen... also wenn ich mich nicht irre nach jedem Cycle... also die Version 1 von dir. Übrigens, das weisst du sicher schon, aber du kannst nicht eine Adresse doppelt beschreiben, d.H. du musst bei einem Flash bevor du neue Daten Schreiben willst, immer den Sector erst löschen. gruss darko
Im Datenblatt steht ja, dass man zuerst an DQ0..DQ7 0xAA, übergeben soll. Bei der Adresse steht XXX. Heißt das, das die Adresse egal ist also, wäre: unsigned char *ptr_to_sram; ... ... ptr_to_sram=0xFFFF; *ptr_to_sram=0xAA; das gleiche wie unsigned char *ptr_to_sram; ... ... ptr_to_sram=0xEEEE; *ptr_to_sram=0xAA; ????
hi jep is egal. Funktionierts noch immer nicht? kannste mal den Code deiner Schreibroutine komplett posten? Vielleicht solltest du erstmal testen ob du die Device/manufacture ID rausbekommst, und anhand der die restliche Routine anpassen.. Gruss Darko
Danke Darko für deinen Tipp mit der manufactures ID. Hab das damit mal probiert und es hat dann auch geklappt. Konnte damit die Fehler so einengen, dass ich das jetzt glaub ich gepackt habe. Naja auf dem Oszi scheinen die richtigen Daten zu sein. Mein Fehler war, dass ich nach der Sector Erase Sequenz die falschen Statusbits abgefragt habe. Dass schreiben hat danach nicht geklappt.So scheint es richtig zu sein: -------------- //RESET RESET_SRAM=0; *ptr_to_sram=0xF0; RESET_SRAM=1; // Sector Erase Sequence: 6 Schreibzyklen *ptr_to_sram=0xAA; *ptr_to_sram=0x55; *ptr_to_sram=0x80; *ptr_to_sram=0xAA; *ptr_to_sram=0x55; *ptr_to_sram=0x30; //solange warten bis Sector Erase Sequence abgeschlossen while (DQ7==1){ }; //-->bei DQ7==0 --> Erase Command Sequenz akzeptiert while (ERASE_READY==0){ }; //--> ERASE_READY=1 --> Löschvorgang abgeschlossen -------------- (ERASE_READY ist das RY/BY# BIT) Wichtig ist auch die vorherige Anfrage von DQ7. Ohne die klappts nicht. Also nochmal. Vielen Dank Darko
Hi, mit diesem Programmausschnitt kann ich ja Bytes einschreiben: void unlock_bypass_byte_program(unsigned char f[], unsigned int anzahl){ unsigned int k; //unlock bypass program enter *ptr_to_flash=0xAA; *ptr_to_flash=0x55; *ptr_to_flash=0x20; for (k=0;k<anzahl;k++){ *ptr_to_flash=0xA0; *ptr_to_flash=f[k]; while (PROGRAM_DONE==0); ptr_to_flash++; } //EXIT Unlock Bypass Mode *ptr_to_flash=0x90; *ptr_to_flash=0x00; } Ich kann alle Zeichen einschreiben. Bis auf das Zeichen 0x0D. Wenn ich dieses Zeichen versuche einzuschreiben, schreibt er mir zwei Bytes: 0x0D und 0x0A. Hat jemand ein Idee woran das liegen könnte ??? Danke.
Hallo, Tschuldige, das ich mich da auch noch einschleiche. Ich habe auch mal eine frage. Ich habe nämlich auch Probleme mit einem Flash Speicher. Eine Frage wollte ich dir stellen Hagen, wenn ich darf. Wenn du den Flash Speicher löschen willst, sei es Sector oder alles, wartest du eine Zeit ab und fragst dann den Status ab, oder nach dem die den Command geschrieben hast wartest du mit der while schleife.
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.