Hallo Forum,
Bin neu in der Welt der Microcontroller und programmiere momentan auf
den ATiny 2313 / ATM-8515 mc´s.(Assembler)
Ich möchte Programme direkt von meiner MicroSD Karte und / oder meinem
Externen ROM/EEProm-Baustein ausführen und nicht aus dem Internen Flash.
Wie genau geht das vor sich? Ist das mit einem ATiny / ATMega überhaupt
möglich? Gibt es dazu Tutorials?
Lese seit Tagen alle verfügbaren Datenblätter, finde aber nirgends, auch
nicht hier in tutorials oder sonstwo eine Angabe.
Tatsache ist, daß meine alten 8-bit Maschinen (CPC 464 etc.)
selbstverständlich aus externen ROMs / Disketten etc. Programmcode lesen
können, das muß doch auch mit ATMegas möglich sein.
Danke für jede Hilfe
Das ist nicht möglich. Die AVRs können Programme grundsätzlich nur aus
dem internen Flash ausführen.
Man könnte nun eine Art Bootloader schreiben, der das Programm von einer
SD-Karte liest und ins interne Flash schreibt...
Das ist aber nicht gerade einfach, da da verschiedene Hürden genommen
werden müssen: Lesen von Daten von einer SD-Karte, finden der Daten auf
der SD-Karte (Filesystem), umprogrammieren des internen Flash.
Dazu kommt noch, das man das interne Flash nur etwa 1000mal neu
programmieren kann und das die Software zum Lesen der SD-Karte und
umprogrammieren des internen Flash komplett in einen besonderen, nicht
gerade großen Speicherbereich, des AVR-Flash passen muss.
Das ist nichts für Anfänger!
Ich hab sowas auch vor. Ich hab mir zuerst auch gedacht, das geht im PC
(auch in alten), warum dann nicht in nem neuen µC? Doch dann hab ich mir
gedacht, dass im PC ja Prozessor, Ram etc. Seperat ist, im µC ist ja
alles schon zusammen. Dazu kommt, wenn man das per Bootloader machen
will, das die Software für FAT16/32 und SD-Kartenansteuerung im
Vergleich zum Flash im µC relativ groß ist, oder? Das würde bedeutet,
dass man nur noch sehr wenig Platz im Flash hat, wo man ein Programm
reinschreiben könnte. Meine "Lösung" im moment ist, dass ich ein µC in
SOIC oder sogar DIP Bauform nehme und über einen Extra-µC Quasi nur die
Programmwahl mache. D.h. der "Start-PIC" macht die Kartenansteuerung,
Displayansteuerung und Tastenauswertung. Wenn ein Programm geladen wird,
wird überprüft, ob das das als letztes gestartetes Programm ist, und
wenn nicht, wird quasi der PIC gebrannt und gestartet. Ist zwar von
hinten durch die Brust ins Auge, aber sollte eigentlich so gehen.
Achso, kritik an meinem Vorschlag höre ich gerne und der Hintergrund
warum SOIC oder DIP -> Wenn das schreiben fehl schlägt, kann man eine
Fehlermeldung rausgeben und man kann den µC ausbauen, da man ja evtl
irgendwann die 1000 Schreibzyklen durch hat bzw. Speicherstellen im
Flash kaputt gehen können.
Also zum Thema Externes Laden!
Das ist ziemlich enttäuschend, da ein Z80A im Schneider CPC464 das schon
vor 25 Jahren draufhatte. Damit dürfte sich das Thema Microcontroller
denn wohl erledigt haben!
Da werd ich mich nach einem Prozessor umschauen müssen, der sowas kann.
Eigentlich schade, STK500 x 10 Controller für nix gekauft.
naja. Danke für alle Antworten!
Mathias schrieb:> Da werd ich mich nach einem Prozessor umschauen müssen, der sowas kann.
Ganz einfach: Harvard-Architektur: Geht nicht.
Von Neumann-Architektur: Geht.
> Eigentlich schade, STK500 x 10 Controller für nix gekauft.
Machs wie all die andern, die am AVR Programme von SD-Card/Dataflash
ausführen:
Interpreter/VM in den AVR, Basic/P-Code/Forth/... auf die SD-Card.
Hallo
meines Wissens können das einige der C2000 Familie von TI. Dort gibt es
auch welche die haben gar kein Flash sondern nur RAM die müssen den Code
zu Anfang von irgendwo extern laden
Auch so 08/15 MSP430 für wenig Geld können das.
Neulich konnte man da eine komplette "Entwicklungsumgebung", das
"LaunchPad" für ein paar wenige Dollars (4$ ?) kaufen.
Beitrag "MSP430 C-Funktionen vom RAM ausführen?"
Aber ob sich das Lohnt? Schliesslich ist da im Vergleich zum Flash immer
recht wenig Ram drauf.
> Da werd ich mich nach einem Prozessor umschauen müssen, der sowas kann.
Bei Controllern von Renesas ist das kein Problem. Und bei vielen anderen
vermutlich auch nicht.
Gerade diese unterschiedliche Behandlung von Ram und Rom bei den AVRs
ist sehr nervig. Weniger allerdings zum reinladen von Programmen. Das
macht man ja eigentlich nur zum updaten der Firmware also eher selten,
schlimmer finde ich das ganze gehampel wenn man Daten mal im Ram, Eprom
oder Rom liegen hat und man da unterschiedliche Funktionen fuer den
Zugriff braucht.
> Dort gibt es auch welche die haben gar kein Flash sondern nur RAM die> müssen den Code zu Anfang von irgendwo extern laden
Oder SH2A von Renesas. Laedt beim booten das Programm aus einem
seriellen Flash ins Ram und laeuft. Dann ist das programmieren auf dem
Controller genauso wie auf dem PC. Aber sowas hat nicht nur Vorteile.
Zeigerfehler merkt man eher.
Olaf
Schorsch schrieb:> Neulich konnte man da eine komplette "Entwicklungsumgebung", das> "LaunchPad" für ein paar wenige Dollars (4$ ?) kaufen.
Die da verwendeten MSP430-Varianten haben so wenig RAM, daß das
illusorisch ist, nämlich nur 128 bzw. 256 Bytes.
Mit einem "großen" MSP430 wie dem 'F5438 sieht das anders aus, der hat
16 kiB RAM.
Eine Alternative sind ARMe, beginnend mit dem LPC2106 (64 kiB RAM) und
nach oben offen bei Nutzung eines externen Speicherinterfaces ...
Das Grundproblem war eigentlich, daß ich einen Z80 nehmen wollte (der
kann das), mich aber dann für die eher neueren AVR´s entschieden habe.
Prinzipiell geht es da um die Grundidee, ein historisches (CPC464)
Computersystem mit heutiger Technik nachzubauen (Energiesparend, klein,
20x schneller, höhere Auflösung etc.)
Da man außer Bootloader noch ein komplettes Betriebssystem ins ROM
reinquetschen muß, und alle sonstigen Programme von Micro-SD-Card
gelesen werden sollen ist also ein AVR definitiv erledigt.
Mathias schrieb:> ist also ein AVR definitiv erledigt.
Ja, wie auch MCS-51 und vermutlich auch die meisten PICs.
Sieh Dir einfach mal die ARMe mit Cortex-M3-Kern an, da dürftest Du was
ausreichend leistungsfähiges und flexibles finden.
Möchtest Du auf dem System auch die alten Z80-Programme des
Schneider-Systems laufen lassen? Dann müsstest Du Dir auch noch Gedanken
um einen Emulator machen, was --zumindest theoretisch-- auch die AVRs
wieder ins Spiel bringt, denn der emulierte Code wird ja vom Emulator
ausgeführt, und kann daher auch beim AVR stehen wo er will.
In einem anderen Thread beschäftigt sich gerade jemand damit, einen
6502-Emulator auf ARM-Basis zu entwickeln, sein Ziel ist wohl die
Emulation eines VC64.
Ja, für so etwas ist eher ARM das Mittel der Wahl. Die LPC2xxx von NXP
können teilweise externen Speicher benutzen, und natürlich führen sie
Programmcode aus dem RAM aus - auch die Varianten mit internem RAM.
Manche Typen haben nicht einmal Flash, dafür aber vollen Daten- und
Adressbus. Wer TQFP-Gehäuse löten kann, ist natürlich klar im Vorteil,
in DIP gibt es diese Vielbeiner nicht. Ein serieller Bootloader ist
bereits drin. Schnittstellen gibt es massig, vor allem SPI (für die
Speicherkarte) und UARTs. Das gern verwendete Arbeitspferd der Reihe ist
der LPC2378. Bietet auch Ethernet, USB nur Device-Port. Hat aber
immerhin 144 Pins.
Mathias schrieb:> Da man außer Bootloader noch ein komplettes Betriebssystem ins ROM> reinquetschen muß, und alle sonstigen Programme von Micro-SD-Card> gelesen werden sollen ist also ein AVR definitiv erledigt.
Hallo,
das hätte dir doch von Anfang an klar sein müssen: die SD-Card ist ein
Speicher mit seriellem Interface! Kann also keinen Instruction Fetch
bedienen - auch nicht mit einem Original Z80. Zum Lesen eines Bytes
brauchst du ein Unterprogramm.
Der Z80 hat einen Bus aus 16 Adress-, 8 Daten- und mindestens 3
Steuerleitungen - wo wolltest du die denn an die SD-Card mit ihren 8
Pins anschliessen??
Gruss Reinhard
Rufus Τ. Firefly schrieb:> Mathias schrieb:>> ist also ein AVR definitiv erledigt.>> Ja, wie auch MCS-51 und vermutlich auch die meisten PICs.
Wobei es mit dem MCS-51 noch ganz gut geht:
-89C??51/52 mit 4/8k internem Flash mit Bootloader
-Adresslatch (74hc272 o.Ä.)
-64k Ram an P0/R2 ~WR und ~PSEN ,von dem 4/8k
vom internen Flash "verdeckt" werden
damit stehen immer noch 15 I/O-Lines zur Verfügung.
Einziger Nachteil ist (zummindest bei Standarttypen), das SPI in
Software gemacht werden muss.
Sollte mehr I/O benötigt werden, könnte ja ein Teil des Adressraumes
statt mit RAM auch für was Anders dekodiert werden
mfG ingo
Rufus Τ. Firefly schrieb:> Ja, wie auch MCS-51 und vermutlich auch die meisten PICs.
Genau, es gibt bei den PICs Ausnahmen. Ich habe so eine Spielerei schon
mal mit einem 8-Bit-PIC gemacht. Einige Typen (z.B. der PIC18F8722)
haben ein externes Speicherinterface, an das man auch SRAM klemmen kann
(mindestens 128kB sind da möglich).
Ich hatte dann ein "Betriebssystem" in einem externen EEPROM abgelegt,
welches nach jedem Reset von einem Bootloader zunächst in den SRAM
kopiert wurde. Das Betriebssystem enthielt dann auch den ganzen FAT-Code
usw. um Programme von SD-Karte nachzuladen und auszuführen.
Ist bei mir allerdings im "proof-of-concept"-Stadium geblieben, da mir
irgendwie das Anwendungsgebiet für das Konstrukt fehlte...
Colt Fish schrieb:> ... Einige Typen (z.B. der PIC18F8722)> haben ein externes Speicherinterface, an das man auch SRAM klemmen kann
dann kannst du aber auch ein EProm anschliessen und dir den Bootloader
sparen. Ist Geschmackssache, aber ich habe Firmware lieber in einem
wirklich unveränderbaren Speicher.
Gruss Reinhard
@Ingo W. schrieb:
-89C??51/52 mit 4/8k internem Flash mit Bootloader -Adresslatch (74hc272
o.Ä.) -64k Ram an P0/R2 ~WR und ~PSEN ,von dem 4/8k vom internen Flash
"verdeckt" werden
Gibt es für diese Aktion irgentwo ein Tutorial???
Wie gesagt ich bin nicht neu in der Welt der Computer, aber in der Welt
der Microcontroller. Wie genau Funktioniert das mit dem Adresslatch?