Microcontroller über USB Programmieren (ohne Bootloader)

Gast #4497856
Lesenswert?

Hallo!

Wie die Überschrift schon sagt... Kann man einen Atmel uC (mit USB 
Hardware) über USB Programmieren ohne einen Bootloader verwenden zu 
müssen? Ich kenne es von einigen Arduinos (mit und ohne FTDI IC), welche 
über USB und Bootloader programmierbar sind. Mein Problem hier ist aber, 
dass der Bootloader eben viel zu lange auf irgendeine Verbindung wartet 
und dadurch das eigentliche Programm erst stark verzögert startet.
#4497894
Lesenswert?

Jupp Strupp schrieb:
> nein, da habt ihr (oder du) mich falsch verstanden... ich möchte
> NUR
> über den USB direkt am uC programmieren.

wenn du es nicht verstehst

Der Bootloader muss ja warten ob er gemeint ist!
Wenn dir die Wartezeit nicht genehm ist muss der Bootloader gehen!
Wenn der Bootloader gegangen wurde muss anders programmiert werden!
Das Leben ist nun mal kein Wunschkonzert und wenn die Hardware und das 
Konzept steht, eingebrannt und in PCB gemeisselt dann ist das Konzept 
nicht umzustellen!

Wenn ich Gemüse kaufe kann ich mir in der Pfanne daraus kein Steak 
machen nur weil ich das lieber esse.
#4497901
Lesenswert?

Jupp Strupp schrieb:
> ich habe das genau so verstanden, doch manchmal gibt es wundersame
> möglichkeiten, die einem gar nicht bekannt waren. deswegen habe ich
> lieber noch mal nachgefragt.

Wie hast du dir den Prozess denn vorgestellt? Wann und wie soll der BL 
aktiv werden und ein Programm akzeptieren?
Es muss auch nicht unbedingt ein "Bootloader" im engen Sinne sein. Also 
der am Anfang erst mal startet. Ich habe eine Anwendung auf vielen 
Controllern, die springen auf Befehl mitten im Programm (auf Befehl von 
aussen) zu einem Programmstück am Ende des Flashs und können dann so den 
restlichen Flash neu programmieren (die Daten kommen auch via UART).

Du bist da doch völlig frei und musst auch keinen BL von der Stange 
nehmen und am Anfang starten muss der auch nicht. Allerdings, sollte 
dein Programm mal zerschossen werden, dann wars das halt, weil in den BL 
kommst du dann nicht mehr.
#4497903
Lesenswert?

Jupp Strupp schrieb:
> Kann man einen Atmel uC (mit USB
> Hardware) über USB Programmieren ohne einen Bootloader verwenden zu
> müssen?

Jain. Ich spare es mir, hier ins Detail zu gehen, weil das überhaupt 
nicht dein Problem ist.

> Ich kenne es von einigen Arduinos (mit und ohne FTDI IC), welche
> über USB und Bootloader programmierbar sind. Mein Problem hier ist aber,
> dass der Bootloader eben viel zu lange auf irgendeine Verbindung wartet
> und dadurch das eigentliche Programm erst stark verzögert startet.

Es ist kein Naturgesetz, daß ein Bootloader darauf warten muß ob der 
Nutzer einen Upload startet oder nicht. Der Bootloader kann genauso gut 
testen, ob der Nutzer einen Jumper gesteckt hat. Oder ob eine Taste beim 
Reset festgehalten wird. So ein Test dauert nur Mikrosekunden und ist 
dann sicher nicht zu lang.
Gast #4497913
Lesenswert?

ok, also doch. ich habe bis dato nie einen bootloader benötigt und kenne 
lediglich die arduino dinger, welche ich aber immer rausgeschmissen 
habe. was ich wirklich nicht wusste ist, dass ein BOOTloader auch zu 
einem willkürlichen zeitpunkt gestartet werden kann? verstehe ich das so 
richtig?
#4497918
Lesenswert?

Jupp Strupp schrieb:
> ok, also doch. ich habe bis dato nie einen bootloader benötigt und kenne
> lediglich die arduino dinger, welche ich aber immer rausgeschmissen
> habe. was ich wirklich nicht wusste ist, dass ein BOOTloader auch zu
> einem willkürlichen zeitpunkt gestartet werden kann? verstehe ich das so
> richtig?

Ja, was denkst du was ein Bootloader ist? Es auch nur ein Programm 
welches auf deinem Controller läuft. Manche Controller haben zwar fest 
eingebaute Bootloader (Rom-Loader) aber auch die muss man nicht nutzen.

Nur leider war deine Frage:
> über USB Programmieren ohne einen Bootloader verwenden

Und das geht halt nicht. Eindeutig falsch gefragt.
Gast #4497929
Lesenswert?

ok, jetzt würde ich meine frage auch etwas anders formulieren. ich bin 
davon ausgegangen, dass der bootloader ausnahmslos als erstes gestartet 
werden muss (und das möchte ich nicht). entschuldigung für die 
verwirrung. vielen dank für die infos soweit! :)
#4497959
Lesenswert?

Jupp Strupp schrieb:
> ich bin
> davon ausgegangen, dass der bootloader ausnahmslos als erstes gestartet
> werden muss (und das möchte ich nicht).

Was Du nicht möchtest ist die lange Wartezeit. Daher zur Erinnerung:

Axel S. schrieb:
> Es ist kein Naturgesetz, daß ein Bootloader darauf warten muß ob der
> Nutzer einen Upload startet oder nicht. Der Bootloader kann genauso gut
> testen, ob der Nutzer einen Jumper gesteckt hat.

Daher wäre das "ausnahmslos" auch kein Problem, und Du könntest die 
besondere Hardware-Unterstützung des Bootloaders benutzen: separater, 
geschützter Code-Bereich.

