สารบัญ:

ESP32 - โซลูชันราคาถูกสำหรับการดีบักวงจร: 5 ขั้นตอน
ESP32 - โซลูชันราคาถูกสำหรับการดีบักวงจร: 5 ขั้นตอน

วีดีโอ: ESP32 - โซลูชันราคาถูกสำหรับการดีบักวงจร: 5 ขั้นตอน

วีดีโอ: ESP32 - โซลูชันราคาถูกสำหรับการดีบักวงจร: 5 ขั้นตอน
วีดีโอ: ESP32 อธิบายเกี่ยวกับ Library / ตัวอย่างการลง Library และวิธีการใช้งาน DHT22 | Arduino#65 2024, พฤศจิกายน
Anonim
ESP32 - โซลูชันราคาถูกสำหรับการดีบักวงจร
ESP32 - โซลูชันราคาถูกสำหรับการดีบักวงจร

สวัสดี ในคำแนะนำนี้อธิบายวิธีการตั้งค่าอะแดปเตอร์ JTAG ราคาถูกโดยใช้ชิป FTDI 2232HL พร้อมรหัสภาพและส่วนเสริม Arduino

- โมดูล FTDI 2232HL พร้อมขั้วต่อ USB เริ่มต้นที่ 8$ บน ebay และไม่มีซอฟต์แวร์ที่ต้องชำระเงิน นี่เป็นทางออกที่ยอดเยี่ยมสำหรับผู้ที่ชื่นชอบงานอดิเรกที่ไม่ต้องการจ่าย 50$+ กับอแดปเตอร์ JTAG แบบมืออาชีพ

- อะแดปเตอร์นี้สามารถใช้สำหรับการดีบักของแพลตฟอร์มอื่น ๆ เช่น ESP8266, ARM, AVR และอื่น ๆ อีกมากมาย การกำหนดค่าบางอย่างขึ้นอยู่กับแพลตฟอร์มเป้าหมาย คำแนะนำนี้ครอบคลุมเฉพาะการตั้งค่าสำหรับ ESP32

- หากคุณเป็นเจ้าของอแด็ปเตอร์ JTAG อยู่แล้ว คุณสามารถใช้มันเมื่อได้รับการสนับสนุนโดย openOCD เพียงแค่เริ่ม openocd ด้วยไฟล์คอนฟิกูเรชันที่แตกต่างกันตามประเภทของอแดปเตอร์ jtag ของคุณ

- platform.io สามารถทำให้การตั้งค่าของคุณง่ายขึ้น แต่การดีบักได้รับการสนับสนุนในเวอร์ชันมืออาชีพที่ต้องชำระเงินเท่านั้น

- ทำงานร่วมกับโมดูล ESP32 ส่วนใหญ่ (เช่น wemos ราคาถูก lolin 32)

- อะแดปเตอร์ jtag นี้ควรใช้งานได้กับ linux เช่นกัน แต่โดยส่วนตัวแล้วฉันไม่ได้ทดสอบ

ขั้นตอนที่ 1: ข้อกำหนดเฉพาะของซอฟต์แวร์

Arduino IDE เวอร์ชัน 1.8 หรือใหม่กว่า ไม่รองรับเวอร์ชันร้านค้า Windows คุณต้องใช้ตัวติดตั้งแบบคลาสสิกซึ่งสามารถดาวน์โหลดได้จากหน้า Arduino อย่างเป็นทางการ

โค้ด Microsoft Visual Studio

ส่วนเสริมเหล่านี้สำหรับรหัส Visual Studio เป็นข้อบังคับ

  • Arduino
  • ดีบักเนทีฟ

ฉันยังแนะนำให้ติดตั้งส่วนเสริมนี้ซึ่งเปิดใช้งาน Intelisense สำหรับ C/C++

C/C++

ในคู่มือนี้ ฉันจะใช้ 2 โฟลเดอร์การทำงาน:

D:\devel\ESP32\tools\ - ที่นี่ฉันได้วางเครื่องมือทั้งหมดแล้ว

C:\Users\xxxx\Documents\Arduino\YourProject\ - นี่คือโฟลเดอร์ที่มีภาพร่าง

คุณสามารถวางไฟล์ของคุณไว้ที่อื่นได้หากต้องการ โปรดอย่าลืมอัปเดตข้อมูลอ้างอิงทั้งหมดด้วยเส้นทางจริงของคุณ

ขั้นตอนที่ 2: การติดตั้งไดรเวอร์และการกำหนดค่า

การติดตั้งไดรเวอร์และการกำหนดค่า
การติดตั้งไดรเวอร์และการกำหนดค่า
การติดตั้งไดรเวอร์และการกำหนดค่า
การติดตั้งไดรเวอร์และการกำหนดค่า
การติดตั้งไดรเวอร์และการกำหนดค่า
การติดตั้งไดรเวอร์และการกำหนดค่า

แม้ว่า windows จะตรวจหา FT2232 โดยอัตโนมัติตามค่าเริ่มต้น ไดรเวอร์เริ่มต้นของ Windows ก็ไม่เพียงพอสำหรับคุณลักษณะขั้นสูงทั้งหมด และจำเป็นต้องดาวน์โหลดและติดตั้งไดรเวอร์จากเว็บไซต์ FTDI

เมื่อติดตั้งไดรเวอร์ที่ถูกต้องแล้ว คุณจะเห็นโมดูล FT2232 ของคุณในตัวจัดการอุปกรณ์ ไม่เพียงแต่เป็นพอร์ตอนุกรม 2 พอร์ต แต่ยังเป็น "ตัวแปลงอนุกรม USB A" และ "ตัวแปลงอนุกรม USB B"

ขั้นตอนที่สองคือเปลี่ยนไดรเวอร์สำหรับหนึ่งช่องสัญญาณของตัวแปลงของเรา ดาวน์โหลดเครื่องมือ zadig จาก https://zadig.akeo.ie/ ถ้าฉันเข้าใจถูกต้องว่าเครื่องมือนี้เชื่อมโยงไดรเวอร์ winUSB กับอุปกรณ์ FTDI ซึ่งเปิดใช้งานการสื่อสารระดับต่ำระหว่างอุปกรณ์ openOCD และ USB

ในเครื่องมือ zadig ในเมนู "ตัวเลือก" ให้เลือก "แสดงอุปกรณ์ทั้งหมด" จากนั้นคุณจะเห็นอะแดปเตอร์ของคุณในรายการอุปกรณ์ที่พร้อมใช้งาน เลือก "Dual RS232-HS (Interface 0)" จากนั้นเลือกไดรเวอร์สำรอง "WinUSB v6.1.xxxx" และคลิกปุ่มแทนที่ไดรเวอร์สุดท้าย

เมื่อคุณเชื่อมต่ออะแดปเตอร์เข้ากับพอร์ต USB อื่นของคอมพิวเตอร์ จำเป็นต้องเปลี่ยนการตั้งค่าไดรเวอร์ผ่านเครื่องมือ zadig อีกครั้ง เนื่องจาก openOCD จะไม่พบอะแดปเตอร์ของคุณ

ขั้นตอนที่ 3: OpenOCD, Toolchain และ Gdb

OpenOCD, Toolchain และ Gdb
OpenOCD, Toolchain และ Gdb

1. Open OCD เป็นเครื่องมือสำหรับการดีบักวงจร โดยด้านหนึ่งจะพูดถึงชิปในอีกด้านหนึ่ง ซึ่งมีเซิร์ฟเวอร์ gdb ที่ตัวดีบั๊ก (ไคลเอ็นต์) สามารถเชื่อมต่อได้ ดาวน์โหลด openOCD สำหรับ ESP32 จาก https://github.com/espressif/openocd-esp32/releases และแตกไฟล์ลงในโฟลเดอร์ D:\devel\ESP32\tools

2. แก้ไขไฟล์การกำหนดค่า openOCD:

esp-wroom-32.cfg

เส้นทางแบบเต็มไปยังไฟล์นี้คือ:

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

ในไฟล์นี้ คุณสามารถตั้งค่าความเร็วในการสื่อสารโดยเปลี่ยนพารามิเตอร์ "adapter_khz" ตัวอย่างเช่น "adapter_khz 8000" หมายถึง 8Mhz

ค่าเริ่มต้นคือ 20MHz และอาจสูงเกินไปหากคุณใช้สายจัมเปอร์หรือเขียงหั่นขนมที่ยาวกว่า ฉันแนะนำให้เริ่มต้นที่ 1Mhz และหากทุกอย่างเรียบร้อย ให้ไปที่ความเร็วที่สูงขึ้น สำหรับฉัน 8Mhz ทำงานได้อย่างน่าเชื่อถือ

