Al intentar depurar un chip STM32L471RGT6 a través de SWD, encuentro un ACK_FAULT cada vez que envío una solicitud AP para detener el núcleo.
He implementado las siguientes secuencias que funcionan correctamente, obteniendo un ACK_OK para cada solicitud DP / AP relevante:
- Seleccione SW-DP en la interfaz SWJ-DP
- Confirme el valor de IDCODE en el puerto de depuración
- Establezca los bits CxxxPWRUPREQ en el registro CTRL / STATUS y haga valer los ACK respectivos
- Confirme el valor de registro IDR en el AHB-AP
El siguiente paso es detener el núcleo, habilitar el reinicio y restablecer el núcleo para ponerlo en un estado conocido para reprogramar la memoria flash. Cuando envío el comando de detención escribiendo 0xA05F0003 (DBGKEY | C_HALT | C_DEBUGEN) en 0xE000EDF0 (registro DHCSR en AHB-AP), obtengo un ACK_OK.
Pero luego, cuando intento leer el mismo registro para verificar el bit S_HALT, en lugar de un ACK_WAIT o ACK_OK como esperaba, obtengo un ACK_FAULT (0b001 LSB). Reintenté toda la secuencia de inicialización, pero en cambio, leí el registro CTRL / ESTADO en el puerto de depuración inmediatamente después de la solicitud del AP para detener el núcleo, y el indicador STICKYERR está realmente establecido.
¿Alguien sabe por qué esta solicitud de AP está fallando y cómo resolverla?