Was ist der Zweck eines Mikrocontroller-Bootloaders? [Duplikat]

Nach meinem Verständnis gibt es für einen gängigen Mikrocontroller (z. B. AVR, PIC) im Allgemeinen zwei Methoden zum Programmieren seines Flash-Speichers.

  1. Mit einem Programmierer: In-Circuit Serial Programming (oder eine Variante?)
  2. Eine Art Bootloader, mit dem ein externes Gerät kommuniziert, wodurch der Mikrocontroller letztendlich seinen eigenen Speicher flashen kann.

Sicherlich muss es einen sehr guten Grund geben, einen Bootloader zu verwenden, sonst wäre seine derzeitige weit verbreitete Verwendung sehr seltsam. Ich habe es einfach noch nicht ganz begriffen.

Ist ein Programmierer teuer? Aber dann gibt es Arduinos (ATmega-Mikrocontroller), die als Programmierer fungieren können . Reichen die Kosten für einen zusätzlichen IC aus, um die Verwendung eines Bootloaders zu rechtfertigen? Wenn ich mich nicht irre, entfernen die neuesten Arduinos den FTDI-Chip vollständig und ersetzen ihn durch einen ATmega-Prozessor, der die USB-zu-Seriell-Schnittstelle übernimmt. Sicherlich wäre es möglich, beispielsweise die Programmierfunktion auf diesem IC zu integrieren?

Oder nehmen Sie zum Beispiel den PIC-Mikrocontroller. Ich habe etwas gesehen, das JDM-Programmierer genannt wird . Wenn so etwas praktisch ohne aktive Komponenten einen PIC programmieren kann, dann

  1. Warum überhaupt einen Bootloader verwenden?
  2. Was ist der Zweck des relativ viel komplexeren PICkit (abgesehen von Robustheit)? Debugging-Fähigkeit?
arduino.cc/en/Hacking/Bootloader?from=Main.Bootloader Die Antwort ist so ziemlich "Bequemlichkeit"
um Hardware zu initialisieren oder Code von einer externen Quelle in den internen Speicher zu laden
Um einige der Antworten hier in Bezug auf "teuer" zu ergänzen: Für einige MCUs (AVR, STM8 / 32, ...) sind Programmierer billig. Sie können einen AVR-Programmierer für 15 $ oder weniger bekommen. Bei anderen MCU-Familien (z. B. Kinetis) können Programmierer jedoch über 100 US-Dollar kosten, und Programmierer/Debugger, die viele ARM-Familien programmieren können, können 500 US-Dollar und mehr kosten. Aber wie andere gesagt haben, geht es hauptsächlich um Komfort, Fernaktualisierung und das Eliminieren externer Hardware.

Antworten (6)

Der Hauptzweck eines Bootloaders besteht darin, das Aktualisieren der Firmware über andere Schnittstellen als die standardmäßige Hardwareschnittstelle zu ermöglichen. Dies ermöglicht beispielsweise Updates über Kommunikationskanäle, die die Anwendung ansonsten für ihre eigenen Zwecke verwendet, was bedeutet, dass Sie Remote-In-System-Updates durchführen können, ohne dass ein physischer Eingriff am Remote-Standort erforderlich ist.

Sobald Sie diese Fähigkeit haben, benötigen Sie keine zusätzliche Hardware, was sie zur Methode mit den niedrigsten wiederkehrenden Kosten macht, und aus diesem Grund wird sie von Bastlersystemen wie Arduino verwendet. Es bietet auch eine kleine Menge Marketing-Lock-in, denn jetzt müssen Sie Ihre AVR-Chips mit dem bereits darin programmierten Bootloader kaufen.

Es gibt einige Szenarien, in denen ein Bootloader keinen großen Mehrwert bringt. Sie haben Recht, wenn Sie ein paar Boards haben, können Sie sicherlich den Programmierer anschließen und den Code erneut flashen. Wenn Sie ein Bastler mit ein paar Boards sind oder sogar eine kleine Produktion haben, können Sie es auf diese Weise tun.

Die Bootloader haben mehr Sinn in Szenarien, in denen das physische Anschließen eines Programmierers weniger praktisch wäre. Fertige Produkte, die beispielsweise bereits im Einsatz sind, sind eines dieser Szenarien

Wenn Sie ein elektronisches Produkt haben, lassen Sie im Allgemeinen keinen „Debug“- oder „Programmier“-Port offen. Sie haben nur wie ein Ethernet oder seriell oder RS485 oder CAN oder drahtlos an Ihrem Produkt.

Was ist auch, wenn Sie mehrere Dutzend oder vielleicht Hunderte davon bereits verkauft/bereitgestellt haben und Sie ein Firmware-Update haben?

