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?