El prototipo STM32 no puede conectarse a la PC usando ST-Link/V2 SWD

Diagrama de circuito

Diagrama de circuito

Antecedentes y lo que he intentado.

  • He cableado esta configuración yo mismo usando una nueva MCU STM32F411RC de digikey (en una placa de conexión proto-advantage LQFP-64 a DIP-64).
  • Conecté SWCLK, SWDIO, NRST, GND, MCU_VDD, como se describe en el Manual del usuario de ST-LINK/V2 (UM1075).
  • Enciendo mi prototipo usando el USB, un multímetro confirma que 3.3V está llegando a cada uno de los pares VSS/VDD y pin VBAT.
  • Probé las diversas frecuencias para SWD, así como los diversos modos y modos de reinicio en la GUI de Windows.
  • Mi cableado es tan mínimo como el de este tipo que usa el STM32F030, así que no estoy seguro de cuál es el problema: https://www.newbiehack.com/categories/newbiehack-tutorial-ARM-Video6-GPIOCreatingTheCircuit-nomenu
  • Puedo conectarme usando UART; sin embargo, parece que el programa STM Flash Loader solo brinda la capacidad de cargar la versión 512K, pero tengo la versión 256K.

Mensaje de error

arch:~$ st-util -v99
2016-05-18T12:50:58 DEBUG src/stlink-common.c: stlink current mode: debug (jtag or swd)
2016-05-18T12:50:58 DEBUG src/stlink-common.c: stlink current mode: debug (jtag or swd)
2016-05-18T12:50:58 DEBUG src/stlink-common.c: *** looking up stlink version
2016-05-18T12:50:58 DEBUG src/stlink-common.c: st vid         = 0x0483 (expect 0x0483)
2016-05-18T12:50:58 DEBUG src/stlink-common.c: stlink pid     = 0x3748
2016-05-18T12:50:58 DEBUG src/stlink-common.c: stlink version = 0x2
2016-05-18T12:50:58 DEBUG src/stlink-common.c: jtag version   = 0x19
2016-05-18T12:50:58 DEBUG src/stlink-common.c: swim version   = 0x4
2016-05-18T12:50:58 INFO src/stlink-common.c: Loading device parameters....
2016-05-18T12:50:58 DEBUG src/stlink-common.c: *** stlink_core_id ***
2016-05-18T12:50:58 DEBUG src/stlink-common.c: core_id = 0x00000000
2016-05-18T12:50:58 DEBUG src/stlink-common.c: *** stlink_read_debug32 0 is 0xe0042000
2016-05-18T12:50:58 DEBUG src/stlink-common.c: *** stlink_read_debug32 0 is 0x40015800
2016-05-18T12:50:58 WARN src/stlink-common.c: unknown chip id! 0
2016-05-18T12:50:58 DEBUG src/stlink-common.c: *** stlink_close ***

En Linux, ST-LINK/V2 se detecta, sin embargo, la MCU no.

Windows STM ST-LINK Utility trace.log:
Error (0x16) after target cmd F2 36 04 20 04 E0 00 00 00 00
W at 0xe0042004: 0x00000000
Error (0x12) after target cmd F2 35 04 20 04 E0 00 00 00 00
W at 0xe000edf0: 0xa05f0000
Error (0x12) after target cmd F2 35 F0 ED 00 E0 00 00 5F A0
cErrLog::SetLogTraceOn
STLinkUSBDriver.dll loaded
ST-Link/V2 device detected
Target voltage detected: 3.222947
Driving NRST low
Error getting target IDCODE: if SWD, check SWD connection
Error (4) while initializing ST-Link in SWD mode
ST-Link/V2 device detected
Target voltage detected: 3.221382
Driving NRST low
Error getting target IDCODE: if SWD, check SWD connection
Error (4) while initializing ST-Link in SWD mode
ST-Link/V2 device detected
Target voltage detected: 3.221382
Driving NRST low
Error getting target IDCODE: if SWD, check SWD connection
Error (4) while initializing ST-Link in SWD mode

La GUI de Windows muestra "Error de detección" para "Objetivo" y "Voltaje objetivo", y proporciona el mensaje de error "No se puede conectar al objetivo".

