Forum: Mikrocontroller und Digitale Elektronik Von SD-Karte booten?


von Leonard H. (Gast)


Lesenswert?

Hi erstmal,

ich würde gere eine Art Mini-PC mit einem AVR (ATMega 328 o.ä.) 
realisieren. Mich würde es interessieren ob ich einen Bootloader 
schreiben kann der das .hex file von der SD in den Flash oder den EEPROM 
laden kann, und anschließend ausführen?
Daten und Bilder sollen außerdem auf der SD-Karte gespeichert werden, 
und dann aber erst von Programm aufgerufen und verarbeitet werden.
Ich habe schon mal gegooglet und diese Seiten gefunden:
http://dangerousprototypes.com/2012/04/03/2boots/
http://www.avrfreaks.net/forum/sd-card-boot-loader-avr

Meint ihr das funktioniert???

Danke schon mal im vorraus.

von W.S. (Gast)


Lesenswert?

Wenn du es richtig machst, dann funktioniert das auch.

Aber:

Einen ATmega würde ich für sowas nicht benutzen. Der wäre mir zu klein.
Dann lieber einen Cortex, aber einen mit externem RAM dran. Obendrein 
müßtest du dir Gedanken machen über ein API, damit du nicht alle nötigen 
Treiber zweimal im System drin hast (einmal im Lader und einmal in 
deiner App). Bei ARM und Cortex geht sowas relativ elegant per SVC.

W.S.

von 6A66 (Gast)


Lesenswert?

X. H. schrieb:
> Meint ihr das funktioniert???

Klar kann das funktionieren.

Musst Du:
Bootloader bauen/schreiben/portieren
Bootloader muss flashen können
Bootloader muss in der Lage sein Dateien von SD-Karte zu lesen im SRAM 
ziwschenspeichern und dann Pageweise in Flash übertragen und dann 
anspringen.

Oder Du spendierst dem Systam ausreichend RAM so dass der Code auch aus 
dem SRAM ausgeführt werden kann.

Nicht trivial - und für was?
Bei einer Applikation war Field-Update nötig - für was brauchst Du das?

rgds

von Falk B. (falk)


Lesenswert?

@ X. H. (leonard)

>ich würde gere eine Art Mini-PC mit einem AVR (ATMega 328 o.ä.)
>realisieren.

Gibt es schon, nennt sich Raspberry Pi & Co.

> Mich würde es interessieren ob ich einen Bootloader
>schreiben kann der das .hex file von der SD in den Flash oder den EEPROM
>laden kann, und anschließend ausführen?

Sinnlos. Damit wird bei jedem Booten der Flash neu programmiert.

>Meint ihr das funktioniert???

Ja, ist aber wenig sinnvoll. Ein Board mit RAM als Programmspeicher ist 
hier deutlich sinnvoller.

von Guest (Gast)


Lesenswert?

Falk Brunner schrieb:
> Sinnlos. Damit wird bei jedem Booten der Flash neu programmiert.

Warum? Man kann ja beim Flashen eine Versionsnummer ablegen. Beim Start 
diese Versionsnummer mir der auf der SD vergleichen. Sind diese 
identisch, kann sofort ohne flashen das Programm gestartet werden.

von Noch einer (Gast)


Lesenswert?

"In einem unendlich großen Universum kann man nichts neues erfinden, 
weil schon alles irgendwo erfunden wurde."

http://www.mikrocontroller.net/articles/AVR_CP/M

von Leonard H. (Gast)


Lesenswert?

W.S. schrieb:
> Wenn du es richtig machst, dann funktioniert das auch.
>
> Aber:
>
> Einen ATmega würde ich für sowas nicht benutzen. Der wäre mir zu klein.
> Dann lieber einen Cortex, aber einen mit externem RAM dran. Obendrein
> müßtest du dir Gedanken machen über ein API, damit du nicht alle nötigen
> Treiber zweimal im System drin hast (einmal im Lader und einmal in
> deiner App). Bei ARM und Cortex geht sowas relativ elegant per SVC.
>
> W.S.

Funktioniert das mit dem externen RAM wircklich? Und kann man auch den 
Flash erweitern, um größere Programme zu laden? Oder kann man das 
Programm sogar direckt von der SD-Karte aus führen?

LH

von Leonard H. (Gast)


Lesenswert?

> Einen ATmega würde ich für sowas nicht benutzen. Der wäre mir zu klein.
> Dann lieber einen Cortex, aber einen mit externem RAM dran. Obendrein
> müßtest du dir Gedanken machen über ein API, damit du nicht alle nötigen
> Treiber zweimal im System drin hast (einmal im Lader und einmal in
> deiner App). Bei ARM und Cortex geht sowas relativ elegant per SVC.

Ist es schwerer einen ARM Cortex zu programmieren als einen AVR?
Und mit welchem tool bzw. Sprache lassen die sich programmieren?

LH

von Noch einer (Gast)


Lesenswert?

> Funktioniert das mit dem externen RAM wircklich?

