Wie funktioniert die in-application-Programmierung für ARM (Cortex-M3) zu arbeiten?
Arbeite ich an einem custom-Cortex-M3-basierten Gerät, und ich brauche zur Umsetzung der in-application programming (IAP) - Mechanismus, so dass es möglich sein wird ein update der Geräte-firmware ohne JTAG (wir nutzen TFTP-oder HTTP anstelle). Während sich die IAP-code Beispielen von ST Microelectronics sind klar genug für mich, die ich nicht wirklich verstehen, wie das re-Flashen funktioniert.
Soweit ich das verstanden habe, werden die Anweisungen abgerufen werden, indem Sie die CPU von der Blitz durch die ICode-bus (und den prefetch-block, natürlich). So, hier ist mein ziemlich dumme Frage: warum nicht das laufende Programm beschädigt werden, während es wieder blinkt selbst (d.h. änderungen der Flash-Speicher, von dem es ausgeführt wird)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine gemeinsame Lösung ist, um einen kleinen reservierten Bereich in dem flash, wo die eigentliche blinken-Programm gespeichert ist. Wenn neue firmware heruntergeladen wurde, einfach direkt den code in diesem Bereich.
Natürlich, dieser kleine Bereich nicht überschrieben wird beim Flashen der firmware, es kann nur sein getan durch andere Mittel (wie JTAG). So stellen Sie sicher, das blinken-das Programm funktioniert gut, um mit zu beginnen. 🙂
Ich bin nicht vertraut mit STM-Implementierung, sondern in der NXP-chips die IAP Routinen gespeichert sind, in einem separaten, reservierten ROM-Bereich, die nicht mehr gelöscht werden kann nach Benutzer-code.
Wenn Sie die Umsetzung der flash selbst zu Programmieren, durch die Verwendung von HW-Register direkt, müssen Sie entweder sicherstellen, dass Sie nicht berühren die Sektoren läuft es ab, oder läuft aus dem RAM.
Nun wird ein Tag viele Mikro-Controller unterstützt IAP, dass es möglich ist, das Programm der flash-Speicher während der Ausführung des Programms in der gleichen flash.
Für IAP-Programm-Speicher in das flash in 2 Teile unterteilt, eine ausführbare Datei & andere Ersatzteile.
In der Regel Programmieren wir die flash-Speicher an einem Ort (sagen wir, Teil-1) über JTAG, deren firmware-version 0.01. Für IAP, ich.e -, Programm-den flash in einem anderen Teil (part-2), während der code ausgeführt wird, die entsprechenden API ' s sollten in der firmware-version 0.01, die hilft, das Programm der flash-Teil-2 Nach Abschluss der Programmierung erfolgreich firmware-version aktualisiert werden als 0.02. Beim Prozessor neu gestartet wird, wird die Programmausführung springt zur neuesten firmware überprüfen der firmware-version bei der Initialisierung.
Den Teil, in dem die firmware ausgeführt wird, heißt ausführbaren Teil, und andere back-up. warum heißt es "back-up" bedeutet, angenommen, wenn es keine firmware-Korruption, bei der Programmierung, firmware-version wird nicht aktualisiert & nach dem Neustart, Programm, Steuerung springt automatisch zurück zu back-up-firmware, die nach Prüfung Versionsnummer.
Weiterer guter Weg, es zu tun ist durch spezielle bootloader. Allerdings STM IAP ist nicht gespeichert im Flash, so dass es nicht überschrieben werden können, indem es sich von selbst. Was sind in der Regel Menschen tun ist, um verschüttete den Blitz in zwei Teile , einer ist reserviert für maßgeschneiderte Bootloader und eine Andere für die Anwendung. Bootloader sorgt dafür, dass es nicht schreiben Sie Ihre eigenen zugewiesenen Bereich. Bootloader über JTAG programmiert werden und später die Anwendung nutzen können-bootloader, um das Programm selbst.
Dies ist, weil, im Allgemeinen Fall schreiben/Programmieren in den flash-Speicher ist nicht erlaubt, während des Lesens von(ich.e code ausführen).
Haben Sie einen Blick auf diese für einige Ideen, die auf Umsetzung der IAP.