Ich muss Firmware in den RAM eines leeren Cortex-M4-Chips laden und ausführen (in einer Produktionsumgebung). Der Chip erwartet normalerweise eine Vektortabelle an der Adresse 0x0 im Flash. Wenn ich meine Firmware in den RAM lade, ist der Geräte-Flash leer. Meine Firmware läuft gut, aber Interrupt-Handler werden nie aufgerufen. Ich setze VTOR auf meine Tabelle im RAM (und sie ist natürlich richtig ausgerichtet).
Ich habe herausgefunden, dass, wenn das Gerät aus dem leeren Zustand startet:
Wenn bereits Firmware im Flash vorhanden ist, läuft meine Hersteller-Firmware einwandfrei und unterbricht die Arbeit. Das Löschen des Bits in HFSR hilft nicht. Das Setzen von VECTCLRACTIVE oder VECTRESET in AIRCR hilft nicht.
Frage: Gibt es eine Firmware-gesteuerte Möglichkeit, das NVIC zurückzusetzen oder den Lesefehler der Vektortabelle zu löschen?
Dies hängt ganz von der Implementierung des Cortex M4 ab.
Der M4 selbst kann nur durch einen System-Reset wiederhergestellt werden, der VTOR zurücksetzt, also ist das ein No-Go.
Ihr Chip kann jedoch ein Register wie SYSCFG_MEMRMP
im STM32F407 haben. Dadurch wird die Standard-Boot-Region woanders neu zugeordnet.
Ich weiß, dass der LPC43xx von NXP auch ein solches Register hat.
Wenn dies nicht verfügbar ist, muss Ihr Debugger die richtige Bedingung festlegen, bevor er ausgeführt wird.
Scott Seidmann
Nur ich
Filo
brhans