Anstatt nacheinander die Gehäuse zu öffnen, den Programmierer anzubringen, zu programmieren, das Produktgehäuse zu schließen und so weiter, können Sie einfach eine der vorhandenen Schnittstellen Ihres aktuellen Produkts verwenden, um es zu programmieren.

Es ist sogar noch besser, wenn Sie Geräte mit beispielsweise Ethernet oder irgendeiner Art von drahtlosem "verbunden" haben. Wenn Sie ein drahtloses Modul in Ihr Produkt einbauen, können Sie diese drahtlose Kommunikation mit einem Bootloader verwenden, um den Code zu aktualisieren. Auf diese Weise können Sie mehrere Geräte gleichzeitig aktualisieren, ohne sie zu berühren.

Und es wird zu einer Traumfunktion, wenn Ihre Geräte mit dem Internet verbunden sind. Auf diese Weise können Sie die Firmware von allem mit nur einem Klick aktualisieren, während Ihr Telefon seine Updates erhält.

Für einen Bastler ist es vielleicht nicht sehr sinnvoll, einen Bootloader zu verwenden, aber aus geschäftlicher Sicht, wenn Sie tatsächlich Geräte verkaufen, ist dies sehr sinnvoll, da es Zeit spart, den Prozess erheblich vereinfacht und Ihre Benutzer Kontakt zu Ihnen haben Gerät müssen Sie ihnen keine Programmierer nur für Firmware-Updates verkaufen (oder sie anderweitig die Programmierer kaufen lassen). Und was ist, wenn Ihre Geräte funktional gleich sind, aber unterschiedliche Mikrocontroller haben? Sie müssten feststellen, wer was hat, um den richtigen Programmierer zu schicken oder zu verkaufen, es wird ein Alptraum!!

Stattdessen stecken Sie einfach einen USB-Anschluss darauf und alles wird vor dem Benutzer verborgen. Jeder weiß, wie man einen USB-Anschluss an den PC anschließt, eine Datei darauf kopiert und an ein anderes Gerät anschließt, aber kein normaler Benutzer weiß, was zum Teufel ist ein P&E Debugger, ein PICKit oder ein Segger J-Link.

Tut mir leid, wenn das etwas verwirrend ist, Englisch ist nicht meine Sprache und vielleicht ist die Redaktion ein Durcheinander, aber ich hoffe, Sie verstehen es.

Beifall!!

Gute Antwort, vielleicht etwas ausführlich. Dein Englisch ist gut (zumindest aus meiner Nicht-Muttersprachler-Perspektive).
Englisch ist insofern seltsam, als es als Standardsprache für den globalen Handel wahrscheinlich mehr Nicht-Muttersprachler als Muttersprachler gibt. So wird „korrektes“ Englisch umso schwerer zu definieren. Als Muttersprachlerin aus Kansas City, USA, hatte ich keine Probleme, Sie zu verstehen.

Der Hauptzweck eines Bootloaders ist:

  • Programm vom Speicher / Netzwerk abrufen und laden.

Es kann eine sehr begrenzte Menge an schnellem Speicher in der Nähe der Verarbeitungseinheit geben, und das Programm, das Sie ausführen möchten, kann von Board zu Board unterschiedlich sein, oder Sie möchten vielleicht das Programm auf Ihrem Board ändern. Der Bootloader ist ein gemeinsames Nennerprogramm, das weiß, wie es Ihre benutzerdefinierte Software von dort lädt, wo sie gespeichert ist, und sie der Verarbeitungseinheit zuführt.

Fortgeschrittene Bootloader können:

  • Selbsttests
  • Netzwerk booten
  • zusätzliche Firmware laden
  • ...
Das OP fragt speziell nach den Bootloadern, die in Flash-basierten Mikrocontrollern zu finden sind. Diese Antwort ist zwar für Bootloader im allgemeineren Sinne relevant, weicht jedoch etwas vom Thema ab.

Abgesehen von all den anderen guten Antworten gibt es zumindest für kommerzielle Produkte einen weiteren Grund: Nach der Produktionsprogrammierung haben die meisten Chips ein Optionsset, um sie vor dem Auslesen der Daten zu schützen.

Abhängig von der MCU kann diese Ausleseschutzoption tatsächlich die Hardwareprogrammiererverbindung (wie SWD oder JTAG) deaktivieren. Wenn Sie den Bootloader nicht ausgeführt haben, können Sie das Gerät nicht neu programmieren.

Und dann landen Sie mit 10.000 Einheiten mit fehlerhafter Software auf dem Markt, es entsteht ein großer Verlust bei etwas, das im Wesentlichen aus ein paar Monaten Codierung besteht.

