Spisu treści:

ESP32 - tanie rozwiązanie do debugowania obwodów: 5 kroków
ESP32 - tanie rozwiązanie do debugowania obwodów: 5 kroków

Wideo: ESP32 - tanie rozwiązanie do debugowania obwodów: 5 kroków

Wideo: ESP32 - tanie rozwiązanie do debugowania obwodów: 5 kroków
Wideo: Kurs programowania w C i RTOS modułów SoC ESP8266 / ESP32 - wstęp. Historia i podział modułów ESP 2024, Lipiec
Anonim
ESP32 - tanie rozwiązanie do debugowania obwodów
ESP32 - tanie rozwiązanie do debugowania obwodów

Witam, W tej instrukcji jest opisane, jak skonfigurować tani adapter JTAG oparty na układzie FTDI 2232HL, z kodem wizualnym i dodatkiem arduino.

- Moduł FTDI 2232HL ze złączem USB już od 8$ w serwisie eBay i nie jest wymagane płatne oprogramowanie. Jest to świetne rozwiązanie dla hobbystów, którzy nie chcą wydawać 50$+ na profesjonalny adapter JTAG.

- Ten adapter może być używany do debugowania innych platform, takich jak ESP8266, ARM, AVR i wielu innych. Część konfiguracji zależy od platformy docelowej, ta instrukcja obejmuje tylko konfigurację dla ESP32.

- Jeśli posiadasz już jakiś adapter JTAG, możesz go używać, gdy jest obsługiwany przez openOCD, po prostu uruchom openocd z innym plikiem konfiguracyjnym w zależności od typu twojego adaptera jtag.

- platform.io może ułatwić ci konfigurację, ale debugowanie jest obsługiwane tylko w płatnej wersji profesjonalnej.

- Współpracuje z większością modułów ESP32. (na przykład tani wemos lolin 32)

- ten adapter jtag też powinien działać z linuxem, ale osobiście go nie testowałem.

Krok 1: Wymagania oprogramowania

Arduino IDE w wersji 1.8 lub nowszej. Wersja sklepu Windows nie jest obsługiwana. Musisz użyć klasycznej wersji instalatora, którą można pobrać z oficjalnej strony Arduino

Kod Microsoft Visual Studio

Te dodatki do kodu Visual Studio są obowiązkowe

  • Arduino
  • Natywne debugowanie

Polecam również zainstalować ten dodatek, który umożliwia intelisense dla C/C++

C/C++

W tej instrukcji wykorzystam 2 foldery robocze:

D:\devel\ESP32\tools\ - tutaj umieściłem wszystkie narzędzia

C:\Users\xxxxx\Documents\Arduino\YourProject\ - to jest folder ze szkicem

możesz umieścić swoje pliki w dowolnym innym miejscu, jeśli chcesz, tylko nie zapomnij zaktualizować wszystkich odnośników z aktualną ścieżką.

Krok 2: Instalacja i konfiguracja sterownika

Instalacja i konfiguracja sterowników
Instalacja i konfiguracja sterowników
Instalacja i konfiguracja sterowników
Instalacja i konfiguracja sterowników
Instalacja i konfiguracja sterowników
Instalacja i konfiguracja sterowników

Nawet jeśli system Windows domyślnie automatycznie wykrywa FT2232, domyślne sterowniki systemu Windows nie są wystarczające dla wszystkich zaawansowanych funkcji i konieczne jest pobranie i zainstalowanie sterownika ze strony FTDI

Po zainstalowaniu poprawnego sterownika, powinieneś widzieć swój moduł FT2232 w menedżerze urządzeń nie tylko jako 2 porty szeregowe, ale także jako "Konwerter szeregowy USB A" i "Konwerter szeregowy USB B"

Drugim krokiem jest zmiana drivera dla jednego kanału naszego konwertera. Pobierz narzędzie zadig z https://zadig.akeo.ie/. Jeśli dobrze rozumiem to narzędzie łączy sterownik winUSB z urządzeniem FTDI, co umożliwia komunikację na niskim poziomie pomiędzy openOCD a urządzeniem USB.

W narzędziu zadig, w menu "Opcje" zaznacz "Pokaż wszystkie urządzenia", wtedy powinieneś zobaczyć swój adapter na liście dostępnych urządzeń. Wybierz „Dual RS232-HS (Interface 0)”, a następnie wybierz sterownik zastępczy „WinUSB v6.1.xxxx” i na koniec kliknij przycisk wymiany sterownika.

Po podłączeniu adaptera do innego portu USB komputera, konieczna jest ponowna zmiana ustawień sterownika za pomocą narzędzia zadig, w przeciwnym razie openOCD nie znajdzie adaptera.

Krok 3: OpenOCD, Toolchain i Gdb

OpenOCD, Toolchain i Gdb
OpenOCD, Toolchain i Gdb

1. Open OCD to narzędzie do debugowania obwodów, z jednej strony komunikuje się z chipem, a z drugiej zapewnia serwer gdb, z którym może się połączyć debugger (klient). Pobierz openOCD dla ESP32 z https://github.com/espressif/openocd-esp32/releases i rozpakuj do folderu D:\devel\ESP32\tools

2. edytuj pliki konfiguracyjne openOCD:

esp-wroom-32.cfg

Pełna ścieżka do tego pliku to:

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

W tym pliku możesz ustawić prędkość komunikacji poprzez zmianę parametru "adapter_khz". Na przykład „adapter_khz 8000” oznacza 8 MHz.

Domyślnie jest to 20 MHz i może być zbyt wysokie, jeśli używasz dłuższych przewodów połączeniowych lub płytki stykowej. Polecam zacząć od 1Mhz i jeśli wszystko jest ok to przejść na wyższą prędkość, u mnie 8Mhz działa niezawodnie.

minimoduł.cfg

Pełna ścieżka do tego pliku to: D:\devel\ESP32\tools\openocd-esp32\share\openocd\scripts\interface\ftdi\minimodule.cfg

Jeśli dobrze rozumiem, oryginalny minimoduł to przeceniony układ hamulcowy z układem FT 2232 firmy FTDI i jedyną różnicą pomiędzy oryginalnym minimodułem a tanim modułem lub gołym chipem dostępnym na rynku jest domyślny opis USB. open OCD szuka adaptera jtag na podstawie opisu urządzenia, również układ init wymaga dostosowania.

Tani moduł posiada opis "Dual RS232-HS". Jeśli nie masz pewności co do opisu swojego urządzenia, możesz to sprawdzić w Menedżerze urządzeń -> Właściwości urządzenia -> Szczegóły zakładki -> wartość właściwości "Opis urządzenia zgłaszany przez magistralę"

Zawartość minimodule.cfg powinna wyglądać jak na poniższym przykładzie, wiersze zaczynające się od # można usunąć.

interfejs ftdi#ftdi_device_desc "FT2232H MiniModule" ftdi_device_desc "Podwójny RS232-HS" ftdi_vid_pid 0x0403 0x6010 #ftdi_layout_init 0x0018 0x05fb ftdi_layout_init 0x0008 0x000b -dataal 0xnlayout

esp32.cfg

Pełna ścieżka do tego pliku to:

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

Dołącz następujące 2 wiersze na końcu pliku esp32.cfg. Bez tej modyfikacji dodawanie punktów hamowania nie zadziała.

#Force hw breakpoints. Gdy mamy już mapę pamięci, możemy również zezwolić na oprogramowanie bps.gdb_breakpoint_override hard

3. Pobierz i zainstaluj xtensa-esp32-elf toolchain - ten toolchain zawiera debugger wiersza poleceń (klient gdb), który jest niezbędny do działania debugowania z dowolnego graficznego IDE. Bare toolchain można pobrać ze strony espressif, sekcja „Alternative setup”

Krok 4: Okablowanie i pierwszy test

Okablowanie i pierwszy test
Okablowanie i pierwszy test
Okablowanie i pierwszy test
Okablowanie i pierwszy test

Połącz moduł FT2322 z ESP. Polecam używać jak najkrótszych przewodów. Jeśli jesteś nowy w JTAG, nie zapomnij, że TDI adaptera przejdzie do TDI chipa, również TDO adaptera przejdzie do TDO chipa. Linie danych JTAG NIE SĄ SKRZYŻOWANE jak Rx/Tx na uart!

Do poniższego testu zalecam załadowanie przykładowego szkicu migającego lub innego szkicu, który może wskazywać, kiedy procesor jest uruchomiony, czy nie poprzez miganie diody LED, sygnał dźwiękowy lub zapis do konsoli szeregowej.

Uruchom openOCD, wykonując polecenie

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

Spowoduje to uruchomienie openOCD i jeśli wszystko jest w porządku, powinieneś zobaczyć w wierszu poleceń dane wyjściowe zawierające następujące wiersze:

Info: taktowanie 8000 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 (rysunek: 0x272 (Tensilica), część: 0x2003, wersja: 0x1)

Również proces openocd będzie nasłuchiwał na porcie TCP 3333

Otwórz nowy terminal i uruchom klienta gdb wiersza poleceń, wykonując polecenie

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

Poczekaj chwilę, a kiedy terminal gdb będzie gotowy, napisz kolejno następujące polecenia

Pilot docelowy: reset 3333mon, zatrzymaj się, kontynuuj!

pierwsze polecenie otwiera połączenie z serwerem debugowania openocd, drugie zatrzyma wykonywanie programu na ESP i dioda LED powinna przestać migać, kontynuuj przywracanie wykonywania programu, a dioda LED powinna ponownie zacząć migać.

Krok 5: Dodaj konfigurację debugowania do kodu programu Visual Studio

Dodaj konfigurację debugowania do kodu programu Visual Studio
Dodaj konfigurację debugowania do kodu programu Visual Studio

Zakładam, że w tym momencie masz już poprawnie skonfigurowany kod Visual Studio i dodatek arduino i możesz zweryfikować i przesłać swój szkic na tablicę. Jeśli nie, sprawdź instrukcję jak skonfigurować kod Visual Studio i arduino, na przykład na tej stronie

Aby uruchomić debugowanie, konieczne jest określenie folderu wyjściowego kompilacji. Pod folderem szkicu znajduje się (ukryty) folder.vscode, gdzie znajduje się plik arduino.json. dodaj do tego pliku następujący wiersz:

"wyjście": "BuildOutput/"

uruchom weryfikację lub prześlij i ponownie sprawdź folder szkicu, powinien pojawić się nowy folder BuildOutput, a w nim plik z rozszerzeniem.elf. plik elf jest niezbędny do debugowania.

Ustawienia debugera znajdują się w pliku launch.json. Utwórz ten plik z następującą zawartością lub skopiuj ten plik z załączonego przykładowego projektu. Nie zapomnij dostosować linii 26 i zdefiniować poprawną ścieżkę do pliku.elf projektu.

{ // Użyj technologii IntelliSense, aby poznać możliwe atrybuty. // Najedź kursorem, aby wyświetlić opisy istniejących atrybutów. // Aby uzyskać więcej informacji, odwiedź: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configuration": [{ "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" }, { //wariant dynamiczny "text": "file c:/Users/xxxxx/Documents/Arduino /${workspaceFolderBasename}/BuildOutput/${fileBasename}.elf" //wariant statyczny //"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": }] }

Jak rozpocząć debugowanie:

  1. Przestrzegaj i prześlij swój szkic na tablicę
  2. Uruchom openOCD z parametrami
  3. Ustaw punkty hamowania w kodzie tam, gdzie chcesz
  4. Po ustawieniu wszystkich punktów hamowania upewnij się, że otworzyłeś główny plik.ino projektu. (lub sztywna ścieżka do pliku.elf w launch.json)
  5. Otwórz panel debugowania w kodzie vs (Ctrl + Shift + D)
  6. Wybierz debugger "Arduino-GDB-openOCD", powinien być dostępny tylko.
  7. Naciśnij F5, aby rozpocząć debugowanie

Zalecana: