Question

Je suis à la recherche d'un moyen de déterminer si un processeur ARM démarre à partir d'un démarrage à froid (à savoir la mise sous tension initiale) par rapport à un démarrage à chaud (à savoir l'affirmation remise à zéro sans perte de puissance réelle). Plus précisément, je suis en utilisant un noyau de ARM968, fera la détermination en utilisant C ou de montage, et je vais utiliser la détermination si certaines opérations ne fonctionnent que sur la mise sous tension initiale et non sur les réinitialisations ultérieures. Dans les projets précédents, j'ai circuits externes à effet de levier (par exemple FPGA) pour détecter les différents scénarios de démarrage, mais dans ce cas, je suis limité au cœur ARM.

Était-ce utile?

La solution

Vous pouvez initialiser une variable globale dans la RAM à une valeur qui est peu probable lors du démarrage à froid, et vérifier que pendant le démarrage.

Pour les microcontrôleurs normalement la logique réinitialisation de la puce spécifique fournit un registre d'état, qui indique la source de la remise à zéro. Je ne sais pas si cela existe pour ce grand cœur, et si vous pouvez l'utiliser.

Autres conseils

Vérifiez la documentation pour vous puce spécifique ( « ARM968 » ne suffit pas spécifique). Il devrait y avoir un registre qui décrit la cause de la remise à zéro. Par exemple. voici ce que LPC23xx a:

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.

Il est susceptible d'être difficile, et peut-être que vous ne veux pas dire vraiment juste le noyau lui-même. Le noyau aurait obtenu une remise à zéro, mais l'extérieur de la mémoire (mais peut-être encore dans la puce) n'a pas. si la mémoire est basée dram alors il peut encore s'essuyés au démarrage. Je ne sais pas d'une taille générique unique réponse. vous et starblue avoir cependant, vous devez trouver un endroit de registre qui n'est pas effacé sur une remise à zéro, mettre cela à quelque chose qui est « probable » ne se produise pas au hasard sur une mise sous tension. lire ensuite le mettre. pense comme le fpga ou pld qui gèrent la logique de remise à zéro au niveau du conseil d'administration (le cas échéant) sont les meilleurs parce que sur une mise sous tension remise à zéro, ils sont remis à zéro ainsi, et une ambiance chaleureuse remise à zéro, ils sont celui qui a causé et garder leur état .

percera la TRM pour votre coeur ou par la spécification de registre pour la puce, et voir s'il y a des registres dont l'état remise à zéro est indéfini, celui que vous utilisez normalement Do not et wont mal la puce si vous réglez-le sur quelque chose, et voir ce qu'il pouvoirs comme, c'est là que je commencerais à la recherche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top