Cortex-M4, ¿cómo recuperarse de una falla de lectura de la tabla vectorial en un dispositivo vacío?

Tengo que cargar y ejecutar el firmware en la RAM de un chip Cortex-M4 vacío (en un entorno de fabricación). El chip normalmente espera una tabla de vectores en la dirección 0x0 en flash. Cuando estoy cargando mi firmware en la RAM, la memoria flash del dispositivo está vacía. Mi firmware funciona bien, pero nunca se llama a los controladores de interrupción. Configuro VTOR en mi tabla en RAM (y, por supuesto, está correctamente alineado).

Descubrí que cuando el dispositivo comienza desde el estado vacío:

  • el bit VECTTBL en HFSR está configurado (obviamente no pudo obtener los vectores de 0xFFFFFFFF)
  • VECTPENDING en ICSR es 3 (probablemente falla de bus o falla dura)

Si ya hay algún firmware en flash, mi firmware de fabricación funciona bien e interrumpe el trabajo. Borrar el bit en HFSR no ayuda. Configurar VECTCLRACTIVE o VECTRESET en AIRCR no ayuda.

Pregunta: ¿hay alguna forma controlada por firmware de restablecer la NVIC o borrar el error de lectura de la tabla de vectores?

¿Qué M4? Podría marcar la diferencia.
¿Qué MCU exacto es, para distinguirlo de los miles de MCU diferentes de docenas de fabricantes que tienen un núcleo Cortex-M4?
La CPU es parte de un ASIC. No está disponible comercialmente, pero la parte de la CPU y la memoria se parece a cualquier otro M4 (EFM32, Kinetis, etc.). No hay interruptores de "modo de arranque" o "reasignación de memoria". El problema está completamente contenido dentro del subsistema M4.
¿Qué haces exactamente para borrar el bit VECTTBL? ¿Intentas escribir un 0 allí? Este tipo de bits de estado de falla a menudo requieren que escriba un 1 para borrar el bit a 0.

Respuestas (1)

Esto depende completamente de la implementación del Cortex M4.
El M4 en sí solo puede recuperarse mediante el reinicio del sistema, que reinicia VTOR, por lo que no funciona.

Sin embargo, su chip puede tener un registro como SYSCFG_MEMRMPen el STM32F407. Lo que reasigna la región de arranque estándar a otro lugar.

ingrese la descripción de la imagen aquí

Sé que el LPC43xx de NXP también tiene un registro como este.

Si esto no está disponible, su depurador debe establecer la condición correcta antes de ejecutarse.