Nicht so ganz wirklich. Beim Cortex M hat Programm im extrenen RAM nur 
1/3 der Geschwindigkeit. Und AVR_CP/M hat ja Daten für den Z80 Emulator 
im RAM.

> Oder kann man das
> Programm sogar direckt von der SD-Karte aus führen?

Von SD-Karte kannst du nur komplette 512 Byte Blöcke lesen. Recht 
unpraktisch, wenn des erste Byte ein Sprungbefehl ist, und du trotzdem 
die nutzlosen 511 Bytes einlesen musst.

von Leonard H. (Gast)


Lesenswert?

Danke,
aber noch mal zu den ARM Cortex, sind die viel schwerer als die AVR zu 
programmieren und mit welcher Sprache?
LH

von TriHexagon (Gast)


Lesenswert?

X. H. schrieb:
> Danke,
> aber noch mal zu den ARM Cortex, sind die viel schwerer als die AVR zu
> programmieren und mit welcher Sprache?
> LH

Nein schwer sind sie nicht. Die ARM CPU ist recht übersichtlich und bei 
einem größeren ARM Cortex M4 gibts dann auch noch eine MPU, einen 
SDRAM-Controller und einen Display-Controller dazu, womit man sich einen 
richtig schönen Rechner bauen kann. Allerdings ist die Peripherie 
(Herstellerspezifisch) manchmal nicht ganz ohne, einfach weil die viel 
kann. Kann einen Anfänger erstmal überrumpeln, aber irgendwann findet 
man sich auch da zurecht.

von Leonard H. (Gast)


Lesenswert?

cool!
Und mit welcher Sprache?
LH

von TriHexagon (Gast)


Lesenswert?

Jede für die du einen Compiler findest und zu Maschinencode kompiliert. 
Also C, C++, Pascal...

von TriHexagon (Gast)


Lesenswert?

Noch ein kleiner Tipp: wenn du dir einen ARM Cortex Rechner bauen 
willst, kannst du mit dem 32F429IDISCOVERY Board anfangen.

Hat 8MB SDRAM, ein Display, einen Programmer/Debugger schon onboard und 
kostet nicht viel. Dann bringst du eine SD-Karte und einen PS2 Port an 
(USB Tastatur wäre auch möglich, USB ist aber nicht ganz trivial) und 
schon hast du Hardwaretechnisch alles was du brauchst.

von Noch einer (Gast)


Lesenswert?

> Jede für die du einen Compiler findest
... und jemanden, der dir bei Problemen weiter helfen kann.

Da kannst du beides nehmen C und C++.

von Falk B. (falk)


Lesenswert?

Wer Ironie findet, darf sie behalten . . .

von Gästchen (Gast)


Lesenswert?

TriHexagon schrieb:
> Noch ein kleiner Tipp: wenn du dir einen ARM Cortex Rechner bauen
> willst, kannst du mit dem 32F429IDISCOVERY Board anfangen.
>
> Hat 8MB SDRAM, ein Display, einen Programmer/Debugger schon onboard und
> kostet nicht viel. Dann bringst du eine SD-Karte und einen PS2 Port an
> (USB Tastatur wäre auch möglich, USB ist aber nicht ganz trivial) und
> schon hast du Hardwaretechnisch alles was du brauchst.

