Sommario:

ESP32 - Soluzione economica per il debug di Circruit: 5 passaggi
ESP32 - Soluzione economica per il debug di Circruit: 5 passaggi

Video: ESP32 - Soluzione economica per il debug di Circruit: 5 passaggi

Video: ESP32 - Soluzione economica per il debug di Circruit: 5 passaggi
Video: Corso per programmare ESP32 2024, Dicembre
Anonim
ESP32 - Soluzione economica per il debug di Circruit
ESP32 - Soluzione economica per il debug di Circruit

Ciao, in questo tutorial viene descritto come configurare un adattatore JTAG economico basato sul chip FTDI 2232HL, con codice visivo e addon arduino.

- Modulo FTDI 2232HL con connettore USB a partire da 8$ su ebay e non è richiesto alcun software a pagamento. Questa è un'ottima soluzione per gli hobbisti che non vogliono spendere 50$+ per tutti gli adattatori JTAG professionali.

- Questo adattatore può essere utilizzato per il debug di altre piattaforme come ESP8266, ARM, AVR e molte altre. Alcune configurazioni dipendono dalla piattaforma di destinazione, questa istruzione copre solo la configurazione per ESP32.

- Se possiedi già un adattatore JTAG, puoi usarlo quando è supportato da openOCD, basta avviare openocd con un file di configurazione diverso in base al tipo del tuo adattatore jtag.

- platform.io può semplificarti la configurazione, ma il debug è supportato solo nella versione professionale a pagamento.

- Funziona con la maggior parte dei moduli ESP32. (ad esempio wemos lolin 32 a buon mercato)

- questo adattatore jtag dovrebbe funzionare anche con linux, ma personalmente non l'ho testato.

Passaggio 1: perquisiti software

Arduino IDE versione 1.8 o successiva. La versione di Windows Store non è supportata. Devi usare la versione classica dell'installer che può essere scaricata dalla pagina ufficiale di Arduino

Codice Microsoft Visual Studio

Questi componenti aggiuntivi per il codice di Visual Studio sono obbligatori

  • Arduino
  • Debug nativo

Consiglio anche di installare questo addon che abilita intelisense per C/C++

C/C++

In questo manuale userò 2 cartelle di lavoro:

D:\devel\ESP32\tools\ - qui ho posizionato tutti gli strumenti

C:\Users\xxxxx\Documents\Arduino\YourProject\ - questa è la cartella con lo schizzo

puoi posizionare i tuoi file altrove se lo desideri, ma per favore non dimenticare di aggiornare tutti i riferimenti con il tuo percorso effettivo.

Passaggio 2: installazione e configurazione del driver

Installazione e configurazione del driver
Installazione e configurazione del driver
Installazione e configurazione del driver
Installazione e configurazione del driver
Installazione e configurazione del driver
Installazione e configurazione del driver

Anche se Windows rileva automaticamente FT2232 per impostazione predefinita, i driver predefiniti di Windows non sono sufficienti per tutte le funzionalità avanzate ed è necessario scaricare e installare il driver dal sito FTDI

Quando è installato il driver corretto, dovresti vedere il tuo modulo FT2232 in Gestione dispositivi non solo come 2 porte seriali ma anche come "USB serial converter A" e "USB serial converter B"

Il secondo passo è cambiare il driver per un canale del nostro convertitore. Scarica lo strumento zadig da https://zadig.akeo.ie/. Se ho capito bene questo strumento collega il driver winUSB al dispositivo FTDI che consente la comunicazione a basso livello tra openOCD e dispositivo USB.

Nello strumento zadig, nel menu "Opzioni" seleziona "Mostra tutti i dispositivi", quindi dovresti vedere il tuo adattatore nell'elenco dei dispositivi disponibili. Selezionare "Dual RS232-HS (Interface 0)", quindi selezionare il driver sostitutivo "WinUSB v6.1.xxxx" e infine fare clic sul pulsante di sostituzione del driver.

Quando si collega l'adattatore a una porta USB diversa del computer, è necessario modificare nuovamente le impostazioni del driver tramite lo strumento zadig, altrimenti openOCD non troverà l'adattatore.

Passaggio 3: OpenOCD, Toolchain e Gdb

OpenOCD, Toolchain e Gdb
OpenOCD, Toolchain e Gdb

1. Open OCD è uno strumento per il debug del circuito, da un lato parla con il chip dall'altro fornisce un server gdb a cui il debugger (client) può connettersi. Scarica openOCD per ESP32 da https://github.com/espressif/openocd-esp32/releases e scompattalo nella cartella D:\devel\ESP32\tools

2. modifica i file di configurazione di openOCD:

esp-wroom-32.cfg

Il percorso completo di questo file è:

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

In questo file è possibile impostare la velocità di comunicazione modificando il parametro "adapter_khz". Ad esempio "adapter_khz 8000" significa 8Mhz.

L'impostazione predefinita è 20 MHz e potrebbe essere troppo alta se si utilizzano cavi jumper o breadboard più lunghi. Consiglio di iniziare a 1Mhz e se tutto va bene, vai a velocità più alte, per me 8Mhz funziona in modo affidabile.

minimodule.cfg

Il percorso completo di questo file è: D:\devel\ESP32\tools\openocd-esp32\share\openocd\scripts\interface\ftdi\minimodule.cfg

Se ho capito bene, il minimodule originale è una scheda di frenata troppo costosa con FT 2232 prodotta da FTDI e l'unica differenza tra minimodule originale e modulo economico o chip nudo disponibile sul mercato è la descrizione USB predefinita. open OCD sta cercando un adattatore jtag in base alla descrizione del dispositivo, anche il layout init deve essere regolato.

Il modulo economico ha la descrizione "Dual RS232-HS". Se non sei sicuro della descrizione del tuo dispositivo, puoi verificarlo in Gestione dispositivi -> proprietà dispositivo -> dettagli scheda -> valore della proprietà "Descrizione dispositivo segnalato dal bus"

Il contenuto di minimodule.cfg dovrebbe essere simile all'esempio seguente, le righe che iniziano con # possono essere eliminate.

interfaccia 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 0x000b ftdi_SR0020

esp32.cfg

Il percorso completo di questo file è:

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

Aggiungi le seguenti 2 righe alla fine di esp32.cfg. Senza questa modifica, l'aggiunta di punti di frenata non funzionerà.

#Forza punti di interruzione hw. Una volta che abbiamo una mappa di memoria, possiamo anche consentire il software bps.gdb_breakpoint_override hard

3. Scarica e installa la toolchain xtensa-esp32-elf: questa toolchain contiene il debugger della riga di comando (client gdb) che è fondamentale per avere un debug funzionante da qualsiasi IDE grafico. La toolchain nuda può essere scaricata dal sito di espressif, sezione "Alternative setup"

Passaggio 4: cablaggio e primo test

Cablaggio e primo test
Cablaggio e primo test
Cablaggio e primo test
Cablaggio e primo test

Collegare il modulo FT2322 con ESP. Raccomando di usare fili il più corti possibile. Se sei nuovo di JTAG, non dimenticare che TDI dell'adattatore andrà a TDI del chip, anche TDO dell'adattatore andrà a TDO del chip. Le linee dati JTAG NON SONO INCROCIATE come Rx/Tx su uart!

Per il seguente test, raccomando di caricare uno schizzo di esempio di lampeggio o qualche altro schizzo che può indicare quando la CPU è in esecuzione o meno facendo lampeggiare il LED o emettendo un segnale acustico o scrivendo sulla console seriale.

Avvia openOCD seguendo il 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

Questo avvierà openOCD e se tutto va bene dovresti vedere che l'output della riga di comando contiene le seguenti righe:

Info: velocità di clock 8000 kHzInfo: JTAG tap: esp32.cpu0 tap/dispositivo trovato: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1) Info: JTAG tap: esp32.cpu1 tap/dispositivo trovato: 0x120034e5 (mfg: 0x272 (Tensilica), parte: 0x2003, ver: 0x1)

Anche il processo openocd ascolterà sulla porta TCP 3333

Apri un nuovo terminale e avvia il client gdb da riga di comando seguendo il comando

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

Aspetta un secondo e quando il terminale gdb sarà pronto scrivi i seguenti comandi uno per uno

target remoto: 3333mon reset stop continua

il primo comando apre la connessione al server di debug openocd, il secondo interrompe l'esecuzione del programma su ESP e il LED dovrebbe smettere di lampeggiare, continuare a ripristinare l'esecuzione del programma e il LED dovrebbe ricominciare a lampeggiare.

Passaggio 5: aggiungere la configurazione di debug al codice di Visual Studio

Aggiungi la configurazione di debug al codice di Visual Studio
Aggiungi la configurazione di debug al codice di Visual Studio

Presumo che a quel punto tu abbia già configurato correttamente il codice di Visual Studio e l'addon di Arduino e che tu possa verificare e caricare il tuo schizzo sulla scheda. In caso contrario, controlla alcune istruzioni su come configurare il codice di Visual Studio e Arduino, ad esempio in questa pagina

Per far funzionare il debug è necessario specificare la cartella di output della build. Sotto la cartella dello schizzo c'è la cartella (nascosta).vscode, dove si trova il file arduino.json. aggiungi a questo file la seguente riga:

"output": "BuildOutput/"

esegui verifica o carica e controlla di nuovo la cartella dello schizzo, dovrebbe esserci una nuova cartella BuildOutput e al suo interno un file con estensione.elf. elf file è vitale per il debug.

Le impostazioni del debugger si trovano nel file launch.json. Crea questo file con il seguente contenuto oppure puoi copiare questo file dal progetto di esempio allegato. Non dimenticare di regolare la riga 26 e definire il percorso corretto per il file.elf del tuo progetto.

{ // Usa IntelliSense per conoscere i possibili attributi. // Passa il mouse per visualizzare le descrizioni degli attributi esistenti. // Per ulteriori informazioni, visitare: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [{ "name": "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 dinamica "text": "file c:/Users/xxxxx/Documents/Arduino /${workspaceFolderBasename}/BuildOutput/${fileBasename}.elf" //variante statica //"text": "file c:/Users/xxxxx/Documents/Arduino/YourProject/BuildOutput/YourProject.ino.elf" }, { "text": "flushregs" }, { "text": "thb app_main" }, { "text": "c", "ignoreFailures": true }], "stopAtEntry": true, "serverStarted": "Info \: [w\d\.]*:\ hardware", "launchCompleteCommand": "exec-continue", "filterStderr": true, "args": }] }

Come avviare il debug:

  1. Compila e carica il tuo schizzo a bordo
  2. Avvia openOCD con i parametri
  3. Imposta i punti di frenata nel codice dove vuoi
  4. Dopo aver impostato tutti i punti di frenata, assicurati di aver aperto il file.ino principale del tuo progetto. (o percorso hardcode al file.elf in launch.json)
  5. Apri il pannello di debug nel codice vs (Ctrl + Maiusc + D)
  6. Seleziona il debugger "Arduino-GDB-openOCD", dovrebbe essere disponibile solo.
  7. Premi F5 per avviare il debug

Consigliato: