Depurador de orçamento para ESP-32 e sua configuração

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 #     https://github.com/espressif/openocd-esp32/releases cd openocd-esp32 ./bootstrap ./configure # ,  FTDI-based adapters  make -j6 sudo make install 

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:


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

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ê.


Entre em contato com a CJMCUObjetivo JTAGContate o ESP-32
AD0TCK13
AD1TDI12
AD2TDO15
AD3Tms14
+ 5VVIN (leia em detalhes!)
+ 3.3V3V3 (leia em detalhes!)
GNDGND (de repente)

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


  1. Esqueça o botão EN e redefina no quadro. Reinicie apenas através de "Terminar e reiniciar".


  2. 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".


  3. 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)!

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


All Articles