Terminación del proceso secundario de OpenOCD: se detectó un dispositivo incorrecto

Configuración

Tengo una placa de evaluación mínima STM32F103C8T6 (ver STM32F103C8T6 ).

Y estoy usando un enlace ST como la imagen de abajo.

Instalé System Workbench para Eclipse. Creé mi propio proyecto (C++, Proyecto vacío, cadenas de herramientas: Ac6 STM 32 MCU GCC), Serie: STM32F1, Mcu: STM32F103C8Tx, Núcleo: ARM Cortex-M3, Paquete: LQFP48, Memoria ram: Tamaño 0x5000, ROM de memoria: tamaño 0x10000 .

Código

El código contiene un archivo system_stm32f10x.c que fue generado (o incluido automáticamente) por el IDE.

El programa compila bien:


  * @file    main.c
  * @author  Ac6
  * @version V1.0
  * @date    01-December-2013
  * @brief   Default main function.
  ******************************************************************************
*/


#include "stm32f10x.h"
#include <stm32f10x_rcc.h>

void delay(int counter)
{
    volatile int i;
    for (i = 0; i < counter * 10000; i++) {}
}

int main(void)
{
    GPIO_InitTypeDef gpio;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

    GPIO_StructInit(&gpio);
    gpio.GPIO_Pin = GPIO_Pin_13;
    gpio.GPIO_Mode = GPIO_Mode_Out_PP;
    gpio.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &gpio);

    GPIO_SetBits(GPIOC, GPIO_Pin_13);

    while (1)
    {
        GPIO_SetBits(GPIOC, GPIO_Pin_13); // LED ON
        delay(400);
        GPIO_ResetBits(GPIOC, GPIO_Pin_13); // LED OFF
        delay(400);
    }
}

Subir por OpenSTM32

Cuando creo una configuración de Ejecutar (sin cambios) y selecciono Ejecutar, aparece el siguiente error (en la consola):

Open On-Chip Debugger 0.10.0-dev-00302-gc211ca5-dirty (2017-07-03-10:41)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
srst_only separate srst_nogate srst_open_drain connect_assert_srst
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 950 kHz
adapter_nsrst_delay: 100
Info : clock speed 950 kHz
Info : STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748
Info : vid/pid are not identical: 0x0483/0x374B 0x0483/0x3748
Info : using stlink api v2
Info : Target voltage: 3.231135
Info : STM32F103C8Tx.cpu: hardware has 6 breakpoints, 4 watchpoints
adapter speed: 950 kHz
Error: timed out while waiting for target halted
TARGET: STM32F103C8Tx.cpu - Not halted
in procedure 'program' 
in procedure 'reset' called at file "embedded:startup.tcl", line 478
in procedure 'ocd_bouncer'

** Unable to reset target **
shutdown command invoked

Conexiones

  • STlink SWDIO pin 2 -> pin 7 de JTAG
  • STlink GND pin 4 GND -> pin 4 de JTAG
  • STlink SWCLK pin 6 -> pin 9 de JTAG
  • USB -> USB (STlink 3.3V pin 8 no conectado, ni todos los demás pines STlink)

Esquemático

ingrese la descripción de la imagen aquí STLink

Archivo de configuración de depuración

# This is an F103C8T6_Simple board with a single STM32F103C8Tx chip
#
# Generated by System Workbench for STM32
# Take care that such file, as generated, may be overridden without any early notice. Please have a look to debug launch configuration setup(s)

source [find interface/stlink.cfg] 

set WORKAREASIZE 0x5000

transport select "hla_swd"

set CHIPNAME STM32F103C8Tx

# Enable debug when in low power modes
set ENABLE_LOW_POWER 1

# Stop Watchdog counters when halt
set STOP_WATCHDOG 1

# STlink Debug clock frequency
set CLOCK_FREQ 4000

# use hardware reset, connect under reset
# connect_assert_srst needed if low power mode application running (WFI...)
reset_config srst_only srst_nogate connect_assert_srst
set CONNECT_UNDER_RESET 1

source [find target/stm32f1x.cfg]

Ejecutar pantalla de configuraciones

ingrese la descripción de la imagen aquí

Actualizar

Podría enviar un programa a través de la utilidad Link, ver más abajo. No veo una luz parpadeante, pero tal vez el programa sea incorrecto.

Sin embargo, esta forma no es muy cómoda (y no veo ningún programa ejecutándose). Además, todavía no puedo depurar de esta manera.

ingrese la descripción de la imagen aquí

Carga/verificación del programa

PROBLEMA RESUELTO

Ver mi respuesta (para ayudar a otros con el problema similar)

Muchas gracias a todos por sus respuestas y numerosos comentarios útiles.

