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?
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.
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
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!?
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.
@ 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.
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.
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.