Frage

Ich bin auf der Suche nach einem Weg, um zu bestimmen, ob ein ARM-Prozessor von einem Kaltstart booten (d anfängliches Einschalten) im Vergleich zu einem Warmstart (das heißt Reset Behauptung ohne tatsächliche Verlustleistung). Spezifisch verwende ich einen ARM968 Kern, wird die Bestimmung unter Verwendung von C oder Montage sein machen, und ich will die Bestimmung verwenden, um bestimmte Operationen auf die anfänglichen Einschalt- und nicht auf nachfolgende setzt nur ausgeführt werden. In früheren Projekten habe ich eine externe Schaltung (zum Beispiel FPGA) genutzt, die verschiedene Boot-Szenarien zu erkennen, aber in diesem Fall bin ich auf den ARM-Kern beschränkt.

War es hilfreich?

Lösung

Sie können eine globale Variable im RAM auf einen Wert initialisiert werden, die während des Kaltstarts unwahrscheinlich ist, und prüfen Sie, dass während des Bootvorganges.

für Mikrocontroller normalerweise die Rücksetzlogik des spezifischen Chips liefert ein Statusregister, die die Quelle des Rücksetz anzeigt. Ich weiß nicht, ob das für diesen größeren Kern vorhanden ist, und ob Sie könnten diese verwenden.

Andere Tipps

Überprüfen Sie die Dokumentation für Sie bestimmten Chip ( „ARM968“ ist nicht spezifisch genug). Es soll ein Register sein, die die Ursache des Zurücksetzens beschreibt. Z.B. hier ist, was LPC23xx hat:

Reset Source Identification Register (RSIR - 0xE01FC180)

This register contains one bit for each source of Reset. Writing a 1 to any of these bits
clears the corresponding read-side bit to 0. The interactions among the four sources are
described below.

Bit Symbol Description
0 POR Assertion of the POR signal sets this bit, and clears all of the other bits in
this register. But if another Reset signal (e.g., External Reset) remains
asserted after the POR signal is negated, then its bit is set. This bit is not
affected by any of the other sources of Reset.
1 EXTR Assertion of the RESET signal sets this bit. This bit is cleared by POR,
but is not affected by WDT or BOD reset.
2 WDTR This bit is set when the Watchdog Timer times out and the WDTRESET
bit in the Watchdog Mode Register is 1. It is cleared by any of the other
sources of Reset.
3 BODR This bit is set when the 3.3 V power reaches a level below 2.6 V.
If the VDD(DCDC)(3V3) voltage dips from 3.3 V to 2.5 V and backs up, the
BODR bit will be set to 1.
If the VDD(DCDC)(3V3) voltage dips from 3.3 V to 2.5 V and continues to
decline to the level at which POR is asserted (nominally 1 V), the BODR
bit is cleared.
if the VDD(DCDC)(3V3) voltage rises continuously from below 1 V to a level
above 2.6 V, the BODR will be set to 1.
This bit is not affected by External Reset nor Watchdog Reset.
Note: Only in case when a reset occurs and the POR = 0, the BODR bit
indicates if the VDD(DCDC)(3V3) voltage was below 2.6 V or not.

Es ist wahrscheinlich schwierig sein, und vielleicht bedeuten nicht Sie wirklich nur den Kern selbst. Der Kern sollte eine Rückstellung, aber die Erinnerung außerhalb (aber vielleicht noch innerhalb des Chips) tat nicht bekommen. Dram basiert, wenn der Speicher dann kann es noch beim Booten gewischt bekommen. Ich weiß nicht, von einer generische Einheitsgröße Antwort paßt. Sie und haben es aber starblue, müssen Sie einige Register irgendwo finden, die nicht auf einem Reset gelöscht wird, festgelegt, dass auf etwas, das „wahrscheinlich“ nicht passieren zufällig auf einem Einschalten ist. lesen sie es dann eingestellt. denkt wie die FPGA- oder PLD, die die Reset-Logik auf Board-Ebene (falls vorhanden) sind die besten, weil auf einem Power-On-Reset sind sie zurückgesetzt als gut, und an einem warmen zurückgesetzt sie sind derjenige, der sie verursacht hat und behalten ihren Zustand verwalten .

dig durch das TRM für Ihren Kern oder über das Register spec für den Chip, und sehen, ob es irgendwelche Register Reset-Zustand, das ist nicht definiert, ein, dass Sie in der Regel tun sie nicht Gebrauch und wird nicht dem Chip schaden, wenn Sie es auf etwas festgelegt, und sehen, was es hochgefahren wie das ist, wo ich anfangen würde suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top