ARM Cortex M-Software-Update über Bootloader

Ich möchte die Software aktualisieren, die auf einem Knoten mit einer ARM Cortex M4 MCU ausgeführt wird.

Ich verstehe, dass ich dazu einen Bootloader in meinem TI ARM Cortex M4-Entwicklungsboard ausführen muss , der eine Binärdatei drahtlos empfangen und bestimmte Flash-Abschnitte programmieren kann. Ich verstehe, dass die Funktionalität des Over-the-Air-Empfangs von Binärdateien zu diesem Bootloader hinzugefügt werden muss.

Das klingt alles richtig, aber ich verstehe nicht, wie dies erreicht werden kann. Wie ist es möglich, dass ich Teile des Flashs in der MCU von derselben MCU selbst programmiere?

Benötige ich zusätzliche Hardware, um die auf meinem Knoten ausgeführte Software zu aktualisieren? Alles, was ich tun möchte, ist, die Software, die auf meinem Knoten ausgeführt wird, drahtlos zu aktualisieren. Eine Mülltonne kann über HSDPA heruntergeladen werden. Zum einfachen Testen kann ich dies über Ethernet tun.

Ich würde mich sehr freuen, wenn jemand in einem detaillierteren Format erläutern könnte, wie dieser Prozess durchgeführt wird, damit ich das Verfahren verstehe. Vielen Dank.

Antworten (2)

Tatsächlich ist es ganz einfach – es gibt mehrere Methoden. Eine habe ich in diesem Thread skizziert .

Grundsätzlich werden Sie zwei separate Softwareprogramme ausführen. Betrachten Sie das folgende Setup (es ist nur ein Beispiel):

  • Bootloader (Flash-Adresse 0x0000 - 0x1000)
  • Anwendung (Flash-Adresse 0x1000 - 0x2000)

(natürlich abhängig von Ihren Anforderungen)

Jetzt lädt die Anwendung die Binärdatei herunter (wir nennen sie FW 2.0). Es wird ein spezielles Bit in Ihrem Controller setzen und einen Neustart durchführen. Ihre CPU startet immer bei Adresse 0x0000, sie lädt Ihren Bootloader. Ihr Bootloader prüft, ob das "Special"-Bit gesetzt ist und flasht dann die Binärdatei auf die Adresse 0x1000-0x2000. Anschließend wird dieses spezielle Bit zurückgesetzt, was anzeigt, dass keine neue Firmware verfügbar ist. Es wird sich dann wieder selbst zurücksetzen. Jetzt startet wieder der Bootloader - er erkennt, dass das spezielle Bit tatsächlich NICHT gesetzt ist und tut nichts, sondern führt einfach einen Sprung zu der Anwendung (0x1000) aus, von wo aus das Programm ausgeführt wird (jetzt mit der neuen Firmware).

Möglicherweise möchten Sie auch eine Option zum Ausführen einer Standard-Firmware oder zum Laden einer Firmware über UART hinzufügen, falls Ihre Anwendung nicht korrekt geschrieben werden kann oder die Stromversorgung während des Updates unterbrochen wird.

Danke schön. Das klärt einiges auf. Obwohl ich noch ein paar Fragen habe. Nehmen wir an, Application_old hat die .bin-Datei heruntergeladen, wo soll sie gespeichert werden, bis der Bootloader erneut geladen wird? Muss ich den Bootloader jedes Mal, wenn das spezielle Flag gesetzt ist, vorher darüber informieren, wo er nach einer neuen .bin-Datei suchen soll?
Und wie ist es mir möglich, eine MCU zu verwenden, um den Flash selbst zu bearbeiten? Ich benutze den TIVA129 Arm Cortex M4 von TI. Ich hoffe, dass das Ausführen von Schreibvorgängen in Flash, während der Code ausgeführt wird, zulässig ist. Angenommen, ich habe eine Binärdatei, liest der Bootloader sie Byte für Byte und legt eine Kopie der Bin-Datei im entsprechenden Bereich des Flash-Speichers ab? Soll ich für den Bootloader schreiben, um diese Aktion zu unterstützen? Vielen Dank für Ihre Antwort
Wahrscheinlich müssen Sie einen Bereich definieren, in dem die binäre Anwendungsdatei gespeichert werden soll (Sie können einen solchen Abschnitt im Linker definieren). Die andere Option ist, dass es an Ihrem Bootloader liegt, diese Datei abzurufen und (während des Empfangs) direkt im Anwendungsbereich zu speichern. Normalerweise möchten Sie Ihren Bootloader so einfach wie möglich halten (es kann jedoch sein, dass Sie spezielle Funktionen benötigen).
Normalerweise finden Sie im Board-Support-Paket oder in den TI-Tools eine Methode zum Schreiben in Flash (lesen Sie die TI-Dokumentation, ich bin mit der TIVA-Familie nicht vertraut). Denken Sie daran, dass Sie keinen Code überschreiben, der gerade ausgeführt wird. Sie überschreiben Code, der "nur da sitzt und darauf wartet, ausgeführt zu werden".
Schätzen Sie Ihre Bemühungen wirklich, Tom L.

Sie können normalerweise nicht auf dieselbe Seite schreiben, die Sie ausführen, Flash ist in Segmente, Seiten und Blöcke unterteilt, die Adressen sollten im Datenblatt für diesen bestimmten Prozessor aufgeführt sein. Um es eventuell zu umgehen, wenn der Prozessor dies unterstützt, können Sie aus dem Speicher ausführen. Wenn Sie Ihren Bootloader entwerfen, sollten Sie immer Stromausfallszenarien berücksichtigen, dh woher wissen Sie, dass der Bin heruntergeladen und vollständig ohne Fehler auf Flash geschrieben wurde, was ist, wenn dies nicht der Fall ist, wie können Sie ihn wiederherstellen.