Moin zusammen, ich habe da eine Frage zum Thema Bootloader. Ich habe da natürlich schon was dazu gelesen, aber es ist noch ein wenig unklar, was das genau sein soll. Wenn ich z.B. den Arduino Bootloader anschaue. Ist das der Grund warum man einen AVR Arduinomäßig programmieren kann, nachdem man es auf den Controller geflasht hat? MfG
Eiscreme schrieb: > Ist das der Grund warum > man einen AVR Arduinomäßig programmieren kann, Nein und ja. Kommt darauf an, was du in diesem Falle unter "programmieren" verstehst: Quellcode oder Flashen. Der Bootloader ist der Grund, warum du den AVR Arduinomäßig flashen kannst. Also über die serielle Schnittstelle (USB) statt per ISP.
Matthias S. schrieb: > Der Bootloader ist der Grund, warum du den AVR Arduinomäßig flashen > kannst. Also über die serielle Schnittstelle (USB) statt per ISP. Vielen Dank. Das heißt also, damit kann nur der Controller über USB geflasht werden. Ich dachte zunächst, das wäre auch der Grund, wieso man Funktionen wie "digitalWrite()" benutzen kann. Haben STM32 Controller auch einen Bootloader, um sie mit USB programmieren zu können bzw. kann man diesen Bootloader herunterladen und auf "nackte" STM32 Controller flashen?
Eiscreme schrieb: > Das heißt also, damit kann nur der Controller über USB > geflasht werden. Er wird genau genommen über UART geflasht. Du verwendest dafür an der USB-Schnittstelle Deines PCs einen USB-UART-Converter. > Haben STM32 Controller auch einen Bootloader, Ja, sogar mehrere, u.a. für UART. Und die sind fest "eingebaut", müssen also nicht erst vorher ins Flash des µCs übertragen werden. > um sie mit USB programmieren zu können Geht ebenso unter anderem über einen USB-UART-Converter. > bzw. kann man diesen Bootloader herunterladen > und auf "nackte" STM32 Controller flashen? Wie gesagt: Diese sind bei STM32 bereits fest eingebaut. Aber man kann auch eigene Bootloader nutzen - wenn es unbedingt sein soll.
:
Bearbeitet durch Moderator
Eiscreme schrieb: > Haben STM32 Controller auch einen Bootloader, um sie mit USB > programmieren zu können bzw. kann man diesen Bootloader herunterladen > und auf "nackte" STM32 Controller flashen? Letzteres (zumindest die mir bekannten STM32). Die STM32 haben einen Boot-Loader (nicht löschbar in einem nur dem hersteller zugänglichen Extrabereich des Flash-Speichers programmiert), der allerdings nur eine Art serieller Schnittstelle implementiert. Wenn Du darüber einen eigenen Bootloader ablegst, dann kannst Du den natürlich so schreiben, dass er jede Schnittstelle des Bausteins bedient, u.a. auch USB. Nach außen hin kannst Du den STM32 dann per USB flashen (mit etwas weniger Speicher, da der Bootloader ja Platz benötigt).
:
Bearbeitet durch Moderator
Frank M. schrieb: > Er wird genau genommen über UART geflasht. Du verwendest an der > USB-Schnittstelle einen USB-UART-Converter. Wenn der Controller über USB verfügt, dann entfällt der USB-UART Wandler oder? Dann kann ich die USB-Buchse direkt an die passenden Anschlüsse des Mikrocontrollers anschließen(DP+,DP-,VBUS und GND)?
Eiscreme schrieb: > Wenn der Controller über USB verfügt, dann entfällt der USB-UART Wandler > oder? Meines Wissens nach kann der Arduino-Bootloader, von dem Du oben schreibst, nur UARTs bedienen, kein USB direkt. Von daher ist Deine Annahme falsch. Für STM32 gibt es auch USB-Bootloader (google), jedoch haben die erstmal gar nichts mit Arduino zu tun. Bitte konkretisiere Deine Fragen. Es hat keinen Sinn, Arduino und Bootloader generell in einen Topf zu werfen. Arduino verwendet einen speziellen Bootloader, z.B. bei AVRs. Der hat erstmal mit eingebauten Bootloadern von STM32 oder auch speziell programmierten (wie z.B. USB-Bootloader) nichts zu tun.
:
Bearbeitet durch Moderator
Eiscreme schrieb: > Ich dachte zunächst, das wäre auch der Grund, wieso man > Funktionen wie "digitalWrite()" benutzen kann. Nein, der Quellcode wird ja vor dem übertragen kompiliert. Hast du dir mal angeguckt, wie man eine Methode schreibt und/oder eine Library erstellt? Die Arduino-Funktionen sind da eigentlich nix anderes.
Beitrag #5907802 wurde von einem Moderator gelöscht.
Frank M. schrieb: > Meines Wissens nach kann der Arduino-Bootloader, von dem Du oben > schreibst, nur UARTs bedienen, kein USB direkt. Von daher ist Deine > Annahme falsch. > > Für STM32 gibt es auch USB-Bootloader (google), jedoch haben die erstmal > gar nichts mit Arduino zu tun. > > Bitte konkretisiere Deine Fragen. Es hat keinen Sinn, Arduino und > Bootloader generell in einen Topf zu werfen. Arduino verwendet einen > speziellen Bootloader, z.B. bei AVRs. Der hat erstmal mit eingebauten > Bootloadern von STM32 oder auch speziell programmierten (wie z.B. > USB-Bootloader) nichts zu tun. Das mit dem Arduino habe ich nur erwähnt, weil ich sehen wollte, ob ich es verstanden habe. Mein Problem liegt eher bei den STM32 Controllern. Ich wollte in das Thema einsteigen und möchte die Teile über USB programmieren und keinen ST Link verwenden. Ich habe gesehen, dass manche Controller bereits über USB verfügen. Nun habe ich auch gesehen, dass der BOOT0 Pin der Controller auf HIGH gelegt werden muss.
Eiscreme schrieb: > Das mit dem Arduino habe ich nur erwähnt, weil ich sehen wollte, ob ich > es verstanden habe. Mein Problem liegt eher bei den STM32 Controllern. > Ich wollte in das Thema einsteigen und möchte die Teile über USB > programmieren und keinen ST Link verwenden. Das geht, aber Du musst wie gesagt zumindest einmal einen USB-Bootloader über die anfänglich vorhandenen Schnittstellen (USART, DFU, I2C, CAN, SPI wo vorhanden, siehe ST-AppNote AN4488 ab Seite 25) aufspielen. > Ich habe gesehen, dass > manche Controller bereits über USB verfügen. Nun habe ich auch gesehen, > dass der BOOT0 Pin der Controller auf HIGH gelegt werden muss. Ja, das zeigt dem STM32, dass er dann nicht mehr den "internen ST-Bootloader" sondern Deinen verwenden soll. Wir machen das hier bei den kleinen BluePills so: USB-Bootloader per ST-Link aufspielen, Jumper umstecken, fertig.
Eiscreme schrieb: > ich habe da eine Frage zum Thema Bootloader. Ich habe da natürlich schon > was dazu gelesen, aber es ist noch ein wenig unklar, was das genau sein > soll. Mal ganz generell: Unter Bootlader versteht man heutzutage und in µC-Kreisen ein Stück Programm, das dazu gedacht ist, über eine vorhandene (und von außen möglichst einfach zu benutzende) Schnittstelle eine Firmware in den controllerinternen Flashrom zu bringen. Solche Bootlader sind in den LPC.. von NXP und den STM32.. von ST fest eingebaut. Eigentlich alle können über den UART benutzt werden, aber es gibt je nach konkretem Chip auch welche, die man über USB direkt oder über SPI oder CAN oder I2C erreichen kann. Bei all diesen Chips benötigt man eben kein spezielles Programmiergeschirre wie z.B. JTAG/SWD-Adapter und deren zugehörige Brennsoftware. Aber allgemein versteht man unter einem Bootlader etwas anderes, nämlich ein Ladeprogramm, das von der Hardware (bzw. BIOS) eines Rechners zunächst geladen wird und das dann seinerseits das eigentliche Betriebssystem lädt. Daher der Name _BOOT_lader. Siehe den Ladevorgang beim Raspberry. W.S.
Frank M. schrieb: > Meines Wissens nach kann der Arduino-Bootloader, von dem Du oben > schreibst, nur UARTs bedienen, kein USB direkt. Von daher ist Deine > Annahme falsch. Vielleicht muss man da etwas differenzieren.... "Oben" wurde von einigen µC gesprochen. Die Arduinos mit 32U4 haben einen USB Bootloader(spricht das STK50X Protokoll über eine virtuelle Serielle). Und auch der HW Bootloader der 32U4 kann USB. Dieser HW Bootloader ist auf Arduinos dauerhaft deaktiviert (spricht das flip Protokoll). Der Arduino mit 32U4 hat also keinen UART Bootloader. Die anderen, AVR Arduinos, ohne native USB Schnittstelle, haben allerdings alle einen UART Bootloader drauf. Der DUE kann wiederum beides. Seriell und USB. Aber der spielt als ARM sowieso in einer anderen Liga.
Eiscreme schrieb: > > Das mit dem Arduino habe ich nur erwähnt, weil ich sehen wollte, ob ich > es verstanden habe. Mein Problem liegt eher bei den STM32 Controllern. Schön, daß du das jetzt auch mal sagst. > Ich wollte in das Thema einsteigen und möchte die Teile über USB > programmieren und keinen ST Link verwenden. Ich habe gesehen, dass > manche Controller bereits über USB verfügen. Ja. Und manche verfügen nicht nur über USB, sondern haben auch einen Bootloader im ROM, der USB-Uploads (konkret: DFU) unterstützt. Achtung: diese Teilmengen sind nicht identisch. Es gibt also STM32, die zwar USB haben, aber keinen dafür tauglichen Bootloader ab Werk mitbringen. Für diese gilt dann: Chris D. schrieb: > Du musst wie gesagt zumindest einmal einen USB-Bootloader > über die anfänglich vorhandenen Schnittstellen ... aufspielen. Der beliebte STM32F103 (z.B. auf den "Bluepill" Boards) fällt in diese Kategorie. Der STM32F105 z.B. könnte ab Werk USB. Da es dir anscheinend darum geht, den ST-Link einzusparen, solltest du dich auf die anderen STM32 beschränken. Eine Auswahl an Typen findest du in diesem Dokument von ST: https://www.st.com/content/ccc/resource/technical/document/application_note/6a/17/92/02/58/98/45/0c/CD00264379.pdf/files/CD00264379.pdf/jcr:content/translations/en.CD00264379.pdf Der kategorische Verzicht auf einen ST-Link ist IMHO ein Fehler, weil der auch zum Debuggen gebraucht wird und da erst so richtig zur Hochform aufläuft. Dazu noch ist ein ST-Link sehr preiswert. Am billigsten kommt er als USB-Stick vom Chinesen. Aber auch die meisten Nucleo-Boards kommen mit einem ST-Link, den man per Jumper auch an einen "fremden" STM32 anknüppern kann.
:
Bearbeitet durch User
Bootloader ermöglichen, das Programm im Flash Speicher über eine alternative Schnittstelle zu ändern. Die "normale" Schnittstelle funktioniert ohne Bootloader. Das wäre bei den meisten AVR die ISP Schnittstelle und bei ARM die SWD Schnittstelle. Alle STM32 Mikrocontroller enthalten einen unveränderlichen Bootloader in einem speziellen Speicherbereich. Dieser unterstützt immer mindestens eine UART Schnittstelle. Je nach Chip unterstützt er weitere Schnittstellen, z.B. USB, CAN und I²C. Nicht alle STM32 mit USB haben einen Bootloader, der auch USB unterstützt. Betroffen ist zum Beispiel der STM32F103C8, dessen Bootloader unterstützt nur die serielle UART1. Gerade für diesen STM32F103C8 gibt es jedoch für Arduino einen zusäzlichen USB tauglichen Bootloader, den man in den normalen Flash Bereich installieren kann (nicht muss): http://stefanfrings.de/stm32/stm32f1.html#stm32duinoboot Da gibt es zwei wesentliche Unterschiede: 1) Der fest installierte Bootloader von ST unterstüttz (wenn er denn USB kann), das sogenannte DFU Protokoll. Das dazugehörige Windows Programm wäre DFUSe (http://www.st.com/en/development-tools/stsw-stm32080.html) und neuerdings auch der STM32 Cube Programmer (http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/stm32cubeprog.html). Der USB Bootloader für Arduino aus dem STM32Duino Projekt spricht ein andere USB Protokoll, das teilweise auch DFU genannt wird, aber zur Software von ST inkompatibel ist. Die Arduino IDE unterstützt zum Flashen folgende Schnittstellen: - Seriell UART - SWD über ST-Link Adapter - STM32Duino Bootloader - Aber nicht den integrierten ST Bootloader über USB 2) Der fest installierte Bootloader belegt keinen Platz im Programmspeicher. Das eigene Programm beginnt daher ganz am Anfang vom Flash. Egal, ob man es mit oder ohne Bootloader installiert. Der STM32Duino Bootloader belegt einige Kilobytes vom Programmspeicher. Das eigene Programm beginnt daher hinter dem Bootloader an einer anderen Adresse, als wenn man es per ST-Link oder UART Bootloader installiert hätte. Daher muss das Hauptprogramm speziell für den STM32Duino Bootloader angepasst werden. Die Arduino IDE kümmert sich automatisch darum. In dem Zusammenhang möchte ich noch erwähnen, dass einige Mikrocontroller (z.B. AVR) den selbst installierbaren Bootloader ans Ende des Flash Speichers legen können, damit das eigentliche Hauptprogramm nicht speziell für den Bootloader angepasst werden muss. Mit einer Fuse stellt man dort ein, an welcher Adresse der µC nach einem Reset starten soll (Bootloader oder normales Programm).
Vielen Dank für die ganzen Erklärungen. Langsam blicke ich nun durch. Der Controller den ich benutzen will, ist der STM32F302RBT6. Laut der AN3156 ist der DFu fähig. Also müsste ich nun den BOOT0 Pin auf GND legen und ich könnte meinen Quellcode nach der Compilierung über die USb Buchse programmieren.
Eiscreme schrieb: > Der Controller den ich benutzen will, ist der STM32F302RBT6. Das hättest Du auch im ersten Beitrag mitteilen können.
Eiscreme schrieb: > Also müsste ich nun den BOOT0 Pin auf GND > legen und ich könnte meinen Quellcode nach der Compilierung über die USb > Buchse programmieren. Korrekt. Bis auf das Wort "Quellcode". Du wirst natürlich den Maschinencode (*.hex oder *.elf Datei) übertragen, nicht den Quelltext. Und: Boot0=High aktiviert den Bootloader. Boot0=Low ist für den normalen Start. Du hast dich da wohl nur vertippt, schätze ich.
Stefanus F. schrieb: > Korrekt. Bis auf das Wort "Quellcode". Du wirst natürlich den > Maschinencode (*.hex oder *.elf Datei) übertragen, nicht den Quelltext. Ja genau. Die Fachbegriffe im richtigen Kontext muss ich noch üben. Stefanus F. schrieb: > Und: Boot0=High aktiviert den Bootloader. Boot0=Low ist für den normalen > Start. Ja da habe ich mich geirrt. Ich habe nochmal in die AN4488 nachgeschaut. Für die USB Programmierung muss ich den Pin auf HIGH legen und einen Reset durchführen.
Beitrag #5908059 wurde von einem Moderator gelöscht.
Beitrag #5908220 wurde von einem Moderator gelöscht.
Da hätte ich auch ne Frage dazu: ist der Bootloader (beim Arduino) zwingend notwendig oder würde ein Programm in einen leeren uC geflasht (via ISP und natürlich die Fuses richtig gesetzt) auch laufen?
:
Bearbeitet durch User
Crazy H. schrieb: > Da hätte ich auch ne Frage dazu: ist der Bootloader (beim Arduino) > zwingend notwendig oder würde ein ein Programm in einen leeren uC > geflasht (via ISP) auch laufen? Natürlich! Beachte dabei die Fuses. Mit der passenden Board Definition ist mit Arduino einiges möglich. Auch das.
Apollo M. schrieb im Beitrag #5908220: > mitlerweide wird ohne selbst nachzudenken oder zu recherchieren jede > beliebige frage hier gepostet, warum verblödet die nachrückende > generation so schnell? Warum verblödet? Ich war doch nicht ganz unwissend. Mir ging es darum schrittweise, dass ganze zu verstehen. Ich habe hier nur gefragt, weil ich eine Bestätigung für meinen Wissensstand benötigt habe. Wie ich gesehen habe, habe ich manches falsch verstanden bezüglich des Bootloaders. Aber einige von euch haben ja das Wissen über das Thema Bootloader mit der Muttermilch aufgenommen.
Eiscreme schrieb: > Apollo M. schrieb im Beitrag #5908220: >> mitlerweide wird ohne selbst nachzudenken oder zu recherchieren jede >> beliebige frage hier gepostet, warum verblödet die nachrückende >> generation so schnell? > > Warum verblödet? Ich war doch nicht ganz unwissend. Mir ging es darum > schrittweise, dass ganze zu verstehen. Ich habe hier nur gefragt, weil > ich eine Bestätigung für meinen Wissensstand benötigt habe. Beim besten Willen, aber das konnte man dem Eröffnungspost nicht entnehmen. Es hat 10 Posts gebraucht, bis du endlich mal eine konkrete Frage gestellt hast. Vorher war nur Geblubber.
Eiscreme schrieb: > Moin zusammen, > > ich habe da eine Frage zum Thema Bootloader. Ich habe da natürlich schon > was dazu gelesen, aber es ist noch ein wenig unklar, was das genau sein > soll. > > Wenn ich z.B. den Arduino Bootloader anschaue. Ist das der Grund warum > man einen AVR Arduinomäßig programmieren kann, nachdem man es auf den > Controller geflasht hat? > > MfG Warum beschäftigst du dich mit Sachen die dir doch nur Kopfaua machen?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.