mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega16 und ext Flash Memory (W29C040)


Autor: Jan-erik S. (madmanphytech)
Datum:
Angehängte Dateien:

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

Autor: Rudolph R. (rudolph)
Datum:
Angehängte Dateien:

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

Autor: Jan-erik S. (madmanphytech)
Datum:

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

Autor: holger (Gast)
Datum:

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

Autor: Rudolph R. (rudolph)
Datum:
Angehängte Dateien:

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

Autor: John Small (linux_80)
Datum:

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

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.