用esp prog燒錄ESP32-C3板踩坑

附ESP32C3的GPIO一覽:

esp32-c3-devkitm-1-v1-pinout

vscode選擇Jtag燒錄,終端輸出esp_usb_jtag: could not find or open device:

D:\Devtools\Espressif\tools\openocd-esp32\v0.12.0-esp32-20230921\openocd-esp32\bin\openocd.exe -f board/esp32s3-builtin.cfgOpen On-Chip Debugger v0.12.0-esp32-20230921 (2023-09-21-13:40)
Licensed under GNU GPL v2
For bug reports, readhttp://openocd.org/doc/doxygen/bugs.html
Info : only one transport option; autoselecting 'jtag'
Info : esp_usb_jtag: VID set to 0x303a and PID to 0x1001
Info : esp_usb_jtag: capabilities descriptor set to 0x2000
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Error: esp_usb_jtag: could not find or open device!

按照Configure ESP32-C3 Built-in JTAG Interface嘗試解決,下了驅動:

Invoke-WebRequest 'https://dl.espressif.com/dl/idf-env/idf-env.exe' -OutFile .\idf-env.exe; .\idf-env.exe driver install --espressif

發現仍舊無法燒錄,設備管理器一看沒有相關的jtag unit驅動,只好嘗試改用esp prog。

用esp prog燒錄

參考了:https://blog.csdn.net/Marchtwentytwo/article/details/122071442

首先用espefuse查看芯片配置:

 espefuse.py -p COM7 summary

參考的文章是直接不指定串口執行的,我這邊執行會報找不到串口的錯誤,原因是espefuse是通過串口來識別板子的,建議指定串口。

關于efuse設置可以參考esp官方c3的技術手冊:https://www.espressif.com/sites/default/files/documentation/esp32-c3_technical_reference_manual_cn.pdf#iomuxgpio

我手上的這塊c3版DIS_USB_SERIAL_JTAG已經被置位了,難怪裝驅動時找不到JTAG unit.

espefuse.py v4.7.0
Connecting....
Detecting chip type... ESP32-C3=== Run "summary" command ===
EFUSE_NAME (Block) Description  = [Meaningful Value] [Readable/Writeable] (Hex Value)
----------------------------------------------------------------------------------------
Calibration fuses:
K_RTC_LDO (BLOCK1)                                 BLOCK1 K_RTC_LDO                                   = 4 R/W (0b0000001)
。。。Usb fuses:
DIS_USB_JTAG (BLOCK0)                              Set this bit to disable function of usb switch to  = False R/W (0b0)jtag in module of usb device
DIS_USB_SERIAL_JTAG (BLOCK0)                       USB-Serial-JTAG                                    = Enable R/W (0b0)
USB_EXCHG_PINS (BLOCK0)                            Set this bit to exchange USB D+ and D- pins        = False R/W (0b0)
DIS_USB_SERIAL_JTAG_ROM_PRINT (BLOCK0)             USB printing                                       = Enable R/W (0b0)
DIS_USB_SERIAL_JTAG_DOWNLOAD_MODE (BLOCK0)         Disable UART download mode through USB-Serial-JTAG = False R/W (0b0)Vdd fuses:
VDD_SPI_AS_GPIO (BLOCK0)                           Set this bit to vdd spi pin function as gpio       = False R/W (0b0)Wdt fuses:
WDT_DELAY_SEL (BLOCK0)                             RTC watchdog timeout threshold; in unit of slow cl = 40000 R/W (0b00)ock cycle

esp prog燒錄參考下文:

由于 ESP32-C3 默認選用 內置的 USB_SERIAL_JTAG 外設。此時需要燒錄 efuse 來選擇外接 JTAG 適配器,有以下兩種方式:

燒毀 DIS_USB_JTAG eFuse: 將永久禁用 USB_SERIAL_JTAG 和 CPU 的 JTAG 端口之間的連接。 然后可以將 JTAG 接口連接到 GPIO4 - GPIO7。 請注意,USB_SERIAL_JTAG 的 USB CDC 功能仍然可用,即仍然可以通過 USB CDC 進行燒錄和 log 查看。

燒毀 JTAG_SEL_ENABLE eFuse: 將啟用由 Strapping 引腳 GPIO10 選擇的 JTAG 接口。 如果 ESP32-C3 復位時 Strapping 引腳為低電平,則 JTAG 接口將使用 GPIO4 - GPIO7。 如果 Strapping 引腳為高電平,則 USB_SERIAL_JTAG 將用作 JTAG 接口。

我這邊summary沒有看到JTAG_SEL_ENABLE 選項,看來只能用DIS_USB_JTAG 方法了。

