www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programmierung des AM29LV017D


Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat jemand zufällig schon einmal den Flash Memory AM29LV017D von AMD
benutzt?
http://www.amd.com/us-en/assets/content_type/white...


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.

Autor: Darko Sabljo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, werd es mal probieren.

Autor: hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Darko Sabljo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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;


????

Autor: Darko Sabljo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Gate (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.