minimodule.cfg

เส้นทางแบบเต็มไปยังไฟล์นี้คือ: D:\devel\ESP32\tools\openocd-esp32\share\openocd\scripts\interface\ftdi\minimodule.cfg

ถ้าฉันเข้าใจถูกต้อง minimodule ของแท้คือบอร์ดเบรกเกินราคาด้วย FT 2232 ที่ผลิตโดย FTDI และความแตกต่างระหว่างโมดูลขนาดเล็กของแท้กับโมดูลราคาถูกหรือชิปเปล่าที่มีจำหน่ายในท้องตลาดคือคำอธิบาย USB เริ่มต้น open OCD กำลังมองหาอะแดปเตอร์ jtag ตามคำอธิบายอุปกรณ์และจำเป็นต้องปรับเลย์เอาต์ของ init ด้วย

โมดูลราคาถูกมีคำอธิบาย "Dual RS232-HS" หากคุณไม่แน่ใจเกี่ยวกับรายละเอียดของอุปกรณ์ของคุณ คุณสามารถตรวจสอบได้ในตัวจัดการอุปกรณ์ -> คุณสมบัติของอุปกรณ์ -> รายละเอียดแท็บ -> ค่าของคุณสมบัติ "Bus รายงานรายละเอียดอุปกรณ์"

เนื้อหาของ minimodule.cfg ควรมีลักษณะเหมือนตัวอย่างด้านล่าง บรรทัดที่ขึ้นต้นด้วย # สามารถลบได้

อินเทอร์เฟซ 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 0x000bsignal ftdi_n0020ST

esp32.cfg

เส้นทางแบบเต็มไปยังไฟล์นี้คือ:

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

ต่อท้าย 2 บรรทัดต่อท้าย esp32.cfg หากไม่มีการปรับเปลี่ยนนี้ การเพิ่มจุดเบรกจะไม่ทำงาน

#แรงเบรกพอยท์ เมื่อเรามีแผนที่หน่วยความจำแล้ว เรายังสามารถอนุญาตซอฟต์แวร์ bps.gdb_breakpoint_override hard

3. ดาวน์โหลดและติดตั้ง xtensa-esp32-elf toolchain - toolchain นี้มีดีบักเกอร์บรรทัดคำสั่ง (ไคลเอนต์ gdb) ซึ่งมีความสำคัญต่อการดีบักการทำงานจาก IDE แบบกราฟิกใดๆ Bare toolchain สามารถดาวน์โหลดได้จากเว็บไซต์ espressif ส่วน "การตั้งค่าทางเลือก"

ขั้นตอนที่ 4: การเดินสายไฟและการทดสอบครั้งแรก

การเดินสายไฟและการทดสอบครั้งแรก
การเดินสายไฟและการทดสอบครั้งแรก
การเดินสายไฟและการทดสอบครั้งแรก
การเดินสายไฟและการทดสอบครั้งแรก

เชื่อมต่อโมดูล FT2322 กับ ESP ฉันขอแนะนำให้ใช้สายไฟที่สั้นที่สุด หากคุณยังใหม่กับ JTAG อย่าลืมว่า TDI ของอะแดปเตอร์จะไปที่ TDI ของชิป และ TDO ของอะแดปเตอร์จะไปที่ TDO ของชิปด้วย สายข้อมูล JTAG ไม่ถูกข้ามเหมือน Rx/Tx บน uart!

สำหรับการทดสอบต่อไปนี้ ผมขอแนะนำให้อัปโหลดภาพตัวอย่างการกะพริบตาหรือภาพร่างอื่นๆ ซึ่งสามารถระบุได้ว่า CPU ทำงานอยู่หรือไม่โดยไฟ LED กะพริบหรือส่งเสียงบี๊บหรือเขียนไปยังคอนโซลซีเรียล

เริ่ม openOCD โดยทำตามคำสั่ง

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 บอร์ด /esp-wroom-32.cfg

สิ่งนี้จะเริ่มต้น openOCD และหากทุกอย่างเรียบร้อย คุณจะเห็นในเอาต์พุตบรรทัดคำสั่งประกอบด้วยบรรทัดต่อไปนี้:

ข้อมูล: clock speed 8000 kHzInfo: 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) ส่วน: 0x2003 เวอร์ชั่น: 0x1)