Realmente necesita incluir un esquema de su placa de desarrollo y especificar el nombre o incluir el texto de su script de adaptador openocd.
@ChrisStratton Agregué los esquemas (perdón por la mala imagen, no tengo tan buena luz aquí).
Descargue la herramienta ST-Link Utility y verifique que su ST-Link funcione.
Su hardware no parece usar la línea RST, por lo que necesitaría "reset_config none".
@Turbo Todavía no sé qué significa reset_config, pero esta noche leeré más sobre todos los problemas/manejo de reinicio
@Bence Kaulics ... ese funcionó, incluso puedo cargar (ver capturas de pantalla al final), pero no veo ningún LED parpadeando.
@BenceKaulics... Logré que un LED parpadeara... gracias por tu idea.
@TurboJ Gracias por el buen comentario, lo cambié a reinicio de software (o algo así, y funciona).

Respuestas (4)

Conexiones realizadas: STlink SWDIO pin 2 -> pin 7 de JTAG STlink GND pin 4 GND -> pin 4 de JTAG STlink SWCLK pin 6 -> pin 9 de JTAG STlink 3.3V pin 8 -> pin 2 de JTAG

El restablecimiento no sucede misteriosamente. En realidad, es una conexión directa al pin de reinicio de MCU desde el jtag/swd que falta en su configuración.

editar: Eso estuvo mal. Ver comentario de Chris.

* actualizar *

El restablecimiento de la emulación necesita los parámetros de configuración de openocd correctos, que actualmente están configurados para el restablecimiento del hardware. "srst" tiene que ver con el reinicio del sistema, que no tiene que ver con la emulación. También lea atentamente el manual en github: el autor realiza el reinicio manualmente, presionando el botón de reinicio antes de emitir el comando de reinicio y soltándolo dentro del período de espera del reinicio de openocd.

También eliminar el parámetro "restablecer al conectar" del archivo de configuración puede facilitar las cosas para dicho restablecimiento manual.

Entonces, la solución es reiniciar manualmente o corregir los parámetros para la emulación (si su chip realmente lo tiene; tuve que tachar el texto anterior debido al error conceptual, no sé si su chip lo tiene) o adaptar su stlink restablecer la señal en el tablero.

No necesariamente. Los STM32 también admiten un restablecimiento de comando. Casi la única vez que necesita el reinicio del hardware es si hay un programa cargado que deshabilita (reutiliza) los pines SWD.
Obtuve la información de github.com/rogerclarkmelbourne/Arduino_STM32/wiki/… ... donde también conecté 3.3V del ST Link al JTAG (pin 1) porque no uso USB.
Probablemente no debería intentar alimentar la placa de destino desde el adaptador SWD. Parece destinado a la alimentación USB de 5v, y la alimentación trasera del regulador interno desconocido es algo dudoso.
@ChrisStratton: ahora lo coloco a través de un cable USB, pero aún no funciona (adapto la pregunta).
@MichelKeijzers, mira la actualización.
@Ayhan, ¿a qué manual en GitHub se refiere (para leer)? En el enlace que usé omití algunas partes relacionadas con la terminal (ya que no uso Linux). También creo que echo de menos algunas opciones de configuración de GDB.
@MichelKeijzers, es el enlace de arriba en su comentario (wiki). Busque la palabra "restablecer" en el documento. No entendí por qué no se usa la línea de reinicio.
@Ayhan ... sí, por supuesto (sobre el enlace wiki), perdón por la estúpida pregunta mía. Lo revisaré esta noche (sin saber que podría haber tantos problemas con solo un reinicio ... acostumbrado demasiado a Arduino).
@Ayhan Intenté continuar con el manual de github, sin embargo, es para Unix, por lo que no se pudo hacer la parte de reinicio.
@Ayhan Podría cargar a través de STLink, pero aún no sé si mi programa se ejecuta (al menos no parpadea un LED)
@MichelKeijzers Supongo que ha reiniciado o apagado/encendido la placa después de la programación. La programación parece estar bien. Pero, sobre el programa, cualquier cosa podría estar mal y tal vez todo esté bien, pero el puerto LED está mal. Por lo tanto, la depuración es obligatoria ahora y no ha resuelto el problema de reinicio. esto es doloroso Le aconsejo que use tableros integrados con stlink como stm32f3/4 discovery y mejores tutoriales. Por ejemplo, esto parece ser bueno pero está desactualizado: Embeddedprogrammer.blogspot.com.tr/2012/09/…
@Ayhan... Lo he reiniciado, pero ahora ni siquiera es necesario, estoy probando algunas 'variaciones' de parpadeo y funciona al instante. Es muy bueno poder depurar también (no es posible en un Arduino). Tal vez debería comenzar con el descubrimiento, sin embargo, parece funcionar ahora. Lamento mucho haber tenido que hacer todas estas (en su mayoría) preguntas triviales y espero poder continuar ahora (o tener más preguntas "reales"). Muchas gracias por su ayuda
@Ayhan Y gracias por el enlace... Lo revisaré pronto.
@MichelKeijzers, realmente aprecio que hayas liberado el arduino :-) No tienes que arrepentirte en absoluto, todas estas fueron preguntas válidas y buenas. Me alegro de que hayas resuelto los problemas, sigue así.
@Ayhan... gracias... Encontré un libro, así que de ahora en adelante espero poder encontrar más a través de libros sobre programación, pero con instalación/herramientas, etc. Realmente necesitaba ayuda. Gracias de nuevo.

