Estoy buscando una forma de determinar si un procesador ARM está arrancando desde un arranque en frío (es decir, encendido inicial) en comparación con un arranque en caliente (es decir, una afirmación de reinicio sin pérdida de potencia real). Específicamente, estoy usando un núcleo ARM968, haré la determinación usando C o ensamblaje, y usaré la determinación para que ciertas operaciones solo se ejecuten en el encendido inicial y no en restablecimientos posteriores. En proyectos anteriores, aproveché los circuitos externos (por ejemplo, FPGA) para detectar los diferentes escenarios de arranque, pero en este caso estoy limitado al núcleo de ARM.¿Cómo detectar el arranque en frío frente al inicio en caliente en un procesador ARM?
Respuesta
Puede inicializar una variable global en la RAM a un valor que es improbable durante el arranque en frío y verificarlo durante el arranque.
Para los microcontroladores, normalmente, la lógica de reinicio del chip específico proporciona un registro de estado, que indica la fuente del restablecimiento. No sé si eso existe para este núcleo más grande, y si podrías usar eso.
Es probable que sea difícil, y tal vez no se refiera realmente al núcleo mismo. El núcleo debería haber obtenido un restablecimiento, pero la memoria del exterior (pero quizás todavía dentro del chip) no lo hizo. si la memoria está basada dram, entonces aún puede borrarse en el arranque. No sé de una respuesta genérica de talla única. Sin embargo, tanto tú como Starblue lo tienen, tienes que buscar un registro en algún lugar que no esté borrado en un restablecimiento, configurarlo para algo que "probablemente" no ocurra al azar en un encendido. léelo y luego configúralo. piensa que los fpga o los pld que administran la lógica de reinicio en el nivel de la placa (si hay alguno) son los mejores porque en un restablecimiento de encendido también se reinician, y en un reinicio en caliente son los que lo causaron y mantienen su estado .
explore el TRM para su núcleo oa través de la especificación de registro del chip, y vea si hay registros cuyo estado de restablecimiento no está definido, uno que normalmente no usa y que no dañará el chip si lo configura en algo , y ver a qué se debe eso, ahí es donde empezaría a buscar.
Compruebe los documentos para su chip específico ("ARM968" no es lo suficientemente específico). Debería haber un registro que describa la causa del reinicio. P.ej. esto es lo que LPC23xx tiene:
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. Comparación del arranque en frío con el arranque en caliente
- 2. ¿Cómo manejo un esquema de URL personalizado en PhoneGap para un inicio en frío?
- 3. gestor de arranque - conmutando el procesador al modo protegido
- 4. Contra ataques de arranque en frío: cómo restringir la información confidencial en Haskell
- 5. Cómo simular un reinicio en Win7 para probar el tiempo de inicio en frío de la aplicación
- 6. ¿Cómo configuro un punto de interrupción de software en un procesador ARM?
- 7. Una aplicación .NET 4.0 de 110 kb necesita 10 segundos para un arranque en frío, ¡eso no es aceptable!
- 8. ¿Cómo encontrar la versión del procesador ARM en el dispositivo Android?
- 9. Cómo: evitar problemas de inicio en frío con aplicaciones WCF alojadas en IIS
- 10. ¿Cómo creo un trabajador resque automáticamente en el arranque?
- 11. Diferencia entre observable en frío en RX y normal Enumerable
- 12. ¿Qué es la base de datos de AppEngine "tiempo de inicio en frío"?
- 13. implementación en caliente en el embarcadero incrustado
- 14. ¿Cómo detectar la conexión en caliente del monitor en una aplicación win32?
- 15. ARM simulador en Windows
- 16. Establecer Ubuntu Sound Volume en el arranque
- 17. Inicio de Resque en arranque/Reinicio de pasajero
- 18. "Automático" frente a "Automático (Inicio diferido)"
- 19. Código de ejecución en un procesador diferente (ensamblado x86)
- 20. ¿Cómo acelerar el inicio de Powershell en el entorno 4.0?
- 21. Cómo cargar en caliente un espacio de nombre en el archivo guardar en Leiningen REPL
- 22. Operaciones atómicas en ARM
- 23. Intercambio de código en caliente en Erlang
- 24. Android: Hacer inicio de sesión de aplicación en segundo plano en el arranque
- 25. Aplicación de Android Cómo retrasar su inicio de servicio en el arranque del teléfono
- 26. Cómo agregar pestañas al frente en Drupal?
- 27. Recompilación en caliente para C++
- 28. ¿Cómo maximizar Emacs en Windows al inicio?
- 29. Cómo llevar el widget ¿Al frente en Qt?
- 30. ¿Cómo traigo un artículo al frente en wpf?
La memoria RAM puede contener valores durante un tiempo sorprendentemente largo después del apagado. – caf
El enfoque de la variable RAM funcionó. Seccioné una porción de 4 bytes de SRAM para una firma de inicio y la excluí del tamaño de SRAM en las directivas de vinculador, por lo que nada se inicializaría ni sobrescribiría, excepto el código de escritura/verificación de firma. –