PlatformIO-Firmware mit Build-Offset in Firmware ohne Offset konvertieren
Einige Firmwares werden mit einem Build-Offset gebaut, um Flash-Speicher (wie 32k - 0x8000) für einen Bootloader zu reservieren, der vor der Firmware gestartet wird. Einer der Nachteile der Verwendung einer solchen Firmware ist, dass sie immer von einem kompatiblen Bootloader abhängt (Kompatibilität wird hauptsächlich dadurch definiert, wie viel Flash für den Bootloader reserviert wird).
Wenn Sie eine Firmware in eine “normale” Nicht-Bootloader-Firmware konvertieren möchten, müssen Sie Folgendes tun:
- Setzen Sie
board_build.offsetauf0x0- suchen Sie nicht nur in Ihrer Build-Konfiguration inplatformio.iniund allen eingebundenen Dateien, sondern auch in der Konfiguration, die Ihre Konfigurationextends, falls vorhanden. - Setzen Sie
board_upload.offset_addressauf0x0. Dies betrifft hauptsächlich das Hochladen mit einem Debugger, aber Sie sollten diese Informationen immer konsistent halten, da das Debuggen sonst ein Albtraum ist. - Bearbeiten Sie das spezifische Linker-Skript, das Ihre Firmware verwendet, und setzen Sie den Flash-Offset entsprechend:
Suchen Sie nach dem MEMORY-Abschnitt wie diesem:
MEMORY
{
FLASH (rx) : ORIGIN = 0x8008000, LENGTH = 512K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
}Wie Sie in
FLASH (rx) : ORIGIN = 0x8008000, LENGTH = 512Ksehen, befindet sich der Flash für dieses STM32 (Beispiel) nicht an der Flash-Adresse 0x8000000 des MCU, sondern an 0x8008000 - im Grunde wird dem Linker mitgeteilt, die 0x8000 (32k) zu überspringen, die der Bootloader belegt (sonst würde er den Bootloader überschreiben).
Ändern Sie dies in die Flash-Adresse Ihres MCU. Für ARMs wie das STM32 ist dies typischerweise 0x8000000.
Kompilieren Sie nun neu und Ihre Firmware sollte ohne den Bootloader funktionieren.