Preguntas

  1. ¿Alguna idea sobre lo que debería probar a continuación o qué podría estar impidiendo que SWD funcione?
  2. Puedo conectarme usando UART, sin embargo, el programa STM Flash Loader detecta el modelo de chip aunque sea un poco incorrecto, solo tengo la versión 512K en el menú desplegable http://i.imgur.com/Zu2c57K.png pero mi chip es la versión 256K , por lo que parece que no puedo usar Flash Loader para cargar un programa. ¿Existen otras herramientas que conozcan el mapa de memoria del chip de 256K y puedan mostrar un binario?

Lo que aún tengo que probar

  1. Coloque una resistencia de 22 ohmios en la línea NRST entre el ST-LINK/V2 y la placa. (AN4488 pág. 42)
  2. Cablee completamente y conecte a tierra todos los demás pines del cabezal ST-LINK/V2 como se muestra en AN4488 pg42, aunque no creo que sea necesario.

Hojas de datos

¿Asegúrate de estar en modo SWD y no en modo JTAG? Básicamente, el procesador simplemente no responde. ¡Probablemente podría recibir el mismo mensaje si su depurador estuviera desconectado del objetivo!
Hola. La utilidad de Linux no parece permitir la selección entre JTAG y SWD, pero como puede ver en la salida, ¿podría estar probando ambos? Probé la utilidad de Windows nuevamente y me aseguré de que el puerto estuviera configurado en modo SWD, también probé varias frecuencias. He agregado la utilidad de Windows trace.log si eso ayuda a diagnosticar el problema.
Tienes UART cableado? Puede probar con la demostración de GUI del cargador de arranque en serie de ST.
Intente reducir la frecuencia SWD. Parece que no está haciendo ninguna conexión con el hardware de destino: IDCODE es lo primero que debe leerse para establecer la conexión, todo lo anterior muestra que el hardware de la sonda parece estar hablando bien. Verifique que también obtenga actividad de reloj y datos en las líneas SWD. Los datos son bidireccionales, pero siempre comienzan con algunos bits enviados desde la sonda.
Eche un vistazo a la hoja de datos, los pines swd necesitan una resistencia pull-up o pull-down.
Gracias por la idea, Sean, probé todas las otras frecuencias y no ayudan a hacer una conexión, ¿qué hardware necesitaría para probar si se envían datos en las líneas? Gracias por la idea, rfkortekaas, sin embargo, los pines SWD se bajan/suben internamente según sea necesario. Me pregunto si dejar todos los otros pines flotando podría estar causando un problema. Gracias por la idea, Marko, intentaré conectar el UART y ver cómo funciona.
¿Está su dispositivo alimentado? Veo que usaste el escudo y no el pin 5 del USB en el esquema, ¿es correcto?
Sí, lo es. Usé el símbolo de tierra para hacer referencia a todo lo que va a tierra, y en el pin 5 del USB puse la etiqueta "GND_OUT". Tengo un LED después de mi regulador de voltaje para saber si pasa la energía, y he medido los pines en la MCU con un multímetro y, de hecho, están encendidos. Gracias.
Pruebe con una resistencia pull-up en la línea NRST, junto con un capacitor de 100 nF a tierra para evitar que las señales ruidosas restablezcan el chip.
Además, conecte una resistencia de 100 M y un condensador de 1 uF entre el blindaje y el pin 5 del USB. Por lo general, el blindaje está flotando y el pin está conectado a tierra. Muchos dispositivos dejan que el escudo flote por completo.
¿Has intentado mirar el manual de referencia RM0383? Sección 23.3.1 Dice que debe comenzar con Jtag, luego pasar a SWD. ¿Podrías probar eso y volver con si eso funciona?
@Dave: esa es una lectura incorrecta. No es necesario "comenzar con JTAG", solo se requieren las señales SWD y una referencia a tierra. Es probable que la primera secuencia enviada aclare el método utilizado para la máquina de estado.
De hecho, tuve un problema con el ST Link y un STM32F4 la semana pasada. Conexiones muy intermitentes que resultaron ser un bucle de tierra con mi conexión serie a USB. Si tiene el UART y el SWD conectados a su computadora, intente eliminar las líneas UART.

Respuestas (1)

Debe separar el pin VDDA (analógico) de los pines VDD (digital). Debe usar L (inductor o perla de ferrita SMD) y C (condensador) entre los pines VDDA y VDD. El condensador debe estar lo más cerca posible del pin VDDA. O use el segundo LDO solo para pines VDDA y VSSA.

Esto es falso y engañoso . Tal separación es necesaria solo si se desea un bajo nivel de ruido en las partes analógicas. No tiene nada que ver con que la interfaz SWD no funcione.