Depurador de presupuesto para ESP-32 y su configuración

Recientemente, al escribir una biblioteca para ESP-32, era necesario atrapar puntos muertos, lo que a veces ocurría debido a mi curvatura, lo que dio lugar a la necesidad de comprar una placa de depuración con una interfaz JTAG. Lo que surgió de esto: leer debajo del corte


Dispositivos y materiales


Nuestro personaje principal, o más bien, el objetivo de la depuración:



Placa basada en el chip ESP-WROOM-32. No daré un enlace, porque en ese lugar ya se ha comprado todo.


Ahora, la propia placa de depuración:




CJMCU FT232H


No me molesté y ordené en aliexpress por 740.08 rublos. con entrega de ePacket. La tarifa viene con patas soldadas, que están a la mano, ya que no las necesitamos.


Un conjunto de cables, 6 piezas: un extremo para soldar y el otro para ESP-32.


También recomiendo un cable de extensión USB, sin él será apretado ...


Computadora con (X) Ubuntu 18.04.


Personalización


Instale OpenOCD para ESP-32


Aquí puede consultar con seguridad los muelles de esp-idf:


sudo apt-get install make libtool pkg-config autoconf automake texinfo libusb-1.0 libftdi1-2 git git clone --recursive https://github.com/espressif/openocd-esp32.git #     https://github.com/espressif/openocd-esp32/releases cd openocd-esp32 ./bootstrap ./configure # ,  FTDI-based adapters  make -j6 sudo make install 

Noto por separado que instalé esta versión de OpenOCD en el sistema ( sudo make install ), lo cual es inaceptable cuando tienes diferentes OpenOCD para diferentes dispositivos.


Personalizando OpenOCD para nosotros


En este punto, dividí la configuración para la tarjeta de depuración y el ESP-32 en sí. Resultó así:
board.cfg:


 transport select jtag adapter_khz 20000 #     # set ESP32_ONLYCPU 1 #    # set ESP32_RTOS none #   RTOS source [find target/esp32.cfg] 

interface.cfg:


 interface ftdi ftdi_vid_pid 0x0403 0x6014 ftdi_layout_init 0x0c08 0x0f1b 

Escribir una regla Udev


Debido a problemas de derechos, no podremos acceder al dispositivo USB. Esto se puede solucionar con una línea de la regla udev:


 echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="6014", GROUP="plugdev", MODE="0666"' | sudo tee /etc/udev/rules.d/99-JTAG.rules sudo systemctl restart udev.service sudo udevadm control --reload-rules 

Guión de ayuda


Entre otras cosas, un script como este es muy conveniente:


openocd_command:


 #!/bin/bash echo "$@" | telnet localhost 4444 

Le permitirá enviar rápidamente comandos directamente al demonio OpenOCD. Pero más sobre eso más tarde.


Conectamos la placa CJMCU al ESP-32


Aquí necesitamos cables y un soldador, sin esto de ninguna manera. La siguiente tabla muestra a qué conectarse y por qué.


Póngase en contacto con CJMCUPropósito de JTAGPóngase en contacto con ESP-32
AD0TCK13
AD1TDI12
AD2TDO15
AD3Tms14
+ 5VVIN (¡lea en detalle!)
+ 3.3V3V3 (¡lea en detalle!)
GNDGND (de repente)

Sobre VIN y 3V3


Si no desea tirar de un cable separado de la computadora al dispositivo ESP-32, puede conectar + 5V al VIN. El firmware pasará por JTAG, que, como ha demostrado la experiencia personal, es mucho más rápido. Una desventaja de esta opción es que no es posible ver el registro UART, pero en mi humilde opinión, el depurador elimina por completo la necesidad de esta acción.


Como se señaló en los comentarios, no es posible suministrar 5V al ESP-32 en sí, solo a los devkits. Si necesita depurar un chip separado, puede alimentarlo desde el convertidor CJMCU conectando + 3.3V a 3V3 en el ESP-32. Pero no puedo decir nada sobre si el convertidor tiene suficiente potencia, es mejor tomar una fuente de alimentación separada. Y sí, no vale la pena conectar 5V y 3.3V al mismo tiempo.


En este caso, ¡siempre conecta GND!


Comprobación de OpenOCD


Ejecute OpenOCD así:


 openocd -s '   interface.cfg  board.cfg' -f interface.cfg -f board.cfg 

Si todo salió bien, te mostrarán algo como esto:


 Open On-Chip Debugger 0.10.0-dev (2018-08-22-14:47) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html adapter speed: 20000 kHz esp32 interrupt mask on Info : ftdi: if you experience problems at higher adapter clocks, try the command "ftdi_tdo_sample_edge falling" Info : clock speed 20000 kHz Info : JTAG tap: esp32.cpu0 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1) Info : JTAG tap: esp32.cpu1 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1) Info : esp32: Debug controller was reset (pwrstat=0x5F, after clear 0x0F). Info : esp32: Core was reset (pwrstat=0x5F, after clear 0x0F). Info : Detected debug stubs @ 3ffb3134 on core0 of target 'esp32' cpu0: Current bits set: BreakIn BreakOut RunStallIn cpu1: Current bits set: BreakIn BreakOut RunStallIn 

¡Esto sugiere que todo funcionó!


Importante : El proceso OpenOCD debe girar todo el tiempo mientras está ocupado depurando.


Habilitar Eclipse


Hay una serie de pasos que están bellamente descritos en la documentación oficial , y no los repetiré.


Consejos de depuración de Eclipse


  1. Olvídate del botón EN y reinícialo en el tablero. Reinicie solo a través de "Terminar y relanzar".


  2. Para uso de firmware


     openocd_command 'program_esp32 _/.bin 0x10000 verify' 

    Puede agregar esto como un destino de openocd_command configurando openocd_command comando personalizado e ingresando argumentos (sin comillas) en el campo "nombre de destino".


  3. Es posible que no obtenga lo que esperaba después de detenerse y reanudar. Mi biblioteca para reproducir sonido después de eso está parloteando como loca por bromas con un temporizador.



En esto termina mi experiencia actual con este sistema. ¡Le deseo una fructífera depuración (seremos honestos, no es agradable)!

Source: https://habr.com/ru/post/es421291/


All Articles