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!?
:
Bearbeitet durch User
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
@ 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.
Man kann auch SPI-Flash verwenden, macht die Schaltung deutlich einfacher: http://de.farnell.com/spansion/s25fl164k0xmfi011/ic-speicher-flash-64mbit-soic/dp/2363323
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.