Forum: Mikrocontroller und Digitale Elektronik Programm von MicroSD / Externem Rom ausführen


von Mathias (Gast)


Lesenswert?

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

von SF (Gast)


Lesenswert?

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!

von ich (Gast)


Lesenswert?

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.

von ich (Gast)


Lesenswert?

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.

von Mathias (Gast)


Lesenswert?

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!

von Schorsch (Gast)


Lesenswert?

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.

von Tobias K. (kurzschluss81)


Lesenswert?

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

von Ben _. (burning_silicon)


Lesenswert?

hmm ich glaub ich hab sowas hier in der bastelkiste...

MX10FMAXDPC auf einem digital audio decoder board.

von Schorsch (Gast)


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

> 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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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 ...

von Mathias (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Sebastian (Gast)


Lesenswert?

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.

von Reinhard Kern (Gast)


Lesenswert?

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

von Ingo W. (Gast)


Lesenswert?

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

von Colt F. (Firma: TUC) (coltfish)


Lesenswert?

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...

von Reinhard Kern (Gast)


Lesenswert?

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

von Mathias (Gast)


Lesenswert?

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

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.