El problema esta resuelto.

Se soluciona yendo a Ejecutar configuraciones, pestaña Depurador, pestaña Depurador, Configuración de modo, Modo de reinicio: Cambiar a reinicio del sistema de software.

El problema subyacente es que mi STLink es V2, no V2.1 y esto no tiene un reinicio de hardware.

No, su dispositivo tiene una salida de reinicio de hardware en el pin 1, simplemente no lo conectó al objetivo y no necesita hacerlo si usa un reinicio por software.
@ChrisStratton ¿Cuál es el beneficio de un reinicio de hardware? Ya que esto parece funcionar bien.
El reinicio del software no funcionará si los pines SWD se han desactivado. Además del software que hace esto intencionalmente, estos chips parecen llegar ocasionalmente como resultado de una carga de firmware fallida. Afirmar el restablecimiento junto con el establecimiento de la conexión SWD puede ayudar a cortar eso antes de que surta efecto, dejando el control del depurador.
@ChrisStratton No entiendo todo lo que escribiste. Conecté los pines SWD (afik). Noté que a veces el IDE ya no ve el STM32, simplemente desconecto la alimentación USB y lo reinicio y funciona... O presiono el botón RST yo mismo... eso funcionaría lo suficientemente bien para mí.

Parece que su archivo de configuración de OpenOCD tiene un número de ProductID incorrecto. Este número se refiere al adaptador de clonación ST-LINK que está utilizando, no a su microcontrolador específico.

Vea esto desde su consola OpenOCD:

Información: STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748

Información: vid/pid no son idénticos: 0x0483/ 0x374B 0x0483/0x3748

Observe la diferencia que he resaltado. ¡A veces es difícil notar la diferencia entre un 8 y una B!

Dado que los clones de ST-LINK deberían funcionar igual, dudo que este sea tu problema. Pero dejo la información aquí por si a alguien le sirve.

El PID aquí es el del adaptador SWD stlink (clon), no el MCU de destino. Hay varios PID diferentes, en su mayoría funcionan de la misma manera.
No puedo encontrar ninguno de estos números, excepto en el archivo de registro.
@ChrisStratton, Gracias; Claro, tienes razón. Dejaré mi respuesta (después de modificarla) en caso de que ayude a alguien...
@MichelKeijzers Puede encontrar la ubicación del archivo de configuración de OCD mirando la pestaña "Depurador" de la pantalla Ejecutar configuraciones en Eclipse. Hay una "opción de configuración" que parece -f filename.cfg. Es probable que termine en .cfg, pero puede ser diferente. Además, pruébelo con una configuración de depuración en lugar de una configuración de ejecución.
El restablecimiento de comandos no siempre funciona. No sé cuándo, pero a veces no puedo programar y depurar sin él y sin deshabilitar los pines.
@bitsmack... Creo que lo encontré, no pude encontrar el -f pero encontré un archivo de configuración. Lo agregué en la pregunta.
@bitsmack... Creo que no tengo las opciones -f ya que no tengo las opciones de GDB en mis configuraciones de ejecución.
@MichelKeijzers Ha agregado una captura de pantalla de la pestaña "Principal" de la ventana Ejecutar configuraciones. ¿Puedes agregar también una captura de pantalla de la pestaña "Depurador"?
@bitsmack ups... Lo actualicé.
@bitsmack Encontré -f en github pero no puedo ejecutar ese comando ya que está escrito para Linux y tengo Windows.

Para trabajar con chips ARM en Eclipse, yo mismo uso https://gnu-mcu-eclipse.github.io/ .

La configuración para STM32F103C8T6 usando un dispositivo ST-Link usando ese complemento de eclipse sería

-f interface/stlink-v2.cfg -f target/stm32f1x.cfg

El PID 0x374B es para ST-Link V2.1. Los palos chinos son ST-Link V2. Así que ha seleccionado la interfaz de depuración incorrecta. Como usa un complemento de eclipse diferente, no sé dónde y cómo configurarlo, pero eche un vistazo a la interfaz del depurador seleccionado.

Gracias... No pude encontrar la -f pero he cambiado la opción de reinicio de software, ahora parece: # use software system reset reset_config none
Otra cosa, veo que su ST-Link está ejecutando el firmware V17. Recomendaría actualizar el firmware ( st.com/en/embedded-software/stsw-link007.html ) (La actualización funciona bien en clones, tengo una docena de ellos y nunca tuve problemas)
Buen punto y, de hecho, ST Link Utility ya lo mencionó ... Ahora tengo v27: Información: STLINK v2 JTAG v27 API v2 SWIM v6 VID 0x0483 PID 0x3748