Es sind nicht die Kosten des Programmierers. Die Verkäufe kommen nicht von Bastlern; Es ist ein Faktor, aber nicht der Faktor, Leute, die in großen Mengen einkaufen, können sich Programmierer sicherlich leisten. Sie haben einige Möglichkeiten:

  1. Lassen Sie die Teile entweder vom Teilelieferanten oder einem Zwischenhändler oder Ihrem Herstellerhaus vorprogrammieren und dann auf die Platine legen

  2. Eine Art Schaltungsprogrammierung nach dem Platzieren auf der Platine

Innerhalb der zweiten Kategorie haben Sie die harten Logiklösungen (das SPI- oder SPI-ähnliche Ding auf AVR-Chips) und die weichen Lösungen (ein Bootloader, ein Programm, das in dem Teil läuft, das das Teil verwendet). Manche haben beides.

Die schwierige Lösung, die Sie richtig machen müssen, wenn Sie das Design vermasseln, müssen Sie es früh genug erkennen oder Ihr Produkt ist ein Haufen nutzloser Teile, die Sie wegwerfen müssen. Sie können Softwarelösungen sogar bis zu Post-Silicon ändern; Sie können sogar eine Bestandsaufnahme machen und es durchgehen und neu programmieren. Es gibt also diesen Luxus, wenn ein Fehler in Ihrem Produkt einfacher zu beheben und/oder zu erstellen ist. Die weiche Lösung kann auch eine größere Auswahl an Optionen für den Benutzer ermöglichen. SPI UND I²C UND USB UND seriell UND jede Hardwarelösung, falls vorhanden. Eine weiche Lösung, in einigen Fällen kann der Benutzer den Bootloader aus eigenen Gründen durch einen eigenen ersetzen.

Nicht jeder Mikrocontroller kann über Software verfügen, die seinen eigenen Flash programmieren kann, aber für alle, die dies tun, kann der Benutzer seinen eigenen Bootloader unabhängig vom Chiphersteller erstellen, wenn ein Chiphersteller einen bereitstellt.

Mit dem ARM Cortex-M und SWD sehe ich, dass sich die Dinge ändern; Einige Chips sind nur SWD und keine anderen ab Werk. Ich habe gerade einen Atmel SAM D21 bekommen ; Sie haben den SAM-BA- Bootloader nicht mehr und sie bieten Quellen, damit Sie Ihre eigenen am Anfang des Benutzer-Flash hinzufügen können, und einige Register, um sie irgendwie zu schützen, aber es ist trivial, sie zu löschen. So viel dazu; Sie können auch einfach Ihre eigenen erstellen oder SWD verwenden.

Schauen Sie sich die Arduino/AVR-Welt an, die Bastler. Sie haben ihren eigenen Bootloader und das ist die primäre Schnittstelle, da sie kostenlos ist. Sie können einen ISP-Programmierer für ein paar (oder ein paar Dutzend) Dollar bekommen. Beachten Sie jedoch, dass es eine Reihe anderer AVR-Boards gibt, die mit USB-basierten Protokollen anstelle der bis dahin beliebten Bootloader arbeiten. Einige dieser USB-Protokolle werden herstellerübergreifend verwendet.

Am Ende des Tages, wenn Ihre Kunden es wünschen und/oder Ihre Marketingabteilung es verwenden kann, um unser Produkt von ihrem zu unterscheiden, und es schmälert nicht die Kosten des Produkts oder den Gewinn. Warum nicht? Gewinnen.

Auf diese Frage gibt es weder eine noch richtige Antwort; das ist alles meinungsbasiert. Sie können jeden der Chip-Anbieter kontaktieren und fragen, aber die Leute, die antworten, werden ihre Meinung äußern, sie kennen wahrscheinlich nicht einmal die Leute, die diese Funktion hinzugefügt oder gewartet haben, oder haben jemals mit ihnen gesprochen. Auf diese Frage gibt es keine Antwort.

Nur um auch die Perspektive eines Bastlers zu geben:

Es macht das Leben viel einfacher, da keine zusätzliche Hardware oder viel Low-Level-Wissen erforderlich ist. Ein extremes Beispiel, das ich verwendet habe, war das Partikelphoton (keine Zugehörigkeit), das über die Wolke geblitzt werden kann. Die einzigen Dinge, die zum Flashen dieses Chips erforderlich sind, sind:

  • Stromversorgung
  • WLAN
  • Internetverbindung
  • Ein weiterer Computer zum Schreiben der Software

Es macht den Prozess ziemlich kostengünstig und ist aus einer Nicht-Profi-Perspektive eigentlich ganz einfach.