Hi Leute,
ich habe Google schon um einiges bemüht, aber keine Antwort auf meine
Frage gefunden.
Und zwar möchte ich Programme für meinen ATMega aus einem externen
EEprom nachladen und dann ausführen. Leider habe ich bis jetzt keine
Möglichkeit gefunden mein Vorhaben zu realisieren.
Vielen Dank schon mal im Voraus.
Marcel H.
Marcel H. schrieb:> ich habe Google schon um einiges bemüht, aber keine Antwort auf meine> Frage gefunden.
Dann bemühe Google nochmal, aber diesmal mit dem Begriff "Bootloader".
Marcel H. schrieb:> Und zwar möchte ich Programme für meinen ATMega aus einem externen> EEprom nachladen und dann ausführen.
Dir ist aber schon klar, dass das Flash eine begrenzte Anzahl von
Lösch-/Schreibzyklen hat, und damit auch dieses "Nachladen" nur begrenzt
oft funktioniert, oder?
Hallo Stefan,
erstmal vielen Dank für deine schnelle Antwort.
Ein Bootloader würde zumindest meinen Zweck erfüllen.
Ich glaube, ich muss mein Problem etwas genauer erklären. Und zwar
möchte ich den Mikrocontroller starten und der soll dann nachschauen, ob
ein EEprom über I²C angeschlossen ist. Wenn dies der Fall ist, soll er
in diesem EEprom nachschauen, ob sich darin ein ausführbares Programm
befindet.
Nun komme ich zu meinem Problem. Und zwar frage ich mich, ob es möglich
ist dieses Programm in den RAM zu laden und von dort auszuführen. Meinen
ersten Gedanken, das Programm direkt aus dem EEprom auszuführen, habe
ich schnell wieder verworfen, weil ich mir gedacht habe, dass es an der
Geschwindigkeit des I²C-Bus scheitert.
Marcel H.
Marcel H. schrieb:> dieses Programm in den RAM zu laden und von dort auszuführen.
Hättest du einen Interperter als Programm im µC, dann könntest du Macros
aus dem EEPROM laden, die dieser Interpreter dann abarbeitet.
Oder du nimmst einem STM32Fxxx, die können Programmcode aus dem RAM
ausführen. Es handelt sich dabei aber um einen ARM Prozesor, der für den
Design möglicherweise Overkill ist.
Gruß Jannis
Nein, der ATMega kann keine Programme aus dem RAM ausführen, auch nicht
vom EEPROM, die Programme müssen ins Flash.
Da bekommst Du sie hin entweder via ISP oder per Bootloader, das wars.
Alternativ ein Interpreter, was aber wieder Geschwindigkeitseinbußen
bedeutet.
Dann vermute ich, dass mir nichts anderes als ein Interpreter übrig
bleibt. Da ein Programm ja bei jedem Start in den Flash geladen werden
müsste, würde ich dann alle paar Monate einen neuen µC brauchen. Das
kann ja auch nicht Sinn der Sache sein.
Allerdings muss ich mir dann wieder Gedanken um den Speicher machen. Der
Verbrauch wird dann ja "minimal" anwachsen.
Vielen Dank für eure Hilfe.
Gruß Marcel H.
Hintergrund: Der ATMega/AVR hat eine Harvard-Architektur mit getrenntem
Daten- und Programmspeicher. Als Programmspeicher ist beim AVR lediglich
Flash-Speicher verfügbar.
Du kannst die Zahl der Schreibzyklen auf den Flash-Speicher signifikant
reduzieren, wenn Du nur dann das Programm überträgst, wenn es notwendig
ist. Z.B. wenn eine neuere Version im EEPROM verfügbar ist.
Was ist der Grund dafür das Programm im EEPROM zu speichern?
Meine Schaltung soll (Welch neuartige Idee :D) eine Art kleiner Computer
werden. Mein Grundgedanke ist, dass ein Hauptcontroller als eine Art
BIOS fungiert und beliebige "Betriebssyteme" aus einem EEprom nachladen
kann. Hier steht mir allerdings die begrenzte Anzahl von Schreibzyklen
im Weg.
Marcel H. schrieb:> Meine Schaltung soll (Welch neuartige Idee :D) eine Art kleiner Computer> werden. Mein Grundgedanke ist, dass ein Hauptcontroller als eine Art> BIOS fungiert und beliebige "Betriebssyteme" aus einem EEprom nachladen> kann. Hier steht mir allerdings die begrenzte Anzahl von Schreibzyklen> im Weg.
Du verwendest einfach die falsche Architektur. ARM und MIPS können das.
Da Du sicher DIL bevorzugst, nimmst Du einfach einen
PIC32MX150F128B-I/SP, kostet bei R. 3.60€, und da hast Du 32k RAM, in
denen Du auch Programme ausführen kannst. Ganz einfach.
fchk
Nach einigem Überlegen und Recherchieren hat sich mir eine Frage an mich
selbst aufgetan, die ich mir auch schon teilweise beantworten konnte:
Wie wahrscheinlich ist es, dass ich so viele verschiedene Systeme
programmiere, dass es sich wirklich lohnen würde, sich in die
32-Bit-Architektur des PICs einzuarbeiten? Solange ich bei vielleicht
zwei oder maximal drei Systemen bleibe, könnte auch schon ein etwas
größerer ATMega reichen. Da könnten mit viel Glück so zwei bis drei
Systeme reinpassen.
Ich muss zugeben, dass mich die Idee mit dem Z80 schon etwas angeregt
hat, aber der könnte für einige Anwendungen zu schwach sein.
Ich habe mein Konzept jetzt nochmal überarbeitet und habe mir gedacht,
dass man ja eigentlich alles, was man auslagern kann auch auslagern
sollte. Da wäre zum Beispiel die Ein-/Ausgabe und der Sound. So könnte
man ja eigentlich kleinere Megas nehmen und diese zum Beispiel als
Tastaturcontroller oder Grafikchip einsetzen. Zur Kommunikation der
Chips untereinander würde sich ja der I²C-Bus anbieten.
Marcel H. schrieb:> Nach einigem Überlegen und Recherchieren hat sich mir eine Frage an mich> selbst aufgetan, die ich mir auch schon teilweise beantworten konnte:>> Wie wahrscheinlich ist es, dass ich so viele verschiedene Systeme> programmiere, dass es sich wirklich lohnen würde, sich in die> 32-Bit-Architektur des PICs einzuarbeiten? Solange ich bei vielleicht> zwei oder maximal drei Systemen bleibe, könnte auch schon ein etwas> größerer ATMega reichen. Da könnten mit viel Glück so zwei bis drei> Systeme reinpassen.
Wie gesagt: Der AVR ist für Dein Vorhaben ungeeignet, weil Du keinen
Code im RAM ausführen kannst. Die kleineren PIC18/PIC24 können das auch
nicht. Der MIPS-Kern des PIC32 kann das. ARMs können das auch, aber da
wirst Du Dich mit SMD-Technik auseinandersetzen müssen. Z80 kann das
auch, aber da wird die Hardware aufwändiger und damit teurer, weil Du
Dir alles aus Einzelbausteinen zusammenbauen musst, was beim PIC32
gleich mit eingebaut ist. Und der PIC32 ist eine bis zwei Zehnerpotenzen
schneller als AVR oder Z80.
> Ich habe mein Konzept jetzt nochmal überarbeitet und habe mir gedacht,> dass man ja eigentlich alles, was man auslagern kann auch auslagern> sollte. Da wäre zum Beispiel die Ein-/Ausgabe und der Sound. So könnte> man ja eigentlich kleinere Megas nehmen und diese zum Beispiel als> Tastaturcontroller oder Grafikchip einsetzen. Zur Kommunikation der> Chips untereinander würde sich ja der I²C-Bus anbieten.
Trotzdem bleibt die Architektur für Dich ungeeignet. Und berücksichtige,
dass die Kommunikation zwischen den Prozessoren auch ein ganz
erheblicher Aufwand ist - bei der Entwicklung, beim Debuggen (hast Du
mehrere JTAG ICE 3, um Sender und Empfänger gleichzeitig debuggen zu
können? Hast Du einen guten Logicanalyzer für die Protokollanayse auf
dem Bus?), und nicht zuletzt bei der für Kommunikation und
Synchronisation benötigten Rechenleistung.
Die meisten Anfänger wissen nicht, dass Multiprozessorsysteme in der
Informatik schon was für Fortgeschrittene ist. Darüber schreiben andere
Leute dicke Bücher. Siehe z.B.
http://www.amazon.de/s/ref=nb_sb_noss?field-keywords=0123973376
528 Seiten.
fchk
Frank K. schrieb:> bei der Entwicklung, beim Debuggen (hast Du> mehrere JTAG ICE 3, um Sender und Empfänger gleichzeitig debuggen zu> können? Hast Du einen guten Logicanalyzer für die Protokollanayse auf> dem Bus?), und nicht zuletzt bei der für Kommunikation und> Synchronisation benötigten Rechenleistung.
Quatsch doch nicht so einen blödsinn. Ich habe schon komplexe
Funksysteme mit einem ISP programmiert. Nur Luschen brauchen so ein
Equipment. Da fehlt der Pioniergeist.
@TO
Lass Dir mal nicht den Wind aus den Segeln nehmen.
Ne ne ne schrieb:> Quatsch doch nicht so einen blödsinn. Ich habe schon komplexe> Funksysteme mit einem ISP programmiert. Nur Luschen brauchen so ein> Equipment. Da fehlt der Pioniergeist.
Wenn $(zahlender_kunde) wartet, dann ist Pioniergeist das Letzte, was
ich brauche. Zeit isst Geld bei mir, und wenn ein 200€-Tool mir 3
Stunden Debugging erspart, dann hat es sich wirtschaftlich rentiert.
Wer studiert, sollte sich an diese Denkweise gewöhnen.
fchk
@Ne ne ne: Soweit, wie ich mit meinen Gedanken schon bin, nimmt mir
niemand mehr den Wind aus den Segeln :D
Ich habe natürlich auch an die Programmierung der Controller gedacht und
habe mich für ISP entschieden, wobei ich schon überlege, die Controller
später über die RS232-Schnittstelle zu programmieren.
Die Kommunikation der Controller untereinander habe ich auch noch mal
überdacht und habe mir zumindest für die Videoausgabe (über FBAS)
überlegt, dass ich immer ganze Bilder in einen externen RAM-Baustein
schreibe, die dann wiederum von dem Video-Controller eingelesen werden
können und in ein brauchbares Videosignal umgewandelt werden können
(eine Umsetzung dazu fehlt mir noch, aber ich denke, dass ich dazu genug
im Internet finden werde)
Wer jetzt beim Lesen gedacht hat, dass hier so ein vollkommen
Ahnungsloser sitzt und erwartet, dass man ihm sein Projekt fertig
vorsetzt, der hat sich geirrt :D Ich bin zwar auch kein Profi, aber für
solche Anwendungen reicht es dann doch noch
MfG, Marcel H.
Hi
>Wer jetzt beim Lesen gedacht hat, dass hier so ein vollkommen>Ahnungsloser sitzt
Hatte ich bis jetzt eigentlich nicht. Aber du bist sehr überzeugend.
MfG Spess
Marcel H. schrieb:> Hier steht mir allerdings die begrenzte Anzahl von Schreibzyklen> im Weg.
Hallo Marcel.
Ich finde deine Idee eingentlich nicht schlecht, um einmal damit zu
spielen.
Um einmal ein praktisches Gefuehl zu bekommen, wie lange es dauert bis
der Flash hinueber ist, hier mein kleiner Shredder.
(Vielleicht kann man eine einzelne Seite zur Laufzeit beliebig oft
beschreiben, da deren Inhalt im Hintergrund in einem SRAM gehalten wird.
Natuerlich ist nach Poweroff der Inhalt durch den defekten Speicher
korrumpiert - aber solange es nicht alle Seiten betrifft ist dies ggf.
egal...)
Ich habe das "Experiment" auf einen alten ATmega8 laufen. Momentan wird
nur Seite 95 geroestet - obwohl ich nicht davon ausgehe - sollte der
Flash selbst nach dem Test noch groesstenteils verwendbar sein.
Produktive Anmerkungen sind herzlich willkommen.
p.s.: Man kann das SPM Interface dann auch dazu benutzen, spaeter einmal
Programmcode per firmware zur Laufzeit zu aendern.
(Letztere main.c enthaelt mehr Kommentare)
Stephan B. schrieb:> Vielleicht kann man eine einzelne Seite zur Laufzeit beliebig oft> beschreiben, da deren Inhalt im Hintergrund in einem SRAM gehalten wird.
So, man kann sagen das Experiment ist zu Ende. Leider trifft die
zitierte Aussage nicht zu. Der SRAM Speicher, welche den Seiteninhalt
zwischenspeichert scheint nur dem Schreiben zu dienen und wird scheinbar
nicht gelesen.
Nach ziemlich genau 10h Durchlauf mit ca. 256 pagewrites pro 5 Sekunden
(1.843.200 pagewrites total) treten vereinzelt erste Lesefehler auf.
MfG Stephan
kuk mal via smart in deine hdd wie oft die ein spinup hatte und
vergleich das mit der laufzeit deines pcs (es gibt mindestens ein spinup
pro boot-vorgang), du wirst sehen man kommt mit 10k so weit dass es bei
so einem hobby-projekt locker reicht ....
Ja der Aussage von Max D. stimme ich im Prinzip zu.
Vorallem wenn man nicht den gesamten Flash auf einmal aufbraucht, so
kann man ja defekte Seite vermerkten und stattdessen andere benutzen...
Stephan B. schrieb:> Vorallem wenn man nicht den gesamten Flash auf einmal aufbraucht, so> kann man ja defekte Seite vermerkten und stattdessen andere benutzen...
Cool...
Und wo schreibst Du dann Reset- und Interrupt-Vektoren hin?
Träum weiter...
...
Hannes Lux schrieb:> Stephan B. schrieb:>> Vorallem wenn man nicht den gesamten Flash auf einmal aufbraucht, so>> kann man ja defekte Seite vermerkten und stattdessen andere benutzen...>> Cool...>> Und wo schreibst Du dann Reset- und Interrupt-Vektoren hin?>> Träum weiter...>> ...
Man kann die ganzen vektoren in den bl-bereich schieben, dort muss dann
der (vorhandene & gehardcodete) bootloader nach dem Start einfach an
eine (im RAM geladene?) Adresse springen, die paar cycles mehr sollten
kein problem sein (wenn doch dann nimmt man am besten gleich ne nummer
größer)...
Also ich wollte jetzt zwar eigentlich nicht meinen µC systematisch
zerlegen, aber es ist doch gut zu wissen, dass die Speicher doch einiges
aushalten (zumindest ausreichend viel für meine Anwendungen).
Falls Interesse besteht, kann ich ja in einem gesonderten Thread mein
Projekt ein bisschen genauer vorstellen und Interessierte auf dem
Laufenden halten.
MfG
Marcel H.