Das ist ETWAS schwachbrüstig unterwegs für solche Sachen :-(
Na gut, für CP/M reichts. Aber nicht für einen Computer.

Bitte bendenken, dass die Cortex M4 nur die größten unter den 
allerkleinsten sind Spielzeug. Die M4 sind weder "schnell" noch haben 
sie viele Features - aus der Warte eines "richtigen" Prozessors 
betrachtet. Selbst ein 10 Jahre alter Athlon lässt den M4 sehr, sehr alt 
aussehen. Vermutlich sogar ein AMD K6II von 1998...

Für sowas nimmt man am Besten mindestends einen ATMEL ARM9 oder was in 
der Kategorie. Da dran kommen z.B. 128MB RAM, ein USB Hub und ein DVI 
Anschluss.

Das wäre dan ein echter mini-Computer, schwächer als ein Raspberry PI. 
Aber immerhin kann man da ein echtes Betriebssystem drauf tun (Linux) 
und echte Anwendungen drauf laufen lassen. Wie einen Browser und eine 
gescheite GUI.

von TriHexagon (Gast)


Lesenswert?

Gästchen schrieb:
> TriHexagon schrieb:
>> Noch ein kleiner Tipp: wenn du dir einen ARM Cortex Rechner bauen
>> willst, kannst du mit dem 32F429IDISCOVERY Board anfangen.
>>
>> Hat 8MB SDRAM, ein Display, einen Programmer/Debugger schon onboard und
>> kostet nicht viel. Dann bringst du eine SD-Karte und einen PS2 Port an
>> (USB Tastatur wäre auch möglich, USB ist aber nicht ganz trivial) und
>> schon hast du Hardwaretechnisch alles was du brauchst.
>
> Das ist ETWAS schwachbrüstig unterwegs für solche Sachen :-(
> Na gut, für CP/M reichts. Aber nicht für einen Computer.

Der soll ja auch nicht mit einem x86 konkurrieren. Ein ARM Cortex M4 mit 
180 MHz hat schon ordentlich Power und schlägt so manchen Intel 
Prozessor aus den 80er. Für eine Spielerei völlig ausreichend.

Gästchen schrieb:
> Für sowas nimmt man am Besten mindestends einen ATMEL ARM9 oder was in
> der Kategorie. Da dran kommen z.B. 128MB RAM, ein USB Hub und ein DVI
> Anschluss.

Die sind aber sehr viel schwerer zu handhaben und mit Eigenbau (mind. 4 
Layer, BGA, sehr hohe Frequenzen) ist da nix mehr als Bastler. Dafür 
Treiber zu schreiben ist außerdem schon eine ganz andere Hausnummer.

von WehOhWeh (Gast)


Lesenswert?

TriHexagon schrieb:
> Gästchen schrieb:
>> TriHexagon schrieb:
> Der soll ja auch nicht mit einem x86 konkurrieren. Ein ARM Cortex M4 mit
> 180 MHz hat schon ordentlich Power und schlägt so manchen Intel
> Prozessor aus den 80er. Für eine Spielerei völlig ausreichend.

Aber nicht für Linux. Da harperts schon an der Peripherie. Und ohne 
Betriebssystem keine Software.
CP/M wäre vielleicht eher was.

> Die sind aber sehr viel schwerer zu handhaben und mit Eigenbau (mind. 4
> Layer, BGA, sehr hohe Frequenzen) ist da nix mehr als Bastler. Dafür
> Treiber zu schreiben ist außerdem schon eine ganz andere Hausnummer.

Triber schreibst man da nicht mehr, die sind fertig. Man bekommt ohnehin 
keine Dokumentation dazu.

Es gibt einige ARM9 im LQFP, wie auch passende SDRAM. Wenn auch selten 
und nicht die schnellsten. Und ein 6-Layer muss es nicht sein.

Wir haben in der Arbeit mehrere 4-Layer mit ARM9+Linux drauf, daher weiß 
ich dass es geht, inklusive EMV.

Wo der Nutzwert für Zuhause wäre, ist natürlich fraglich - außer der 
Bastlerstolz. In der Arbeit ist es der Preis, ein EMV-gerechtes Linux 
Board mit z.B. -40 - +85° im nötigen Formfaktor bekommt man einfach 
nicht ;-)

von Dr. Sommer (Gast)


Lesenswert?

WehOhWeh schrieb:
> Aber nicht für Linux. Da harperts schon an der Peripherie. Und ohne
> Betriebssystem keine Software.
> CP/M wäre vielleicht eher was.
Dafür gibts Cortex-R und Cortex-A.

WehOhWeh schrieb:
> Es gibt einige ARM9 im LQFP, wie auch passende SDRAM. Wenn auch selten
> und nicht die schnellsten. Und ein 6-Layer muss es nicht sein.
Warum muss es denn die veraltete ARM9 Architektur sein, wenn man auch 
den Nachfolger Cortex-A nehmen kann, der zB in jedem modernen Smartphone 
zu finden ist?

Der Cortex-M hat zwar weniger Leistung, aber andere Vorteile, wie Preis, 
Stromverbrauch, Echtzeitfähgikeit...

von TriHexagon (Gast)


Lesenswert?

WehOhWeh schrieb:
> Aber nicht für Linux. Da harperts schon an der Peripherie. Und ohne
> Betriebssystem keine Software.
> CP/M wäre vielleicht eher was.

So wie ich das verstanden habe, will er denn Rechner inkl. Software 
selbst bauen. Das wäre mit einem großen ARM schwieriger.

X. H. schrieb:
> Hi erstmal,
>
> ich würde gere eine Art Mini-PC mit einem AVR (ATMega 328 o.ä.)
> realisieren. Mich würde es interessieren ob ich einen Bootloader
> schreiben kann der das .hex file von der SD in den Flash oder den EEPROM
> laden kann, und anschließend ausführen?

von Toni N. (ich3)


Lesenswert?

Hallo,
schon mal was von virtuellen Maschinen gehört. In der Elektor von Sommer 
2014 wurde so eine Virtuelle Maschine gezeigt und vorgestellt. Da kannst 
du einfach ein EEPROM rein stecken und davon (nachdem das System selber 
gestartet ist) booten.

LG

von leonard (Gast)


Lesenswert?

Giebt es eigentlich einen ARM den man über die SPI-Schnittstelle 
programmieren kann?
Und wenn ja wird ein ARM ähnlich wie ein AVR programmiert, ich meine von 
den Ports her und so?
LH

von Outi O. (outlaw)


Lesenswert?

Ne Art "Mini PC"mit ARM, der von SD Karte bootet, Linux benutzt und 
steuern kann:

Raspberry Pi2

Der kostet blanko ohne Zubehör keine 38 Euro und hat ne Quadcore ARM CPU 
und genug Dampf, um auch mal etwas Aufwändigeres zu betreiben.

Guckst Du raspberrypi.org und Google.

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.