Recentemente, ao escrever uma biblioteca para o ESP-32, havia a necessidade de detectar impasses, que às vezes ocorriam devido à minha curvatura, o que deu origem à necessidade de comprar uma placa de depuração com uma interface JTAG. O que veio disso - leia abaixo do corte.
Aparelhos e materiais
Nosso personagem principal, ou melhor, o objetivo da depuração:

Placa baseada no chip ESP-WROOM-32. Não vou dar um link, porque nesse local tudo já foi comprado.
Agora - a própria placa de depuração:


CJMCU FT232H
Eu não me incomodei e pedi no aliexpress por 740,08 rublos. com entrega ePacket. A taxa vem com pernas soldadas, o que é apenas uma mão, pois não precisamos delas.
Um conjunto de fios, 6 peças: uma extremidade à solda e a outra à ESP-32.
Eu também recomendo um cabo de extensão USB, sem ele será apertado ...
Computador com (X) Ubuntu 18.04.
Personalização
Instale o OpenOCD para ESP-32
Aqui você pode consultar com segurança as docas do próprio 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
Observo separadamente que instalei esta versão do OpenOCD no sistema ( sudo make install
), o que é inaceitável quando você tem OpenOCDs diferentes para dispositivos diferentes.
Personalizando o OpenOCD para nós
Neste ponto, eu dividi a configuração do cartão de depuração e do próprio ESP-32. Aconteceu assim:
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
Escrevendo uma regra Udev
Devido a problemas de direitos, não poderemos acessar o dispositivo USB. Isso pode ser corrigido com uma linha da regra do 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 auxiliar
Entre outras coisas, um script como este é muito conveniente:
openocd_command:
Isso permitirá que você envie rapidamente comandos diretamente para o daemon OpenOCD. Mas mais sobre isso mais tarde.
Conectamos a placa CJMCU ao ESP-32
Aqui precisamos de fios e um ferro de soldar, sem isso de forma alguma. A tabela abaixo mostra a que se conectar e por quê.
Sobre o VIN e 3V3
Se você não deseja puxar um fio separado do computador para o ESP-32 devkit, poderá conectar + 5V ao VIN. O firmware passará pelo JTAG, que, como demonstrou a experiência pessoal, é muito mais rápido. Um ponto negativo dessa opção é que não é possível assistir ao log do UART, mas IMHO, o depurador remove completamente a necessidade dessa ação.
Como observado nos comentários, não é possível fornecer 5V para o próprio ESP-32, apenas para devkits. Se você precisar depurar um chip separado, poderá ligá-lo a partir do próprio conversor CJMCU, conectando + 3.3V a 3V3 no ESP-32. Mas não posso dizer nada sobre se o conversor tem energia suficiente, é melhor usar uma fonte de energia separada. E sim, conectar 5V e 3.3V ao mesmo tempo não vale a pena.
Nesse caso, sempre conecte o GND!
Verificando o OpenOCD
Execute o OpenOCD assim:
openocd -s ' interface.cfg board.cfg' -f interface.cfg -f board.cfg
Se tudo correu bem, eles mostrarão algo assim:
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
Isso sugere que tudo funcionou!
Importante : O processo OpenOCD deve girar o tempo todo enquanto você estiver ocupado com a depuração.
Ativar Eclipse
Há uma série de etapas que são lindamente descritas na documentação oficial , e eu não as repetirei.
Dicas de Depuração do Eclipse
Esqueça o botão EN e redefina no quadro. Reinicie apenas através de "Terminar e reiniciar".
Para uso de firmware
openocd_command 'program_esp32 _/.bin 0x10000 verify'
Você pode adicionar isso como um destino de construção definindo openocd_command
comando personalizado e insira argumentos (sem aspas) no campo "nome do destino".
Você pode não conseguir o que esperava depois de parar e retomar. Minha biblioteca para tocar som depois disso está tagarelando como louca por causa de piadas com um timer.
Sobre isso, minha experiência atual com este sistema termina. Desejo-lhe uma depuração proveitosa (seremos honestos, não é agradável)!