首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >esp32c3使用openocd调试程序

esp32c3使用openocd调试程序

作者头像
bigmagic
发布2021-08-20 15:16:52
3.1K0
发布2021-08-20 15:16:52
举报
文章被收录于专栏:嵌入式iot嵌入式iot

esp32c3使用openocd调试程序

  • 1.概述
    • 1.1 内置的JTAG接口
    • 1.2 外置的jtag接口
  • 2.esp32c3 nuttx程序的编译与下载
    • 2.1 编译nuttx
    • 2.2 程序下载
  • 3.调试程序
    • 3.1 使能芯片JTAG
    • 3.2 确保调试器硬件连接正常
    • 3.3 下载esp32c3的openocd程序
    • 3.4 在控制台中启动openocd
    • 3.5 启动gdb调试
  • 4.调试裸机程序

1.概述

对于esp32c3裸机开发,用openocd结合gdb非常的有用,这是裸机开发的关键工具。

esp32c3的开发支持两种调试方式,分别是内置的USB调试接口,以及外扩的扩展调试接口。其内置一个USB-to-JTAG的接口。

1.1 内置的JTAG接口

由于esp32c3芯片内置一个JTAG的调试器的引擎,所以不用外置的JTAG的调试器。其中的硬件连接可以参考下面的图示。

连接的线需要自己一个USB的插头,插入到电脑的USB口即可。

USB Signal

Typical wire color

ESP32-C3 Signal Name

D-

White

GPIO18

D+

Green

GPIO19

V_BUS

Red

5V

GND

Black

GND

1.2 外置的jtag接口

当有JTAG可以使用这个外置的接口进行连接。

这里使用的是蜂鸟调试器接口。

由于目前手上只有这一个调试器,所以直接用这个来进行测试。

信号线的连接上图所示:

JTAG signal

JTAG20 pin

ESP32-C3 signal

TMS

7

IO4

TDI

5

IO5

TCK

9

IO6

TDO

13

IO7

GND

4

GND

2.esp32c3 nuttx程序的编译与下载

这里用nuttx这个rtos作为演示,首先需要编译出nuttx的程序出来。

2.1 编译nuttx

编译过程如下:

准备环境,目前在ubuntu的环境下进行的编译。

sudo apt install \
bison flex gettext texinfo libncurses5-dev libncursesw5-dev \
gperf automake libtool pkg-config build-essential gperf genromfs \
libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev \
libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux

然后需要安装kconfig-frontends。这是nuttx编译需要的,不过可以自己编译。

apt install kconfig-frontends

下载代码

mkdir nuttx
cd nuttx
git clone https://github.com/apache/incubator-nuttx.git nuttx
git clone https://github.com/apache/incubator-nuttx-apps apps

通过nuttx目录下的

./tools/configure.sh -L | less

可以列出所有可以编译的程序。

在编译esp32c3之前,需要准备交叉编译工具链,这里采样sifive官网的工具链就可以。

https://www.sifive.com/software

另外通过

./tools/configure.sh esp32c3-devkit:nsh

来编译出可以指向的nuttx的程序。

正常情况下,编译出的esp32c3的nuttx程序。

2.2 程序下载

启动esp32c3需要下面的固件

  • bootloader-esp32c3.bin
  • partition-table-esp32c3.bin
  • nuttx

上面两个固件可以到下面的地址下载

https://github.com/espressif/esp-nuttx-bootloader

然后,nuttx则需要自己编译。

在烧录esp32c3程序时,需要在电脑上安装python3。

pip install esptool

安装esptool就可以进行烧录了。

通过下面的命令烧录nuttx

esptool.py --chip esp32c3 --port COM3 --baud 921600 write_flash 0x0 .\bootloader-esp32c3.bin 0x8000 .\partition-table-esp32c3.bin 0x10000 nuttx.bin

下面表示烧录成功。

然后启动串口调试助手,可以看到esp32c3可以正常启动nuttx。

3.调试程序

当线路连接完成,并且程序下载进去后,就可以开始进行调试工作了。

3.1 使能芯片JTAG

设置使能JTAG。

espefuse.py -p COM3 burn_efuse JTAG_SEL_ENABLE

此时,芯片可以进行JTAG的调试了。

3.2 确保调试器硬件连接正常

根据蜂鸟调试器,装好驱动,通过查看电脑的设备管理器,可以看到如下的驱动。

3.3 下载esp32c3的openocd程序

可以到官方的网站上下载对应版本的esp32c3的openocd程序。

https://github.com/espressif/openocd-esp32

下载最新版本即可。

3.4 在控制台中启动openocd

找到openocd解压后的程序目录,找到可以执行的程序。

.\openocd.exe -c 'set ESP_RTOS none' -f board/esp32c3-ftdi.cfg

其中openocd-esp32\share\openocd\scripts\board可以找到esp32c3的配置文件。

其中的builtin代表的内置的jtag的配置。而ftdi则是外置的jtag的配置。由于这里采用的是外置的jtag,所以需要esp32c3-ftdi.cfg

正常情况下,启动信息如下所示:

这样就可以启动gdb去连接openocd了。

3.5 启动gdb调试

对于esp32c3的程序,可以采用sifive提供的riscv交叉编译工具链中的gdb程序。

gdb正常的与芯片进行通信。

此时可以将编译好的nuttx的程序的符号表加载进来。

file  ./nuttx

同时,可以通过telnet查看信息状态。

windows上启动telnet可以通过控制面板。

启动telnet控制端,这样就可以控制gdb的行为了。

$telnet localhost 4444
>reset
>halt
>reg
>step
>reg pc
>resume

当然gdb窗口中也能查看寄存器状态信息。

4.调试裸机程序

由于前面已经写好了一个基本的esp32c3裸机程序,所以可以通过gdb进行调试。

https://github.com/bigmagic123/esp32c3_bare_metal

编译完成后,首先打开openocd

.\openocd.exe -c 'set ESP_RTOS none' -f board/esp32c3-ftdi.cfg

另外开一个窗口,开启gdb的连接。

.\riscv64-unknown-elf-gdb.exe C:/work/example

这样可以正常看到代码执行的顺序了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式IoT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • esp32c3使用openocd调试程序
    • 1.概述
      • 1.1 内置的JTAG接口
      • 1.2 外置的jtag接口
    • 2.esp32c3 nuttx程序的编译与下载
      • 2.1 编译nuttx
      • 2.2 程序下载
    • 3.调试程序
      • 3.1 使能芯片JTAG
      • 3.2 确保调试器硬件连接正常
      • 3.3 下载esp32c3的openocd程序
      • 3.4 在控制台中启动openocd
      • 3.5 启动gdb调试
    • 4.调试裸机程序
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档