Reemplazando el firmware ST-Link por J-Link en las placas de desarrollo de ST

A la hora de iniciarse en el desarrollo de STM32, las placas de desarrollo Nucleo y Discovery de ST son bastante baratas, e incluyen un debugger en la propia placa (ST-Link) bastante aceptable en términos de velocidad y funcionalidad. Para la mayoría de proyectos es más que suficiente, sin embargo, existen en el mercado programadores externos más avanzados. Estos se suelen distinguir en cuanto a velocidad, soporte técnico, interfaces de comunicación, o herramientas añadidas (seguimiento de trazas, análisis de memoria, etc.).

Entre estos programadores, unos de los más conocidos son los J-Link de Segger. Estos programadores tienen un precio algo elevado (salvo la versión EDU, que no permite uso comercial). Sin embargo, cuando se usan para debuggear micros STM32 en las placas de desarrollo, ofrecen un firmware que sustituye el presente en el debugger de estas placas y que aporta la mayoría de funciones de sus programadores. 

jtrace
Programador J-Trace de Segger.

Sobre el ST-Link, aporta sólo algo más de velocidad, pero tiene mucho mejor soporte software. Esto es especialmente interesante cuando se programan algunas versiones de los Cortex M7 (r0p0 y r0p1, como el STM32F746ZG), ya que tiene implementado algunos workarounds que facilitan el debugging de estos cores (info). Por otro lado, cuando se desarrolla sobre FreeRTOS, funciona bastante mejor el soporte de thread awareness en el depurador que el que proporciona OpenOCD. 

Para ponerlo en marcha:

  1. Reemplazar el firmware del ST-Link. En la página de Segger, se puede descargar la herramienta que permite cambiar y restaurar el firmware del ST-Link. En caso de restaurarlo, es conveniente actualizarlo mediante las herramientas de ST a la ´última versión.
  2. Instalar el paquete software de Segger.
  3. Para añadir el soporte a System Workbench:
    1. Añadir el repositorio que aparece aquí a Eclipse e instalar GNU MCU C/C++ J-Link debugging, mediante Help->Install New Software.
    2. En las opciones de Eclipse, en la categoría MCU, ajustar las rutas al paquete software, tanto en la categoría global como workspace (capturas aquí).
  4. Para añadir la configuración de depuración al proyecto:
    1. Crear una nueva en la categoría GDB SEGGER J-Link debugging. En la pestaña Debugger hay que hacer unos cambios:
      1. En Device name añadir el nombre del micro (p.e. STM32F746ZG).
      2. A la hora de depurar, si saltase un fallo al ejecutar gdb –version, buscar manualmente el ejecutable en el cuadro de GDB Client Setup, por el de la toolchain. Un path de ejemplo puede ser C:\Ac6\SystemWorkbench\plugins\fr.ac6.mcu.externaltools.arm-none.win32_1.15.0.201708311556\tools\compiler\bin\arm-none-eabi-gdb.exe
        gdbconf
    2. Lanzarla manualmente (a veces System Workbench tiende a ejecutar la de ST-Link al pulsar F11 o el icono).

debugConf

Como apuntes adicionales, si se usa freeRTOS se puede cargar el plugin de thread awareness añadiendo “-rtos GDBServer/RTOSPlugin_FreeRTOS” al campo  Other options:  en la pestaña Debugger, sección J-Link GDB Server Setup.

thread awareness
Soporte thread awareness en Eclipse.