กระบวนการ openocd จะฟังบนพอร์ต TCP 3333. ด้วย

เปิดเทอร์มินัลใหม่และเริ่มต้นไคลเอนต์บรรทัดคำสั่ง gdb โดยทำตามcomand

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

รอสักครู่และเมื่อเทอร์มินัล gdb พร้อมเขียนคำสั่งต่อไปนี้ทีละตัว

เป้าหมายระยะไกล:3333mon หยุดรีเซ็ต ดำเนินการต่อ

คำสั่งแรกเปิดการเชื่อมต่อกับเซิร์ฟเวอร์ดีบัก openocd คำสั่งที่สองจะหยุดการทำงานของโปรแกรมบน ESP และ LED ควรหยุดกะพริบ เรียกคืนการทำงานของโปรแกรมต่อไป และ LED ควรเริ่มกะพริบอีกครั้ง

ขั้นตอนที่ 5: เพิ่มการกำหนดค่าการดีบักให้กับ Visual Studio Code

เพิ่มการกำหนดค่าดีบักให้กับ Visual Studio Code
เพิ่มการกำหนดค่าดีบักให้กับ Visual Studio Code

ฉันถือว่า ณ จุดนั้นคุณได้กำหนดค่ารหัส visual studio และ arduino addon อย่างถูกต้องแล้ว และคุณสามารถตรวจสอบและอัปโหลดภาพร่างของคุณไปยังบอร์ดได้ หากไม่เป็นเช่นนั้น โปรดตรวจสอบคำแนะนำวิธีกำหนดค่ารหัส visual studio และ arduino เช่นในหน้านี้

ในการรับการดีบักจำเป็นต้องระบุโฟลเดอร์เอาต์พุตของบิลด์ ใต้โฟลเดอร์สเก็ตช์ของคุณจะมีโฟลเดอร์ (ซ่อนอยู่).vscode โดยที่ไฟล์คือ arduino.json เพิ่มในไฟล์นี้บรรทัดต่อไปนี้:

"output": "บิลด์เอาท์พุต/"

เรียกใช้การตรวจสอบหรืออัปโหลดและตรวจสอบโฟลเดอร์สเก็ตช์ของคุณอีกครั้ง ควรมีโฟลเดอร์ BuildOutput ใหม่และภายในไฟล์ที่มีนามสกุล.elf ไฟล์เอลฟ์มีความสำคัญต่อการดีบัก

การตั้งค่าดีบักเกอร์อยู่ในไฟล์ launch.json สร้างไฟล์นี้ด้วยเนื้อหาต่อไปนี้ หรือคุณสามารถคัดลอกไฟล์นี้จากโครงการตัวอย่างที่แนบมา อย่าลืมปรับบรรทัดที่ 26 และกำหนดเส้นทางที่ถูกต้องไปยังไฟล์.elf ของโครงการ

{ // ใช้ IntelliSense เพื่อเรียนรู้เกี่ยวกับแอตทริบิวต์ที่เป็นไปได้ // โฮเวอร์เพื่อดูคำอธิบายของแอตทริบิวต์ที่มีอยู่ // สำหรับข้อมูลเพิ่มเติม โปรดไปที่: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.20", "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" }, { //ตัวแปรไดนามิก "text": "file c:/Users/xxxxx/Documents/Arduino /${workspaceFolderBasename}/BuildOutput/${fileBasename}.elf" //static Variable //"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": }] }

วิธีเริ่มการดีบัก:

  1. ปฏิบัติตามและอัปโหลดภาพร่างของคุณไปยังบอร์ด
  2. เริ่ม openOCD ด้วยพารามิเตอร์
  3. ตั้งเบรกพอยต์ในรหัสที่คุณต้องการ
  4. หลังจากตั้งค่าเบรกพอยต์ทั้งหมดแล้ว ตรวจสอบให้แน่ใจว่าคุณได้เปิดไฟล์.ino หลักของโปรเจ็กต์แล้ว (หรือเส้นทางฮาร์ดโค้ดไปยังไฟล์.elf ใน launch.json)
  5. เปิดแผงดีบักในโค้ด vs (Ctrl + Shift + D)
  6. เลือกดีบักเกอร์ "Arduino-GDB-openOCD" ควรใช้งานได้เท่านั้น
  7. กด F5 เพื่อเริ่มการดีบัก

แนะนำ: