• 【ESP32之旅】ESP32-S3 Jlink调试


    原理讲解

    如下图所示,ESP32S3芯片支持多种程序下载和调试方式。ESP32S3 在芯片内部集成了一颗USB控制器,可以用切换Boot模式的形式将USB控制器模拟成一路下载串口。芯片的Jtag功能和USB功能是不能同时使用的,功能切换使用Efuse(一次性熔丝位)控制。默认情况下BananaPI 的熔丝位填充为全0,所以功能上仅支持USB模拟串口下载。

    为了可以同时使用USB功能和Jtag功能通常情况下使用内部USB控制器+外部JTAG控制器的方式,所以在使用的时候需要烧录Efuse将Jtag功能切换至外部控制器。

    在这里插入图片描述

    JTAG接口介绍

    JTAG接口是嵌入式行业定义的统一的单板调试接口协议,规范定义了信号电平、协议和传输方式。通常情况下仅需要TDI、TDO、TCK、TMS 和 GND 这5根线即可完成芯片的调试。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7twXfqpo-1668092745895)(img\jtag_define.png)]

    ESP32 通过开源调试软件OpenOCD来进行PC和Jtag控制器的数据交互,OpenOCD 支持市面上常见的所有Jtag控制器,OpenOCD设备支持列表

    JLink 的使用

    因为搬家手边只有一个JlinkV9,就以Jlink为例子给大家介绍下如何进行调试。其他的调试器使用方式都是类似的,只要支持Jtag接口即可。详细的接线示意可以参考如下示意图。

    接线示意

    在这里插入图片描述

    驱动替换

    默认情况下Jlink是只支持Jflash进行固件下载,JLinkGDBServerCL进行调试的。需要进行驱动替换之后才可使用OpenOCD。

    • 安装Zadig进行驱动替换操作,开源调试软件Zadig
    • 将Jlink连接到电脑上。
    • 打开Zadig 之后选择 Options -> List All Devices 列举出当前计算机上接入的USB设备

    在这里插入图片描述

    • 选择接入PC的Jlink型号然后单击Reinstall Driver,按照提示进行即可完成驱动替换。(初次替换可能显示的是install Driver)。
      在这里插入图片描述

    配置文件修改

    .vscode/setting.json

    {
      "C_Cpp.intelliSenseEngine": "Tag Parser",
      "idf.flashType": "JTAG",						//接口类型必须为JTAG
      "idf.adapterTargetName": "esp32s3",
      "idf.portWin": "COM3",						//替换成自己的串口
      "idf.openOcdConfigs": [						//配置文件根据实际选择 后续要修改此文件
        "board/esp32s3-bridge.cfg"
      ],
      "terminal.integrated.defaultProfile.windows": "Windows PowerShell"
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    .vscode/launch.setting

    一般保持默认就可以,VScode IDF会帮我们自动生成。

    {
      "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
          }
        }
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    熔丝位烧录

    为了使用外部Jtag接口,需要通过烧录熔丝位开启外部Jtag,操作方法如下:

    • 在已经安装python的情况下安装esptool工具:
    pip install esptool
    
    • 1
    • 烧录熔丝位(注意:熔丝位特定位置只能从0->1无法从1->0,因此为一次性烧录。操作需谨慎)
    python -m espefuse -p <串口号> burn_efuse DIS_USB_JTAG 1
    
    • 1

    在这里插入图片描述

    • 读取熔丝位
    python -m espefuse -p <串口号> summary
    
    • 1

    在这里插入图片描述
    可以看到在烧录之后DIS_USB_JTAG位已经从0变成了1,重启esp32 之后就可以进行后续操作。

    修改openocd 配置文件

    默认情况下ESP32 的openocd配置文件支持的JTAG烧录器为乐鑫官方的ESP-JTAG,因此需要将其修改为使用的烧录器,方法如下:

    • 修改cfg文件:

    在.vscode/setting.json选项配置过程中以下字段配置。

      "idf.openOcdConfigs": [						//配置文件根据实际选择 后续要修改此文件
        "board/esp32s3-bridge.cfg"
      ],
    
    • 1
    • 2
    • 3

    因此需要修改esp32s3-bridge.cfg文件以支持jlink,修改具体内如如下所示:

    # Example OpenOCD configuration file for ESP32-S3 connected via ESP USB Bridge board
    #
    # For example, OpenOCD can be started for ESP32-S3 debugging on
    #
    #   openocd -f board/esp32s3-bridge.cfg
    #
    
    # Source the JTAG interface configuration file
    #source [find interface/esp_usb_bridge.cfg]
    # 从esp usb bridge 修改为jlink.cfg,其他调试器的cfg文件名可以打开openocd-esp32\share\openocd\scripts\interface 目录查询
    source [find interface/jlink.cfg]				
    
    # ESP32S3 chip id defined in the idf esp_chip_model_t
    #espusbjtag chip_id 9
    # Source the ESP32-S3 configuration file
    source [find target/esp32s3.cfg]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    注:

    如果找不到cfg文件可以使用everything等软件搜索下,一般在esp安装路径下:

    C:\Users\songz\.espressif\tools\openocd-esp32\v0.11.0-esp32-20220411\openocd-esp32\share\openocd\scripts\board
    
    • 1

    Debug 操作

    终于到了最终可以使用的步骤,操作分为以下几个步骤:

    • 在界面的右下角单击 OpenOCD Server将其连接
    • 在左侧工具栏选择运行和调试按钮 然后运行GDB调试(在实际的使用过程中可能会运行2-3次GDB才能进入调试,原因未知。如果多次操作还是无法运行GDB,尝试将OpenOCD断开从新连接试试。)
    • 打断点、看变量、看内存。。。。。
      在这里插入图片描述

    效果展示

    在这里插入图片描述
    在这里插入图片描述

    参考

    烧伤保险丝 - ESP32-S3 - — esptool.py 最新文档 (espressif.com)

    2021基于vscode以及jlink调试esp32最新esp32 jlink

    Installation and Dependencies - ESP32-S3 - — esptool.py latest documentation (espressif.com)

  • 相关阅读:
    蓝桥杯备战刷题(自用)
    ROS 物体跟踪
    C++基础知识要点--字符串、向量和数组
    前端之【数据可视化】
    [附源码]Python计算机毕业设计宠物销售管理系统
    Linux下 /etc/shadow内容详解
    Idea执行Pom.xml导入jar包提示sun.misc.BASE64Encoder jar找不到---SpringCloud工作笔记197
    使用遗传算法优化BP神经网络实现非线性函数拟合
    创新案例|实现YouTube超速增长的3大敏捷组织运营机制(上)
    记一次 .NET 某工控数据采集平台 线程数 爆高分析
  • 原文地址:https://blog.csdn.net/Argon_Ghost/article/details/127798206