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:
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?
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_MEMRMP
en el STM32F407. Lo que reasigna la región de arranque estándar a otro lugar.
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.
scott seidman
Sólo yo
filo
brahans