Forum: Mikrocontroller und Digitale Elektronik atmega2561 mit externem Flash


von Axel (Gast)


Lesenswert?

hallo,

ich benutze einen ATMEGA2561 und die 256k Flash gehen langsam zur Neige. 
Laut Datenblatt des Controllers kann man externe parallele Komponenten 
wie z.B. Flash, RAM, ... anschließen. Als Beispiel ist jedoch nur ein 
RAM beschrieben.

Kann man mit dem externen Flash den Programmspeicher des AVR erweitern?
Wie wird der externe Flash dann programmiert? Automatisch über den AVR?

von Joachim B. (jar)


Lesenswert?

was soll den rein?

Programm denke ich wird nicht gehen, evtl. über nachladen in den 
internen.

Daten können aber im externen flash, Ram oder EEPROM ausgelagert werden, 
ich würde bei keinen Timingproblemen an I2C EEPROM denken, wenns 
schneller sein soll RAM, oder FRAM.

von Oliver S. (oliverso)


Lesenswert?

Der Prozessor kann Programme nur aus seinem eigenem Flash ausführen. 
Wenn du da Erweiterungsspeicher, egal, welcher Art, dranflanschst, 
müsstest du daher Programmteile von dort ins AVR-Flash schreiben. Das 
geht zwar alles irgendwie, dauert aber und ist aufwendig.

Aber mal ganz neugierig gefragt: Mit welcher Anwedung bekommt man denn 
256K Flash auf einem AVR voll?

Oliver

von Ingo L. (corrtexx)


Lesenswert?

Oliver S. schrieb:
> Mit welcher Anwedung bekommt man denn 256K Flash auf einem AVR voll?
Sicher nicht mit reinem Code, ich vermute viele große Tabellen!?

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Axel schrieb:
> Automatisch über den AVR?

Automatisch geht da erstmal nichts. Wenn das Timing in einer der 4 
Waitstate Konfigurationen im Schreibmodus (/WR low) für den Flashchip 
ausreicht, dann kannst du einen Flash mit dem XMEM Interface des Mega 
beschreiben - vorausgesetzt, du musst nicht noch bestimmte Unlock 
Kommandos an den externen Flash schicken, welche du dann vorher schicken 
solltest.
Fig. 9-3 bis Fig. 9-6 im DB beschreiben das Timing für die verschiedenen 
Modes.
Flashbausteine haben u.U. auch bestimmte Anforderungen an Page Write 
etc. die du im DB des Flashs nachschlagen solltest.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@ Axel (Gast)

>ich benutze einen ATMEGA2561 und die 256k Flash gehen langsam zur Neige.

Wieviel Code und wieviel Daten liegen dort drin?

>Laut Datenblatt des Controllers kann man externe parallele Komponenten
>wie z.B. Flash, RAM, ... anschließen.

Ja, aber nur als Datenspeicher, nicht als Programmspeicher.

>Als Beispiel ist jedoch nur ein
>RAM beschrieben.

Flash ist ähnlich.

>Kann man mit dem externen Flash den Programmspeicher des AVR erweitern?

Nein, das ist prinzipiell beim AVR nicht möglich.

>Wie wird der externe Flash dann programmiert? Automatisch über den AVR?

Nein, dazu muss man einen passenden Programmieradapter oder Software für 
den AVR haben. Beim AVR kann man in externen Speichern SINNVOLL nur 
Daten ablegen, aber keinen ausführbaren Programmcode. Solche Dinge wie 
Selbstumprogramierung des Flash für kann man zwar machen, sind meistens 
aber wenig sinnvoll.

von Peter D. (peda)


Lesenswert?

Man kann den Flash nur für konstante Daten anschließen.
Da nur max 56kB möglich sind, muß man weitere IO-Pins als Page-Select 
für die höheren Adressen benutzen.
Die Programmroutinen, z.B. über die UART, muß man selber schreiben. Im 
Datenblatt des Flash findet man alle nötigen Befehle. Leider kocht da 
jeder Hersteller sein eigenes Süppchen.

von Peter D. (peda)


Lesenswert?

Man kann auch SPI-Flash verwenden, macht die Schaltung deutlich 
einfacher:

http://de.farnell.com/spansion/s25fl164k0xmfi011/ic-speicher-flash-64mbit-soic/dp/2363323

von c-hater (Gast)


Lesenswert?

Axel schrieb:

> ich benutze einen ATMEGA2561 und die 256k Flash gehen langsam zur Neige.

Wie passiert denn sowas? Internet-Dump->µC oder was?

> Laut Datenblatt des Controllers kann man externe parallele Komponenten
> wie z.B. Flash, RAM, ... anschließen.

Ja, klar.

> Kann man mit dem externen Flash den Programmspeicher des AVR erweitern?

Nein. Alles externe ist immer nur Datenspeicher. Aber mit an Sicherheit 
grenzender Wahrscheinlichkeit ist bei dir der größte Teil des 
Programmspeichers ja auch nicht wirklich mit Code gefüllt, sondern mit 
konstanten Daten. Und die kann man natürlich problemlos auch auf 
externen RO-Speicher auslagern.

> Wie wird der externe Flash dann programmiert?

In erster Näherung: garnicht. Aber natürlich wäre es möglich (unter 
Benutzung einiger zusätzlicher IO-Pins) die Sache mit Hilfe eines 
entsprechenden "Bootloaders" auch zur Laufzeit beschreibbar zu machen. 
Das entspräche dann insgesamt ungefähr dem Selfprogramming des internen 
Flash. Aber halt mit dem grundlegenden Unterschied, dass es nicht für 
Code funktioniert. Den könnte man zwar natürlich durchaus auch in den 
externen Speicher schreiben, aber niemals direkt von dort aus 
ausführen...

Klassische Harvard-Architektur halt. Code kann nur aus dem Speicher 
ausgeführt werden, der dafür vorgesehen ist, Code zu enthalten. Im Falle 
der AVR8 also ausschließlich der interne Flash.

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