python -m espefuse -p COM7 burn_efuse DIS_USB_JTAGespefuse.py v4.7.0
Connecting....
Detecting chip type... ESP32-C3=== Run "burn_efuse" command ===
The efuses to burn:from BLOCK0- DIS_USB_JTAGBurning efuses:- 'DIS_USB_JTAG' (Set this bit to disable function of usb switch to jtag in module of usb device) 0b0 -> 0b1Check all blocks for burn...
idx, BLOCK_NAME,          Conclusion
[00] BLOCK0               is not empty(written ): 0x000000008000000000000000000000000000000000000000(to write): 0x000000000000000000000000000000000000020000000000(coding scheme = NONE)
.
This is an irreversible operation!
Type 'BURN' (all capitals) to continue.
BURN
BURN BLOCK0  - OK (all write block bits are set)
Reading updated efuses...
Checking efuses...
Successful

燒錄完成后將esp prog連接至esp32c3對應引腳,用vscode的esp-idf擴展打開blink例子,測試燒錄:

idf.py build 
或者
vscode ctrl+e然后b

若出現LIBUSB_ERROR_NOT_xxx錯誤,記得用Zadig將esp prog的對應interface0驅動更新:

jtag-usb-configuration-zadig

經測試,燒錄成功!

然后F5, 測試gdb調試功能,畢竟花費這么久時間和心思用JTAG,不就是為了用gdb嗎?

首先寫好launch.json

{"version": "0.2.0","configurations": [{"name": "GDB","type": "cppdbg","request": "launch","MIMode": "gdb","miDebuggerPath": "${command:espIdf.getXtensaGdb}","program": "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf","windows": {"program": "${workspaceFolder}\\build\\${command:espIdf.getProjectName}.elf"},"cwd": "${workspaceFolder}","environment": [{ "name": "PATH", "value": "${config:idf.customExtraPaths}" }],"setupCommands": [{ "text": "target remote :3333" },{ "text": "set remote hardware-watchpoint-limit 2"},{ "text": "mon reset halt" },{ "text": "thb app_main" },{ "text": "flushregs" }],"externalConsole": false,"logging": {"engineLogging": true}}]}

發現openocd server能正常啟動,很快就進入到熟悉的界面:

image-20240601160201636

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20623.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20623.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20623.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【電路筆記】-帶阻濾波器

帶阻濾波器 文章目錄 帶阻濾波器1、概述2、典型帶阻濾波器配置3、帶阻濾波器示例14、陷波濾波器5、帶阻濾波器示例26、總結帶阻濾波器也稱為陷波濾波器,阻止并拒絕位于其兩個截止頻率點之間的頻率,并傳遞該范圍兩側的所有這些頻率。 1、概述 通過將基本 RC 低通濾波器與 RC …

Docker基礎命令(三)

同步docker容器中的時間和本地時間一致 背景: 在很多時候, 訓練模型的時候, 記錄的log日志中標記的時間和實際的時間不一致, 往往是容器時間和本地時間不一致照成的. 方案 場景一: 正在運行的容器,可以宿主機直接執行命令給某個容器同步時間 #方法1 直接在宿主機…

ElasticSearch教程(詳解版)

本篇博客將向各位詳細介紹elasticsearch,也算是對我最近學完elasticsearch的一個總結,對于如何在Kibana中使用DSL指令,本篇文章不會進行介紹,這里只會介紹在java中如何進行使用,保證你看完之后就會在項目中進行上手&am…

Arduino燒錄esp8266

default_encoding: cp936 Assume aggressive ‘core.a’ caching enabled. Note: optional global include file ‘arduino_modified_sketch_764314\Blink.ino.globals.h’ does not exist. Read more at https://arduino-esp8266.readthedocs.io/en/latest/faq/a06-global-bui…

【計劃】裝修相關感想

計劃 Summary 從去年年底開始規劃、設計、落實家里的裝修,2024年4月正式開始裝修,一個人探索和學習了很多知識和概念。 準備把這些東西做一些記錄和分享,一方面記錄一些裝修的流程和中間的小細節便于第二次裝修的時候避免;另一方…

Android設備實時監控藍牙的連接、配對、開關3種狀態

一、簡介 Android設備,需要實時監控本機藍牙連接其他藍牙設備的狀態,包含:連接、配對、開關3種狀態。本文介紹了2種方法,各有優勢,下面來到我的Studio一起瞅瞅吧~ 二、定時器任務 Handler 功能方法 定時器任務 Hand…

寫字靜不下心?不如試試這些“笨方法”

夏天悄悄熱起來啦~有人說,想踏踏實實寫一會兒,但又靜不下心,耐不住性子,快收下這四個小錦囊,與古人一起笨拙精進吧!    1、不論輸贏      每次課前,暄桐林曦老師總會強調&am…

AlloyTeam Web前端大會:深入探索前端的無限可能

AlloyTeam Web前端大會:深入探索前端的無限可能 在數字化浪潮的推動下,Web前端技術日新月異,成為引領行業發展的重要力量。AlloyTeam Web前端大會作為業界的盛會,匯聚了眾多前端領域的精英,共同探討前端的未來發展趨勢…

內網-win1

一、概述 1、工作組:將不同的計算機按功能(或部門)分別列入不同的工作組 (1)、查看(windows) 查看當前系統中所有用戶組:打開命令行--》net localgroup查看組中用戶:打開命令行 --》net localgroup 后接組名查看用戶…

FreeRTOS任務調度機制(源碼講解)

任務的調度機制(核心是鏈表)!!! 使用鏈表來管理任務 在我前面寫的FreeRTOS任務(深入到源碼進行分析),我創建了三個任務,他們的優先級都是一樣的,所以他們在FreeRTOS中是輪流執行的,實際上&…

19.1 簡易抽獎

準備一個數組&#xff0c;里面添加10個獎品數據&#xff0c;讓獎品數據快速的在盒子中隨機顯示&#xff0c;通過按鈕控制盒子里面的內容停止。 效果圖&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

解釋Python中的PEP 8是什么 為什么它很重要

PEP 8 是 Python 的一個編碼規范&#xff0c;也稱為 Python 增強提案 8。它提供了一系列關于如何編寫清晰、一致的 Python 代碼的指導原則。這些原則涵蓋了代碼布局、命名約定、注釋、文檔字符串、編碼建議、導入語句、異常、全局變量、嵌套等方面。 為什么PEP 8很重要&#x…

npm install pubsub-js報錯的解決匯總

我在練習谷粒商城P83時&#xff0c;選擇分類時觸發向后端請求選擇分類catId綁定的品牌數據&#xff0c;發現前端控制臺報錯&#xff1a; "PubSub is not definded",找不到pubsub。 因為缺少pubsub包&#xff0c;所以開始安裝此包。 于是在網上一頓搜索猛如虎&…

xilinx ip自帶XDC只讀

檢查生成的IP核再目錄下顯示的文件類型是不是.xcix 如果是的話&#xff0c;重新生成為.xci 再二次編輯即可 或者 將框柱的部分不選擇&#xff0c;從新生成

MongoDB CRUD操作:批量寫操作

MongoDB CRUD操作&#xff1a;批量寫操作 文章目錄 MongoDB CRUD操作&#xff1a;批量寫操作關于批量操作的順序bulkWrite()支持的方法舉例向分片集合批量插入的策略預分割集合無序寫入 mongos避免單調節流 MongoDB提供了批量執行寫入操作的能力&#xff0c;但批量寫入操作只影…

《計算機工程與應用》最新投稿經驗2024年5月

研二下第一次投稿&#xff0c;深度學習長時間序列預測方向&#xff0c;選擇了《計算機工程與應用》期刊&#xff0c;是CSCD擴展刊北大核心&#xff0c;且在24年被EI收錄等等。4.10交稿到最后5.31收到錄用通知&#xff0c;歷時不到2個月&#xff0c;總的來說編輯部效率確實高。 …

LLM背后的基礎模型 1

寫在最前面的話 任何開源技術是最有生命力的&#xff0c;也是最具分享精神的。一直覺得大模型領域需要有一個系列能夠從零開始系統性的講述領域知識&#xff0c;給與這個領域的從業人員或者對其有興趣的門外漢及時的幫助。國外承擔“布道者”的公司眾多&#xff0c;而數磚公司…

云技術最全詳解

目錄 云技術 1.定義 2.特點 2.類型 2.1IaaS&#xff08;基礎設置即服務&#xff09; 2.2PaaS&#xff08;平臺即服務&#xff09; 2.3SaaS&#xff08;軟件即服務&#xff09; 3.云技術模型 3.1公有云 3.2私有云 3.3混合云 云技術 1.定義 云技術是一種云計算和存儲…

如何讓 LightRoom 每次導入照片后不自動彈出 SD 卡 LR

如何讓 LightRoom 每次導入照片后不自動彈出 SD 卡 LR 在導入窗口左上角有個選項&#xff1a; 導入后彈出 把這個去掉就可以了

Rust 基本語法

變量 整數 無符號整數以u開頭有符號整數以i開頭對于Rust默認整數是i32對于整數溢出 開發模式中編譯會檢測溢出&#xff0c;如果溢出會導致程序panic發布模式中編譯不會檢查可能會導致的溢出&#xff0c;如果運行時發生溢出&#xff0c;會執行環繞操作保證數值在范圍內且程序不…