Programando un STM32F407 con un Raspberry PI: No hay respuesta en JTDO

0

Introducción

Al estar en contacto por primera vez con un ARM MCU (el STM32F407ZE), estoy tratando de generar un primer "ataque al mundo>" Hola mundo! " parpadeo del led.

Para programar la MCU, parece posible con solo un RaspberryPi conectado directamente a la MCU, a través de JTAG y utilizando OpenOCD.

Los primeros pasos son:

  • Obtención / compilación de OpenOCD en la Raspberry PI (hecho)
  • Cableado del JTAG de la Frambuesa con el STM32F407ZE (no estoy seguro si es correcto)
  • Intentando abrir una comunicación con el chip (error)

El cableado:

Documentación sobre la MCU (p.43 y 47-59)

╔═══════╦══════════╦══════════╦═════════════╗
║ Name  ║ GPIO pin ║ MCU port ║ Cable color ║
╠═══════╬══════════╬══════════╬═════════════╣
║ JTCK  ║ 22       ║ 109      ║ blue        ║
║ JTMS  ║ 13       ║ 105      ║ red         ║
║ JTDI  ║ 37       ║ 110      ║ white       ║  
║ JTDO  ║ 18       ║ 133      ║ green       ║  
║ RSTS  ║ 12       ║ 134      ║ violet      ║  
╚═══════╩══════════╩══════════╩═════════════╝

The GND of the RP2 is connected to the MCU VSS pin 107 (black)
I tried with and without the 3.3V of the RP2 connected to VDD-108 (yellow)

ConfiguracióndeOpenOCD

Laúnicaconfiguraciónquesemodificaesladelaframbuesapi:

  

/usr/local/share/openocd/scripts/interface/raspberrypi2-native.cfg

##ConfigforusingRaspberryPi'sexpansionheader##Thisisbestusedwithafastenoughbufferbutalso#issuitablefordirectconnectionifthetargetvoltage#matchesRPi's3.3Vandthecableisshortenough.##DonotforgettheGNDconnection,pin6oftheexpansionheader.#interfacebcm2835gpiobcm2835gpio_peripheral_base0x3F000000#Transitiondelaycalculation:SPEED_COEFF/khz-SPEED_OFFSET#Thesedependonsystemclock,calibratedforstock700MHz#bcm2835gpio_speedSPEED_COEFFSPEED_OFFSETbcm2835gpio_speed_coeffs14620336#EachoftheJTAGlinesneedagpionumberset:tcktmstditdo#Headerpinnumbers:22133718bcm2835gpio_jtag_nums25272624#EachoftheSWDlinesneedagpionumberset:swclkswdio#Headerpinnumbers:2322#bcm2835gpio_swd_nums1125#Ifyoudefinetrstorsrst,useappropriatereset_config#Headerpinnumbers:TRST-26,SRST-18#bcm2835gpio_trst_num7#reset_configtrst_onlybcm2835gpio_srst_num18reset_configsrst_onlysrst_push_pull#orifyouhavebothconnected,#reset_configtrst_and_srstsrst_push_pull

Usoyresultado

LlamandoaopenOCDconelsiguientecomando:

>sudoopenocd-f./my_raspberrrypi2-native.cfg-ftarget/stm32f4x.cfg

Lasalidaes:

OpenOn-ChipDebugger0.10.0+dev-00410-gf0767a31(2018-05-18-20:15)LicensedunderGNUGPLv2Forbugreports,readhttp://openocd.org/doc/doxygen/bugs.htmlBCM2835GPIOconfig:tck=25,tms=27,tdi=26,tdo=24BCM2835GPIOconfig:srst=18srst_onlyseparatesrst_gates_jtagsrst_push_pullconnect_deassert_srstInfo:auto-selectingfirstavailablesessiontransport"jtag". To override use 'transport select <transport>'.
adapter speed: 2000 kHz
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
srst_only separate srst_nogate srst_push_pull connect_deassert_srst
cortex_m reset_config sysresetreq
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : BCM2835 GPIO JTAG/SWD bitbang driver
Info : JTAG only mode enabled (specify swclk and swdio gpio to add SWD mode)
Info : clock speed 2002 kHz
Error: JTAG scan chain interrogation failed: all zeroes
Error: Check JTAG interface, timings, target power, etc.
Error: Trying to use configured scan chain anyway...
Error: stm32f4x.cpu: IR capture error; saw 0x00 not 0x01
Warn : Bypassing JTAG setup events due to errors
Error: Invalid ACK (0) in DAP response
Error: Invalid ACK (0) in DAP response
... //some removed here
Error: Invalid ACK (0) in DAP response
Error: Invalid ACK (0) in DAP response
in procedure 'init'
in procedure 'ocd_bouncer'

Parece que la pi de frambuesa está enviando, pero la MCU no responde. JTDO, guarda silencio.

Nota: la segunda vista es un zoom en la parte que aparentemente contiene datos.

Pregunta

¿Es aceptable el enfoque para programar el ARM MCU?

¿Por qué no se comunica la MCU a través de JTAG?

    
pregunta Adrian Maire

2 respuestas

1

Primero debe conectar todos los pines VDD en la MCU a 3.3V y todos los pines VSS a GND. El enfoque en general parece razonable.

Si solo está comenzando, le sugiero encarecidamente que obtenga una placa Discovery oraz Nucleo.

    
respondido por el Jan Dorniak
0

Exactamente como lo sugiere @BenVoigt, el circuito mínimo para el STM32F407ZE es un poco más complejo:

En cuanto a la hoja de datos del chip, se aplican los siguientes requisitos:

  • Todos los pines VSS y VSSA deben estar conectados a GND.
  • Todos los VDD, VDDA y VREF deben estar conectados a 3.3V
  • Cada VDD debe tener un capacitor de derivación de 1nF cercano a GND
  • Un solo condensador de bypass de 4.7uF debe conectar cualquier VDD a GND
  • VDDA y VREF deben tener un bypass de 100nF y 1uF en paralelo cerca del pin.
  • VCAP_1 y VCAP_2 deben estar conectados a GND a través de un capacitor (serie) de 2.2uF.

Mi comprensión del esquema:

(Notas: NJTRST = RSTS en la tabla de pines arriba)

simular este circuito : esquema creado usando CircuitLab

Copia del esquema de la especificación (5.1.6 esquema de fuente de alimentación):

Otros problemas:

También descubrí la mala manera en que la especificación del pin en la hoja de datos se gira 90º con respecto a la etiqueta del chip.

Estado actual:

En este momento, todavía me faltan algunos de los componentes para este diagrama. El resultado es que la comunicación es deficiente, e incluso si parece que se comunica aleatoriamente correctamente, también provoca varios errores ACK cada pocos segundos. Esto también podría estar relacionado con los cables largos utilizados en el tablero de pan.

    
respondido por el Adrian Maire

Lea otras preguntas en las etiquetas