Gruß Dietrich
#4497971
Lesenswert?

<edit> Da war ich zu LAAAAANNNGGSAM;-)


Jupp Strupp schrieb:
> ich bin
> davon ausgegangen, dass der bootloader ausnahmslos als erstes gestartet
> werden muss (und das möchte ich nicht)

Meistens ist das schon so. ABER der Bootloader kann doch gleich als 
erstes checken, ob er gebraucht wird -> siehe Axels Post ...

Axel S. schrieb:
> Es ist kein Naturgesetz, daß ein Bootloader darauf warten muß ob der
> Nutzer einen Upload startet oder nicht. Der Bootloader kann genauso gut
> testen, ob der Nutzer einen Jumper gesteckt hat. Oder ob eine Taste beim
> Reset festgehalten wird. So ein Test dauert nur Mikrosekunden und ist
> dann sicher nicht zu lang.

Dann wird er eben praktisch sofort wieder beendet wenn der Taster oder 
Jumper ... und das User-Programm (Application) wird gestartet. Wenn das 
in der Application vorgesehen wird, kann der Bootloader auch von dort 
wieder aufgerufen werden, ohne einen Hardware-Reset.
#4497995
Lesenswert?

Jupp Strupp schrieb:
> welche über USB und Bootloader programmierbar sind

Das sind eigendlich alle AVR mit USB-Hardware ab Werk. Sieh Dir mal FLIP 
an.
Allerdings ist das auch ein Bootloader.

Rufus Τ. F. schrieb:
> aß Atmel keinen Weg
> vorgesehen hat, einen "frischen" Controller über USB zu programmieren.

Doch, haben sie. Der Flip-Bootloader ist zumindest bei den -U-Typen an 
Werk drauf.
#4498047
Lesenswert?

Jupp Strupp schrieb:
> ok, jetzt würde ich meine frage auch etwas anders formulieren. ich bin
> davon ausgegangen, dass der bootloader ausnahmslos als erstes gestartet
> werden muss (und das möchte ich nicht).

Stimmt doch gar nicht. Du möchtest keine Wartezeit. Der Bootloader kann 
deswegen trotzdem als erstes starten. Normalerweise will man das auch 
genau so. Und zwar aus zwei Gründen:

1. der Bootloader funktioniert auch dann noch, wenn der Anwendungscode 
kaputt ist. Z.B. nach einem fehlgeschlagenen Update.

2. Bootloader-Unterstützung im µC will man (wenn vorhanden) einschalten, 
denn dann ist der Bootloader vor dem Überschreiben geschützt. Allerdings 
wird dann der Bootloader i.d.R. auch automatisch gestartet.

Der Freiheitsgrad besteht darin, was für einen Bootloader du verwendest. 
Du mußt weder den vom Hersteller schon reinprogrammierten verwenden noch 
den Arduino-Bootloader. Es gibt für die AVR gefühlt 1000 verschiedene 
Bootloader mit ganz verschiedenen Features.
#4498068
Lesenswert?

Lass den Bootloader prüfen ob eine Taste gedrückt ist. Wenn sie nicht 
gedrückt ist dann soll er ohne Umwege sofort in die Anwendung springen. 
Wenn sie gedrückt ist dann dreht erstmal der Bootloader seine übliche 
Runde bevors in die Anwendung geht. Brauchst nur nen freien Pin für die 
Taste. Pragmatisch, simpel und effektiv.

Pro-Tip: Warte ein paar dutzend NOPs nach dem Einschalten des Pullup für 
die Taste bevor Du sie abfragst, sonst kommt immer low raus.
Gast #4498221
Lesenswert?

Die Pinabfrage dauert mit externem Pull-Up ca. zwei Takte und mit 
internem Pullup ca. 5 Takte. Wir reden hier von Mikrosekunden.

Die Startup-Zeit wird eher von ganz anderen Faktoren dominiert, zum 
Beispiel die Einschwingzeit des Quarz-Oszillators.
Gast #4498239
Lesenswert?

Jupp Strupp schrieb:
> Wie die Überschrift schon sagt...

nee, sagt sie nicht.

Du hast einfach nen verkehrten µC für solch einen Fall. Besorge dir nen 
LPC von NXP - und zwar so einen, der nen USB-Bootlader intus hat. Wenn 
ich mich recht erinnere, dann war das sowas wie die LPC1343 und 
Konsorten. Wenn man an ein bestimmtes Pin beim Reset low anlegt und den 
µC am USB hat, dann sieht er vom PC wie ein USB-Stick aus, wo man seine 
Firmware nur draufkopieren muß.

Einfach und kommt ohne jeglichen Zusatzaufwand aus. Da würde ich an 
deiner Stelle einfach den µC wechseln und fertig ist die Laube.

W.S.
#4498242
Lesenswert?

Jupp Strupp schrieb:
> Hallo!
>
> Wie die Überschrift schon sagt... Kann man einen Atmel uC (mit USB
> Hardware) über USB Programmieren ohne einen Bootloader verwenden zu
> müssen? Ich kenne es von einigen Arduinos (mit und ohne FTDI IC), welche
> über USB und Bootloader programmierbar sind. Mein Problem hier ist aber,
> dass der Bootloader eben viel zu lange auf irgendeine Verbindung wartet
> und dadurch das eigentliche Programm erst stark verzögert startet.

Beim Arduino gibts welche, die einen Mega16U2 als USB-Seriell-Wandler 
haben. Dieser 16U2 kann genauso gut zusätzlich ISP-Programmer spielen. 
Damit hast Du das beste aus beiden Welten: keinerlei zusätzliche 
Software auf dem Haupt-AVR, und Programmieren ist jederzeit und unter 
allen Umständen möglich.

fchk

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren