Tabla de contenido:

ESP32 - Solución barata para In Circruit Debug: 5 pasos
ESP32 - Solución barata para In Circruit Debug: 5 pasos

Video: ESP32 - Solución barata para In Circruit Debug: 5 pasos

Video: ESP32 - Solución barata para In Circruit Debug: 5 pasos
Video: ESP32 - DEBUGGING your ESP-IDF code using JTAG [VS CODE] 2024, Mes de julio
Anonim
ESP32 - Solución barata para en Circruit Debug
ESP32 - Solución barata para en Circruit Debug

Hola, En este instructivo se describe cómo configurar un adaptador JTAG barato basado en el chip FTDI 2232HL, con código visual y complemento arduino.

- Módulo FTDI 2232HL con conector USB a partir de 8 $ en ebay y no se requiere software de pago. Esta es una gran solución para los aficionados que no quieren gastar más de 50 $ en un adaptador JTAG profesional.

- Este adaptador podría usarse para depurar otras plataformas como ESP8266, ARM, AVR y muchas otras. Algunas configuraciones dependen de la plataforma de destino, esta instrucción cubre solo la configuración para ESP32.

- Si ya posee algún adaptador JTAG, puede usarlo cuando sea compatible con openOCD, simplemente inicie openocd con un archivo de configuración diferente según el tipo de su adaptador jtag.

- platform.io puede facilitarle la configuración, pero la depuración solo se admite en la versión profesional de pago.

- Funciona con la mayoría de los módulos ESP32. (por ejemplo wemos baratos lolin 32)

- Este adaptador jtag también debería funcionar con Linux, pero yo personalmente no lo probé.

Paso 1: requisitos del software

Arduino IDE versión 1.8 o más reciente. La versión de la tienda de Windows no es compatible. Debe usar la versión clásica del instalador que se puede descargar de la página oficial de Arduino

Código de Microsoft Visual Studio

Estos complementos para el código de Visual Studio son obligatorios

  • Arduino
  • Depuración nativa

También recomiendo instalar este complemento que habilita intelisense para C / C ++

C / C ++

En este manual usaré 2 carpetas de trabajo:

D: / devel / ESP32 / tools / - aquí he colocado todas las herramientas

C: / Users / xxxxx / Documents / Arduino / YourProject / - esta es la carpeta con el boceto

puede colocar sus archivos en cualquier otro lugar si lo desea, pero no olvide actualizar todas las referencias con su ruta real.

Paso 2: instalación y configuración del controlador

Instalación y configuración del controlador
Instalación y configuración del controlador
Instalación y configuración del controlador
Instalación y configuración del controlador
Instalación y configuración del controlador
Instalación y configuración del controlador

Incluso si Windows detecta automáticamente FT2232 de forma predeterminada, los controladores predeterminados de Windows no son suficientes para todas las funciones avanzadas y es necesario descargar e instalar el controlador desde el sitio FTDI

Cuando se instala el controlador correcto, debería ver su módulo FT2232 en el administrador de dispositivos no solo como 2 puertos serie, sino también como "convertidor serie USB A" y "convertidor serie USB B"

El segundo paso es cambiar el controlador de un canal de nuestro convertidor. Descargue la herramienta zadig desde https://zadig.akeo.ie/. Si entiendo correctamente, esta herramienta vincule el controlador winUSB al dispositivo FTDI, lo que permite una comunicación de bajo nivel entre openOCD y el dispositivo USB.

En la herramienta zadig, en el menú "Opciones", marque "Mostrar todos los dispositivos", luego debería ver su adaptador en la lista de dispositivos disponibles. Seleccione "Dual RS232-HS (Interfaz 0)", luego seleccione el controlador de reemplazo "WinUSB v6.1.xxxx" y finalmente haga clic en el botón Reemplazar controlador.

Cuando conecte su adaptador a un puerto USB diferente de su computadora, es necesario cambiar la configuración del controlador a través de la herramienta zadig nuevamente, de lo contrario openOCD no encontrará su adaptador.

Paso 3: OpenOCD, Toolchain y Gdb

OpenOCD, Toolchain y Gdb
OpenOCD, Toolchain y Gdb

1. Open OCD es una herramienta para la depuración en circuito, por un lado habla con el chip y por otro lado proporciona un servidor gdb donde el depurador (cliente) puede conectarse. Descargue openOCD para ESP32 desde https://github.com/espressif/openocd-esp32/releases y descomprímalo en la carpeta D: / devel / ESP32 / tools

2. edite los archivos de configuración de openOCD:

esp-wroom-32.cfg

La ruta completa a este archivo es:

D: / devel / ESP32 / tools / openocd-esp32 / share / openocd / scripts / board / esp-wroom-32.cfg

En este archivo puede configurar la velocidad de comunicación cambiando el parámetro "adapter_khz". Por ejemplo, "adapter_khz 8000" significa 8Mhz.

El valor predeterminado es 20MHz y puede ser demasiado alto si está utilizando cables de puente más largos o una placa de pruebas. Recomiendo comenzar en 1Mhz y si todo está bien, ir a mayor velocidad, para mí 8Mhz funciona de manera confiable.

minimodule.cfg

La ruta completa a este archivo es: D: / devel / ESP32 / tools / openocd-esp32 / share / openocd / scripts / interface / ftdi / minimodule.cfg

Si entiendo correctamente, el minimódulo genuino es una placa de freno con un precio excesivo con FT 2232 fabricado por FTDI y la única diferencia entre el minimódulo genuino y el módulo barato o el chip desnudo disponible en el mercado es la descripción USB predeterminada. open OCD está buscando un adaptador jtag basado en la descripción del dispositivo, también es necesario ajustar el diseño init.

Módulo barato tiene descripción "Dual RS232-HS". Si no está seguro de la descripción de su dispositivo, puede verificarlo en el administrador de dispositivos -> propiedades del dispositivo -> detalles de la pestaña -> valor de la propiedad "Descripción del dispositivo informado por el bus"

El contenido de minimodule.cfg debe verse como el ejemplo siguiente, las líneas que comienzan con # pueden eliminarse.

interfaz ftdi # ftdi_device_desc "FT2232H MiniModule" ftdi_device_desc "Dual RS232-HS" ftdi_vid_pid 0x0403 0x6010 #ftdi_layout_init 0x0018 0x05fb ftdi_layout_init 0x0008 0x000ST ftdi_layout_s20 -ignal nSx00R20

esp32.cfg

La ruta completa a este archivo es:

D: / devel / ESP32 / tools / openocd-esp32 / share / openocd / scripts / target / esp32.cfg

Agregue las siguientes 2 líneas al final de esp32.cfg. Sin esta modificación, agregar puntos de freno no funcionará.

# Forzar puntos de interrupción de hw. Una vez que tenemos un mapa de memoria, también podemos permitir que el software bps.gdb_breakpoint_override sea duro

3. Descargue e instale la cadena de herramientas xtensa-esp32-elf: esta cadena de herramientas contiene un depurador de línea de comandos (cliente gdb) que es vital para que funcione la depuración desde cualquier IDE gráfico. La cadena de herramientas desnuda se puede descargar del sitio espressif, sección "Configuración alternativa"

Paso 4: cableado y primera prueba

Cableado y primera prueba
Cableado y primera prueba
Cableado y primera prueba
Cableado y primera prueba

Conecte el módulo FT2322 con ESP. Recomiendo usar cables tan cortos como sea posible. Si eres nuevo en JTAG, no olvides que el TDI del adaptador irá al TDI del chip, también el TDO del adaptador irá al TDO del chip. ¡Las líneas de datos JTAG NO ESTÁN CRUZADAS como Rx / Tx en uart!

Para la siguiente prueba, recomiendo cargar un boceto de ejemplo de parpadeo o algún otro boceto que pueda indicar cuando la CPU se está ejecutando o no mediante un LED parpadeante o un pitido o escribiendo en la consola serie.

Inicie openOCD siguiendo el comando

D: / devel / ESP32 / tools / openocd-esp32 / bin / openocd.exe-s D: / devel / ESP32 / tools / openocd-esp32 / share / openocd / scripts -f interface / ftdi / minimodule.cfg -f board /esp-wroom-32.cfg

Esto iniciará openOCD y si todo está bien, debería ver que la salida de la línea de comando contiene las siguientes líneas:

Información: velocidad de reloj 8000 kHz Información: JTAG tap: esp32.cpu0 tap / device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1) Información: JTAG tap: esp32.cpu1 tap / device found: 0x120034e5 (mfg: 0x272 (Tensilica), parte: 0x2003, ver: 0x1)

También el proceso openocd escuchará en el puerto TCP 3333

Abra una nueva terminal e inicie el cliente gdb de la línea de comandos siguiendo comand

D: / devel / ESP32 / tools / xtensa-esp32-elf / bin / xtensa-esp32-elf-gdb.exe

Espere un segundo y cuando el terminal gdb esté listo, escriba los siguientes comandos uno por uno

destino remoto: 3333mon reiniciar detener continuar

el primer comando abre la conexión al servidor de depuración de openocd, el segundo detendrá la ejecución del programa en el ESP y el LED debería dejar de parpadear, continuar con la restauración de la ejecución del programa y el LED debería empezar a parpadear de nuevo.

Paso 5: agregar la configuración de depuración al código de Visual Studio

Agregar configuración de depuración al código de Visual Studio
Agregar configuración de depuración al código de Visual Studio

Supongo que en ese momento ya ha configurado el código de estudio visual y el complemento arduino correctamente y puede verificar y cargar su boceto en la placa. De lo contrario, consulte algunas instrucciones sobre cómo configurar el código de estudio visual y arduino, por ejemplo, en esta página

Para que la depuración funcione, es necesario especificar la carpeta de salida de la compilación. Debajo de su carpeta de bocetos hay una carpeta (oculta).vscode, donde está el archivo arduino.json. agregue a este archivo la siguiente línea:

"salida": "BuildOutput /"

ejecute verificar o cargue y verifique su carpeta de bocetos nuevamente, debe haber una nueva carpeta BuildOutput y dentro de ella un archivo con extensión.elf. El archivo elf es vital para la depuración.

La configuración del depurador está en el archivo launch.json. Cree este archivo con el siguiente contenido, o puede copiar este archivo del proyecto de ejemplo adjunto. No olvide ajustar la línea 26 y definir la ruta correcta al archivo.elf de su proyecto.

{// Utilice IntelliSense para conocer los posibles atributos. // Desplácese para ver las descripciones de los atributos existentes. // Para obtener más información, visite: https://go.microsoft.com/fwlink/?linkid=830387 "versión": "0.2.0", "configuraciones": [{"nombre": "Arduino-GDB-openOCD "," type ":" cppdbg "," request ":" launch "," program ":" $ {file} "," cwd ":" $ {workspaceRoot} / BuildOutput / "," MIMode ":" gdb ", "targetArchitecture": "arm", "miDebuggerPath": "D: /devel/ESP32/tools/xtensa-esp32-elf/bin/xtensa-esp32-elf-gdb.exe", "debugServerArgs": "", " customLaunchSetupCommands ": [{" text ":" target remote: 3333 "}, {" text ":" mon reset halt "}, {// variante dinámica" text ":" archivo c: / Users / xxxxx / Documents / Arduino /${workspaceFolderBasename}/BuildOutput/${fileBasename}.elf "// variante estática //" texto ":" archivo c: /Users/xxxxx/Documents/Arduino/YourProject/BuildOutput/YourProject.ino.elf "}, {"text": "flushregs"}, {"text": "thb app_main"}, {"text": "c", "ignoreFailures": true}], "stopAtEntry": true, "serverStarted": "Información \: [w / d \.] *: / hardware "," launchCompleteCommand ":" exec-continue "," filterStderr ": true," args ": }]}

Cómo empezar a depurar:

  1. Cumplir y subir su boceto al tablero
  2. Inicie openOCD con parámetros
  3. Establezca los puntos de freno en el código donde desee
  4. Después de configurar todos los puntos de freno, asegúrese de haber abierto el archivo.ino principal de su proyecto. (o ruta de código duro al archivo.elf en launch.json)
  5. Abrir el panel de depuración en el código vs (Ctrl + Shift + D)
  6. Seleccione el depurador "Arduino-GDB-openOCD", solo debería estar disponible.
  7. Presione F5 para iniciar la depuración

Recomendado: