Débogueur de budget pour ESP-32 et sa configuration

Récemment, lors de l'écriture d'une bibliothÚque pour ESP-32, il y avait un besoin d'attraper des blocages, ce qui s'est parfois produit en raison de ma courbure, ce qui a donné lieu à la nécessité d'acheter une carte de débogage avec une interface JTAG. Ce qui en est ressorti - lu sous la coupe.


Appareils et matériaux


Notre personnage principal, ou plutÎt, le but du débogage:



Carte basée sur la puce ESP-WROOM-32. Je ne donnerai pas de lien, car à cet endroit tout a déjà été acheté.


Maintenant - la carte de dĂ©bogage elle-mĂȘme:




CJMCU FT232H


Je n'ai pas pris la peine et commandé sur aliexpress pour 740,08 roubles. avec livraison ePacket. Les frais sont livrés avec des jambes soudées, ce qui n'est qu'à portée de main, car nous n'en avons pas besoin.


Un ensemble de fils, 6 piÚces: une extrémité à souder, l'autre à ESP-32.


Je recommande également fortement une rallonge USB, sans laquelle elle sera serrée ...


Ordinateur avec (X) Ubuntu 18.04.


Personnalisation


Installer OpenOCD pour ESP-32


Ici, vous pouvez vous rĂ©fĂ©rer en toute sĂ©curitĂ© aux quais de esp-idf lui-mĂȘme:


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 

Je note séparément que j'ai installé cette version d'OpenOCD dans le systÚme ( sudo make install ), ce qui est inacceptable lorsque vous avez différents OpenOCD pour différents appareils.


Personnaliser OpenOCD pour nous


À ce stade, j'ai divisĂ© la configuration de la carte de dĂ©bogage et l'ESP-32 lui-mĂȘme. Il s'est avĂ©rĂ© comme ceci:
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 

Écrire une rùgle Udev


En raison de problĂšmes de droits, nous ne pourrons pas accĂ©der au pĂ©riphĂ©rique USB. Cela peut ĂȘtre corrigĂ© avec une ligne de la rĂšgle 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 

Script d'aide


Entre autres choses, un script comme celui-ci est trĂšs pratique:


openocd_command:


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

Il vous permettra d'envoyer rapidement des commandes directement au démon OpenOCD. Mais plus à ce sujet plus tard.


Nous connectons la carte CJMCU Ă  l'ESP-32


Ici, nous avons besoin de fils et d'un fer à souder, sans cela en aucune façon. Le tableau ci-dessous montre à quoi se connecter et pourquoi.


Contactez CJMCUObjectif de JTAGContactez ESP-32
AD0TCK13
AD1TDI12
AD2TDO15
AD3Tms14
+ 5VVIN (lire en détail!)
+ 3,3 V3V3 (lire en détail!)
GNDGND (tout d'un coup)

À propos de VIN et 3V3


Si vous ne souhaitez pas tirer un cùble séparé de l'ordinateur vers le kit de développement ESP-32, vous pouvez connecter + 5V au VIN. Le firmware passera par JTAG, ce qui, comme l'expérience personnelle l'a montré, est beaucoup plus rapide. Un inconvénient de cette option est qu'il n'est pas possible de regarder le journal UART, mais à mon humble avis le débogueur supprime complÚtement la nécessité de cette action.


Comme indiquĂ© dans les commentaires, il n'est pas possible de fournir 5V Ă  l'ESP-32 lui-mĂȘme, uniquement aux devkits. Si vous devez dĂ©boguer une puce distincte, vous pouvez l'alimenter Ă  partir du convertisseur CJMCU lui-mĂȘme en connectant + 3,3 V sur celle-ci Ă  3 V3 sur l'ESP-32. Mais je ne peux rien dire si le convertisseur a suffisamment de puissance, il vaut mieux prendre une source d'alimentation sĂ©parĂ©e. Et oui, connecter 5V et 3,3V en mĂȘme temps n'en vaut pas la peine.


Dans ce cas, connectez toujours GND!


Vérification d'OpenOCD


Exécutez OpenOCD comme ceci:


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

Si tout s'est bien passé, ils vous montreront quelque chose comme ceci:


 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 

Cela suggÚre que tout a fonctionné!


Important : Le processus OpenOCD doit tourner tout le temps pendant que vous déboguez.


Activer Eclipse


Il y a un certain nombre d'étapes qui sont magnifiquement décrites dans la documentation officielle , et je ne les répéterai pas.


Conseils de débogage Eclipse


  1. Oubliez le bouton EN et réinitialisez sur la carte. Redémarrez uniquement via "Terminer et relancer".


  2. Pour l'utilisation du firmware


     openocd_command 'program_esp32 _/.bin 0x10000 verify' 

    Vous pouvez l'ajouter en tant que cible de openocd_command définissant openocd_command commande personnalisée et entrer des arguments (sans guillemets) dans le champ "nom cible".


  3. Il se peut que vous n'obteniez pas ce que vous attendiez aprĂšs l'arrĂȘt et la reprise. Ma bibliothĂšque pour jouer du son aprĂšs ça bavarde comme un fou Ă  cause des blagues avec une minuterie.



Sur ce, mon expĂ©rience actuelle avec ce systĂšme se termine. Je vous souhaite un dĂ©bogage fructueux (nous serons honnĂȘtes, il ne se trouve pas que ce soit agrĂ©able)!

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


All Articles