Sto cercando un modo per determinare se un processore ARM si sta avviando da un avvio a freddo (vale a dire accensione iniziale) rispetto a un avvio a caldo (vale a dire reset asserzione senza perdita di potenza effettiva). Specificamente sto usando un core ARM968, farò la determinazione usando C o assembly, e userò la determinazione in modo che certe operazioni vengano eseguite solo sull'accensione iniziale e non sui successivi reset. Nei progetti precedenti ho sfruttato il circuito esterno (ad esempio FPGA) per rilevare i diversi scenari di avvio, ma in questo caso sono limitato al core ARM.Come rilevare avvio a freddo o avvio a caldo su un processore ARM?
risposta
È possibile inizializzare una variabile globale nella RAM su un valore che è improbabile durante l'avvio a freddo e verificarlo durante l'avvio.
Per i microcontrollori normalmente la logica di reset del chip specifico fornisce un registro di stato, che indica la sorgente del reset. Non so se questo esiste per questo nucleo più grande e se puoi usarlo.
È probabile che sia difficile, e forse non intendi proprio il nucleo stesso. Il core avrebbe dovuto essere ripristinato, ma la memoria esterna (ma forse ancora all'interno del chip) no. se la memoria è basata su dram, potrebbe comunque essere cancellata all'avvio. Non so di una generica taglia unica adatta a tutte le risposte. sia tu che Starblue ce l'hai, devi trovare qualche registro da qualche parte che non viene cancellato in caso di reset, impostalo su qualcosa che è "probabile" che non si verifichi casualmente al momento dell'accensione. leggerlo e impostarlo. pensa che fpga o pld che gestiscono la logica di reset a livello di scheda (se ce ne sono) sono i migliori perché su un reset di accensione vengono resettati, e su un reset a caldo sono quelli che lo hanno causato e mantengono il loro stato .
scavare attraverso il TRM per il core o attraverso le specifiche di registro per il chip e vedere se ci sono registri il cui stato di reset non è definito, uno che normalmente non si usa e non danneggerà il chip se lo si imposta su qualcosa e vedere come si alimenta, è dove inizierei a cercare.
Controllare i documenti per il chip specifico ("ARM968" non è abbastanza specifico). Ci dovrebbe essere un registro che descriva la causa del reset. Per esempio. Ecco cosa LPC23xx ha:
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.
- 1. Ottimizzazione avvio a freddo
- 2. Come gestisco uno schema URL personalizzato in PhoneGap per un avvio a freddo?
- 3. Avvio a molla: come configurare l'impaginazione su un @RepositoryRestResource?
- 4. Contro gli attacchi di avvio a freddo: come limitare le informazioni sensibili in Haskell
- 5. Come si imposta un breakpoint software su un processore ARM?
- 6. Avvio di VM Vagrant su avvio host
- 7. Logout JWT avvio a molla
- 8. Implementazione di avvio a caldo per modelli e risorse in IntelliJ
- 9. Che cos'è il "tempo di avvio a freddo" del database AppEngine?
- 10. Avvio a molla + Websocket (SockJS)
- 11. Avvio a molla - Non un tipo gestito
- 12. Qual è la differenza tra adattamento parziale e avvio a caldo?
- 13. Prestazioni di avviamento a freddo WPF
- 14. avvio di avvio configurazione esterna
- 15. Avvio a molla + credenziali client Oauth2
- 16. Utilizzare l'attuatore di avvio a molla senza un'applicazione di avvio a molla
- 17. Come aggiungere ApplicationContextInitializer personalizzato a un'applicazione di avvio a molla?
- 18. LevelDB supporta backup a caldo (o equivalenti)?
- 19. Osservabili Caldo e Freddo: ci sono operatori "caldi" e "freddi"?
- 20. Ordine di configurazione automatica avvio a molla
- 21. Configurazione registrazione programmatica di avvio a molla
- 22. Indice indice di avvio a molla
- 23. Avvio a molla - Caricamento dati iniziali
- 24. Avvio a molla con Hazelcast e Tomcat
- 25. Avvio di QTimer in A QThread
- 26. avvio a molla Joda DateTime Serialization
- 27. elenco a discesa di avvio in esaurimento,
- 28. Avvio a molla con origine dati JNDI
- 29. Avvio a molla @ConfigurationProperties non caricato
- 30. Integrazione liquibase con avvio a molla
RAM può contenere i valori per un tempo sorprendentemente lungo dopo lo spegnimento. – caf
L'approccio variabile della RAM ha funzionato. Ho scomposto una porzione di SRAM di 4 byte per una firma di avvio e l'ho esclusa dalla dimensione SRAM nelle direttive del linker, quindi nulla sarebbe stato inizializzato o sovrascritto tranne per il codice di scrittura/controllo della firma. –