Hice una placa con un STM32F031 y la conecté al ST-Link integrado en un STM32F4-DISCOVERY. Hasta este punto pude darme cuenta de que la conexión SWD funciona, si suministro un voltaje de < 2.9V a través de una fuente de alimentación externa de laboratorio. Todo lo anterior rompe la comunicación, pero vuelve tan pronto como baje nuevamente a 2.9V.
Debo confesar que no hice el desacoplamiento adecuado del pin VDD (solo 1uF + 100nF) y lo arreglaré de acuerdo con el diseño de referencia STM32F0 para mi próxima revisión.
También conecté un osciloscopio a la línea VDD pero no pude detectar ningún pico significativo. También eliminé todos los componentes relacionados de alguna manera con la línea VDD (LDO, otros chips), por lo que básicamente es solo el STM32 con algunos FET conectados a sus GPIO.
Aquí hay un registro de openocd:
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : clock speed 950 kHz
Info : STLINK v2 JTAG v30 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 2.887324
Info : stm32f0x.cpu: hardware has 4 breakpoints, 2 watchpoints
Info : Listening on port 3333 for gdb connections
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f0x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 100ms
El error, como mencioné anteriormente, ocurre tan pronto como supero los 2.9V en mi PSU. Me parece extraño que tenga esta línea de voltaje objetivo con ~ 2.89V, que está muy cerca de mi umbral de error.
Actualización 1:
Así que escribí un pequeño programa Blinky, lo destellé con SWD mientras el suministro era de 2.9V y luego ejecuté el chip con 5V en su LDO, lo que dio como resultado [email protected], y funciona. Me atrevo a asumir que la tensión de destino no es respetada por el stlink-v2 integrado en la placa Discovery. Ordenó un stand alone, se actualizará.
Actualización 2:
El STlink independiente no trajo ninguna diferencia, por lo que ahora funciona una segunda revisión de la placa con todas las tapas según el diseño de referencia. Aún así, no pude reproducir el error con una placa STM32Ardurino eliminando todas las mayúsculas.