Hallo, ich habe ein Problem das ext. Flash Memory W29C040 (Winbond)über meinen ATMega16 anzupsrechen. Ich habe alle Infos die wichtig sein könnten mal angehängt. Das Projekt ist ein Datenlogger, der verschiedene Sensoren einliesst und die Daten in dem ext. Flash speichert (bzw speichern soll). Die Speicherung oder das Auslesen ist leider das Problem. Im Programm wird zuerst der Software Protection Mode des W29C040 ausgeschaltet. Anschliessend wird eine Speicherstelle(0x000F55) beschrieben und die Zellen (0x000000) und (0x000F55) gelesen. Das Oszi-Image zeigt, dass beim zurücklesen das Datum nicht richtg angezeigt wird. Ich bin über jede Idee und Hilfe dankbar. Schöne Grüße Jan-Erik
Assembler ist nicht so wirklich mein Ding. Ich habe mal angefangen, einen FLASH-Programmer zu entwickeln. Das Ziel war Low-Cost und daher beschränkt auf maximal 4 MBit in PLCC44, sollte im wesentlichen für ein BIOS sein. Ist dann irgendwie gestorben. Ich habe das nicht wirklich gebraucht und die Ziel-Gruppe war dann doch nicht so richtig interessiert. Das Teil lässt sich über ein Terminal steuern und macht schon so Sachen wie Identifizieren, Leertest, Löschen und Schreiben eines Test-Strings. Naja, ich hab's halt mal angehängt, viel Spass damit.
Hi Rudolph, vielen Dank erstmal für deine Antwort. Ich habe dein Programm gleich mal ausprobiert, nachdem ich das Flash direkt an den Mega16 angeschlossen haben. Aufbau und Portbelegung habe ich von dir übernommen. Allerdings habe ich auch jetzt noch ein Problem. Bei der Identifizierung bekommen ich schon kein vernünftigen Wert zurück (ist immer 0x90). Leider kann ich noch immer nicht sagen, ob es am schreiben oder lesen liegt. Hast du vielleicht noch eine Idee? Welchen Flash Speicher hast du denn benutzt? Schöne Grüße Jan-Erik
>Bei der Identifizierung bekommen ich schon kein vernünftigen Wert zurück >(ist immer 0x90). Da liest du den zuletzt gesendeten Wert fürs Identify Kommando zurück. Warum auch immer. Der Wert scheint da am Port zu kleben.
Nun ja, mein Interesse galt vor allem dem AM29F040(A/B). Besorgt habe ich mir, was ich so an 4 MBit FLASH's bekommen konnte. Einen W29C040 habe ich hier. Und auch W29C020 und andere Teile, die auch PLCC44 haben. Allerdings ist das wirklich ziemlich weit weg inzwischen. Ich bin mir nur sicher, dass das funktioniert hat, so richtig weit gekommen bin ich ja nun auch nicht. Wenn ich mir den Code so ansehe dann ist es wahrscheinlich eine gute Idee, die Optimierung abzuschalten. Die Zugriffe auf die Ports erfolgen sonst zu schnell. Und im Projekt habe ich auch -O0 benutzt. Aus write_command() : PORTB = 0x55; PORTC = 0x55; PORTD = (PORTD & 0x1f); PORTD |= OE; PORTD &= ~CE; PORTD &= ~WE; PORTA = 0xAA; PORTD |= WE; PORTD |= CE; Mit Optimierung könnte das ein wenig sehr knapp für das FLASH werden...
Hallo, Du könntest auch messen wie die flanken der Signale sind, und je nach länge der Leitungen ein paar Takte Pause einbauen, damit die sicher den richtigen Wert am Flash haben, wenn die Enables low gehen. Ich hatte mir mal einen Adapter gebaut, um ein Flash für das PC-BIOS zu beschreiben (DIP32), das ich zerschossen hatte. Das hab ich in Bascom geproggt auf einem Mega644. Ein Frontend dazu aber auf den PC, damit ich die 256KB per UART an den Mega übertragen konnte. Bei 16MHz des Mega hab ich zwischen WE-low und WE-high ein NOP dazwischen gebaut, vor dem einlesen eines Bytes 2 NOPs. Aja, und Pullups beim lesen aktiviert bei den Datenleitungen. Hier noch die Unterseite der Verkabelung: http://roboter.net-con.net/rn/FlashAdapter_Unterseite.JPG
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.