مصحح الميزانية ESP-32 وتكوينه

في الآونة الأخيرة ، عند كتابة مكتبة لـ ESP-32 ، كانت هناك حاجة للخروج من الطريق المسدود ، والذي يحدث في بعض الأحيان بسبب انحنائي ، مما أدى إلى الحاجة إلى شراء لوحة تصحيح مع واجهة JTAG. ما جاء منها - اقرأ تحت القطع.


الأجهزة والمواد


شخصيتنا الرئيسية ، أو بالأحرى هدف تصحيح الأخطاء:



تعتمد اللوحة على رقاقة ESP-WROOM-32. لن أعطي رابطًا ، لأنه في هذا المكان تم شراء كل شيء بالفعل.


الآن - لوحة التصحيح نفسها:




CJMCU FT232H


لم أزعج وأمر على aliexpress ل 740.08 روبل. مع تسليم ePacket. تأتي الرسوم مع أرجل ملحومة ، وهي في متناول اليد فقط ، لأننا لسنا بحاجة إليها.


مجموعة أسلاك ، 6 قطع: أحد طرفي اللحام ، والآخر إلى ESP-32.


أوصي بشدة باستخدام كابل تمديد USB ، بدونه سيكون ضيقًا ...


كمبيوتر مع (X) أوبونتو 18.04.


التخصيص


قم بتثبيت OpenOCD لـ ESP-32


هنا يمكنك الرجوع بأمان إلى أرصفة 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 

ألاحظ بشكل منفصل أنني قمت بتثبيت هذا الإصدار من OpenOCD في النظام ( sudo make install ) ، وهو أمر غير مقبول عندما يكون لديك OpenOCDs مختلفة لأجهزة مختلفة.


تخصيص OpenOCD لنا


عند هذه النقطة ، قمت بتقسيم التكوين لبطاقة التصحيح و ESP-32 نفسها. اتضح مثل هذا:
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 

كتابة قاعدة Udev


بسبب مشاكل في الحقوق ، لن نتمكن من الوصول إلى جهاز USB. يمكن إصلاح ذلك بسطر واحد من قاعدة 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 

البرنامج النصي المساعد


من بين أمور أخرى ، يعد مثل هذا البرنامج النصي مناسبًا جدًا:


openocd_command:


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

سيسمح لك بإرسال الأوامر مباشرة إلى البرنامج الخفي لـ OpenOCD. لكن المزيد عن ذلك لاحقًا.


نقوم بتوصيل لوحة CJMCU بـ ESP-32


نحن هنا بحاجة إلى أسلاك ومكواة لحام ، دون هذا بأي شكل من الأشكال. يوضح الجدول أدناه ما يجب الاتصال به ولماذا.


الاتصال بـ CJMCUالغرض من JTAGاتصل بـ ESP-32
AD0TCK13
م 1TDI12
م 2TDO15
م 3تمس14
+ 5 فولتVIN (اقرأ بالتفصيل!)
+ 3.3 فولت3V3 (اقرأ بالتفصيل!)
GNDGND (فجأة)

حول VIN و 3 V3


إذا كنت لا ترغب في سحب سلك منفصل من الكمبيوتر إلى devkit ESP-32 ، فيمكنك توصيل + 5 فولت بشبكة VIN. ستمر البرامج الثابتة بـ JTAG ، والتي ، كما أظهرت التجربة الشخصية ، أسرع بكثير. أحد ناقصات هذا الخيار هو أنه من غير الممكن مشاهدة سجل UART ، ولكن IMHO المصحح يزيل تمامًا الحاجة إلى هذا الإجراء.


كما لوحظ في التعليقات ، ليس من الممكن توفير 5V لـ ESP-32 نفسها ، فقط لأجهزة devkits. إذا كنت بحاجة إلى تصحيح شريحة منفصلة ، فيمكنك تشغيلها من محول CJMCU نفسه عن طريق توصيل + 3.3V عليه بـ 3V3 على ESP-32. لكن لا يمكنني قول أي شيء حول ما إذا كان المحول لديه طاقة كافية ، فمن الأفضل أن تأخذ مصدر طاقة منفصل. ونعم ، ربط 5V و 3.3V في نفس الوقت لا يستحق ذلك.


في هذه الحالة ، قم دائمًا بتوصيل GND!


فحص OpenOCD


قم بتشغيل OpenOCD مثل هذا:


 openocd -s '   interface.cfg  board.cfg' -f interface.cfg -f board.cfg 

إذا سار كل شيء على ما يرام ، فسوف يعرضون لك شيئًا مثل هذا:


 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 

هذا يشير إلى أن كل شيء يعمل!


هام : يجب أن تدور عملية OpenOCD طوال الوقت وأنت مشغول في تصحيح الأخطاء.


تمكين الكسوف


هناك عدد من الخطوات التي تم وصفها بشكل جميل في الوثائق الرسمية ، ولن أكررها.


الكسوف نصائح التصحيح


  1. نسيان زر EN وإعادة تعيين على السبورة. إعادة التشغيل فقط من خلال "الإنهاء وإعادة التشغيل".


  2. لاستخدام البرامج الثابتة


     openocd_command 'program_esp32 _/.bin 0x10000 verify' 

    يمكنك إضافة هذا كهدف بناء من خلال تعيين openocd_command أمر مخصص ، وإدخال وسيطات (بدون علامات اقتباس) في حقل "اسم الهدف".


  3. قد لا تحصل على ما كنت تتوقعه بعد التوقف والاستئناف. مكتبتي لتشغيل الصوت بعد ذلك هي ثرثرة مثل الجنون بسبب النكات مع جهاز ضبط الوقت.



على هذا تنتهي تجربتي الحالية مع هذا النظام. أتمنى لك تصحيحًا مثمرًا (سنكون صادقين ، لا يحدث أن يكون لطيفًا)!

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


All Articles