Baru-baru ini, ketika menulis perpustakaan untuk ESP-32, ada kebutuhan untuk menangkap kebuntuan, yang kadang-kadang terjadi karena kelengkungan saya, yang memunculkan kebutuhan untuk membeli papan debug dengan antarmuka JTAG. Apa yang terjadi - baca di bawah potongan.
Perangkat dan material
Karakter utama kami, atau lebih tepatnya, tujuan debugging:

Board berbasis pada chip ESP-WROOM-32. Saya tidak akan memberikan tautan, karena di tempat itu semuanya sudah dibeli.
Sekarang - papan debug itu sendiri:


CJMCU FT232H
Saya tidak repot-repot dan memesan di aliexpress untuk 740,08 rubel. dengan pengiriman ePacket. Biaya ini datang dengan kaki yang disolder, yang hanya ada di tangan, karena kita tidak membutuhkannya.
Satu set kabel, 6 pcs .: Satu ujung untuk solder, yang lain ke ESP-32.
Saya juga sangat merekomendasikan kabel ekstensi USB, tanpanya akan ketat ...
Komputer dengan (X) Ubuntu 18.04.
Kustomisasi
Instal OpenOCD untuk ESP-32
Di sini Anda dapat dengan aman merujuk ke dermaga esp-idf itu sendiri:
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
Saya mencatat secara terpisah bahwa saya menginstal versi OpenOCD ini ke dalam sistem ( sudo make install
), yang tidak dapat diterima ketika Anda memiliki OpenOCD yang berbeda untuk perangkat yang berbeda.
Menyesuaikan OpenOCD untuk kami
Pada titik ini, saya membagi konfigurasi untuk kartu debug dan ESP-32 itu sendiri. Ternyata seperti ini:
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
Menulis Aturan Udev
Karena masalah hak, kami tidak akan dapat mengakses perangkat USB. Ini dapat diperbaiki dengan satu baris aturan 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
Skrip pembantu
Antara lain, skrip seperti ini sangat mudah:
openocd_command:
Ini akan memungkinkan Anda untuk dengan cepat mengirim perintah langsung ke daemon OpenOCD. Tetapi lebih lanjut tentang itu nanti.
Kami menghubungkan papan CJMCU ke ESP-32
Di sini kita membutuhkan kabel dan besi solder, tanpa ini dengan cara apa pun. Tabel di bawah ini menunjukkan apa yang harus dihubungkan dan mengapa.
Tentang VIN dan 3V3
Jika Anda tidak ingin menarik kabel terpisah dari komputer ke devkit ESP-32, maka Anda dapat menghubungkan + 5V ke VIN. Firmware akan melalui JTAG, yang, seperti yang ditunjukkan oleh pengalaman pribadi, jauh lebih cepat. Satu minus dari opsi ini adalah bahwa tidak mungkin untuk menonton log UART, tetapi IMHO debugger sepenuhnya menghilangkan kebutuhan untuk tindakan ini.
Seperti disebutkan dalam komentar, tidak mungkin untuk memasok 5V ke ESP-32 itu sendiri, hanya untuk pemasar. Jika Anda perlu men-debug chip yang terpisah, Anda dapat menyalakannya dari konverter CJMCU sendiri dengan menghubungkan + 3.3V di atasnya ke 3V3 pada ESP-32. Tetapi saya tidak dapat mengatakan apa-apa tentang apakah konverter memiliki daya yang cukup, lebih baik untuk mengambil sumber daya yang terpisah. Dan ya, menghubungkan 5V dan 3.3V pada saat yang sama tidak sepadan.
Dalam hal ini, selalu sambungkan GND!
Memeriksa OpenOCD
Jalankan OpenOCD seperti ini:
openocd -s ' interface.cfg board.cfg' -f interface.cfg -f board.cfg
Jika semuanya berjalan dengan baik, mereka akan menunjukkan kepada Anda sesuatu seperti ini:
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
Ini menunjukkan bahwa semuanya berfungsi!
Penting : Proses OpenOCD harus berputar sepanjang waktu saat Anda sibuk melakukan debugging.
Aktifkan Eclipse
Ada beberapa langkah yang dijelaskan dengan indah dalam dokumentasi resmi , dan saya tidak akan mengulanginya.
Kiat Debugging Eclipse
Lupakan tombol EN dan reset di papan tulis. Mulai ulang hanya melalui "Hentikan dan jalankan kembali".
Untuk penggunaan firmware
openocd_command 'program_esp32 _/.bin 0x10000 verify'
Anda dapat menambahkan ini sebagai target bangunan dengan menetapkan openocd_command
perintah khusus, dan memasukkan argumen (tanpa tanda kutip) di bidang "target name".
Anda mungkin tidak mendapatkan apa yang Anda harapkan setelah berhenti dan melanjutkan. Perpustakaan saya untuk memainkan suara setelah itu mengobrol seperti orang gila karena lelucon dengan timer.
Tentang ini pengalaman saya saat ini dengan sistem ini berakhir. Saya berharap Anda berhasil debugging (kami akan jujur, itu tidak menyenangkan)!