介绍

这款芯片实际上去年12月份乐鑫官方已经宣布发布,然而貌似直到目前才正式量产。根据乐鑫发布的初版手册来看,ESP32-C3是设计带USB外设的,不过应该是第一次流片失败,目前发布的技术手册里已经没有USB了,或许将来会修复?

当前市面上已经有一些基于RISC-V的MCU量产,如GD32VF103、CH32V103、BL602等,不过目前个人感觉仍然不算是特别流行,原因很简单:RISC-V并不是什么灵丹妙药,实际上对于商用的产品研发来说,最重要的是成本/性能/亮点/开发生态/技术支持,几乎所有开发者都是用C开发,调用SDK提供的接口,大部分时候对于底层根本没有感知,也不需要关心(当然如果要深入解决某些问题必须要了解底层),试问ESP32的xtensa架构和汇编语言有多少人熟悉和掌握?这些并不影响其在商业市场上的成功,一个封装完善的SDK即可可以屏蔽所有的底层细节,提供良好的开发体验。

或许RISC-V的免授权费在大规模量产时可以有一些成本优势,如果其他的条件如果无法满足需求,得到市场的认可可能需要一个漫长的过程。

个人认为ESP32-C3会是RISC-V的一个强力推动者,性价比对标ESP8266,使用成熟的esp-idf框架开发(其实这些才是最重要的),相信可以快速的投入商用的市场中,普通的爱好者也可以从中仔细研究学习RISC-V的原理,一个开放的指令架构确实会更有趣,也具有更大的学习价值。

模组规格

Component Detail
MCU 32bit RISC-V ESP32-C3FN4 up to 160MHz
ROM 384KB
SRAM 400KB(16KB for cache)
Flash 4MB
WiFi IEEE 802.11bgn
Bluetooth BLE 5.0 & mesh
GPIO 22
SPI 3
UART 2
I2C 1
RMT 2T+2R
DMA 3T+3R
LED-PWMC 6 channel
TWAI 1
ADC 2 x 12bit, 6 channel
Temp sensor 1
Timer 6
Security OTP/AES/SHA/RSA/RNG/HMAC

这块开发板和市面上普通的ESP32开发板相比,我将原先的USB转串口芯片(通常是CP2102或者CH340)换成了运行DAPLink的MCU,并对DAPLink源码进行了一些定制,在提供USB转串口的功能的同时,另外增加了拖拽烧录和JTAG调试功能,以方便用户更方便的进行开发调试。

USB-to-Serial

兼容传统的ESP32使用,可使用串口进行烧录或者调试输出,使用举例如下:

$idf.py -p /dev/ttyACM0 flash monitor
$esptool.py --chip esp32c3 \
           -p /dev/ttyACM0 \
           -b 115200 \
           --before=default_reset \
           --after=hard_reset \
           --no-stub \
           write_flash \
           --flash_mode dio \
           --flash_freq 80m \
           --flash_size 2MB \
           0x0     esp32c3/bootloader.bin \
           0x8000  esp32c3/partition-table.bin \
           0x10000 esp32c3/blink_100.bin

拖拽烧录

板载的下载器ESPLink支持拖拽烧录,将开发板上电之后,PC将会出现一个名为ESPLink的虚拟U盘,此时只需将flash镜像文件拖拽至ESPLink虚拟U盘中,稍等片刻,即可自动完成烧录。此功能使得烧录无需依赖任何外部工具以及操作系统, 典型的使用场景列举如下:快速的原型验证、在云端服务器进行编译、然后在任意PC上烧录、或者在商业的产品中实现固件的快速升级。

注意:flash镜像文件为三个文件(bootloader.bin/partition-table.bin/app.bin)拼接而成,需要将bootloader.bin填充至0x8000,partition-table.bin填充至0x10000,然后将三个文件直接合并。tools目录下提供了一个脚本以供使用,举例如下:

$./tools/esppad.sh bootloader.bin partition-table.bin app.bin flash_image.bin

JTAG调试

ESPLink 支持使用jtag调试ESP32-C3, 对于想学习RISC-V 架构汇编原理图的爱好者非常有用,若您是商用产品的开发者,这也可以方便的让您在系统崩溃时查找原因。具体使用说明如下:

Openocd 安装
$git clone https://github.com/espressif/openocd-esp32.git 
$cd openocd-esp32 $./bootstrap 
$./configure --enable-cmsis-dap 
$make -j 
$sudo make install
烧录efuse

efuse JTAG_SEL_ENABLE bit需要烧录来启用jtag功能.

$espefuse.py -p /dev/ttyACM0 burn_efuse JTAG_SEL_ENABLE
Attach to ESP32-C3

将GPIO10 拉低到GND以启用GPIO的JTAG功能,上电开发板然后执行以下脚本,若一切正常,则可检测到ESP32-C3的idcode

$sudo openocd -f tcl/interface/cmsis-dap.cfg -f tcl/target/esp32c3.cfg
Open On-Chip Debugger  v0.10.0-esp32-20201202-30-gddf07692 (2021-03-22-16:48)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
adapter speed: 10000 kHz

force hard breakpoints
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD  Supported
Info : CMSIS-DAP: JTAG Supported
Info : CMSIS-DAP: FW Version = 0255
Info : CMSIS-DAP: Serial# = 0800000100430028430000014e504332a5a5a5a597969908
Info : CMSIS-DAP: Interface Initialised (JTAG)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : High speed (adapter_khz 10000) may be limited by adapter firmware.
Info : clock speed 10000 kHz
Info : cmsis-dap JTAG TLR_RESET
Info : cmsis-dap JTAG TLR_RESET
Info : JTAG tap: esp32c3.cpu tap/device found: 0x00005c25 (mfg: 0x612 (Espressif Systems), part: 0x0005, ver: 0x0)
Info : datacount=2 progbufsize=16
Info : Examined RISC-V core; found 1 harts
Info :  hart 0: XLEN=32, misa=0x40101104
Info : Listening on port 3333 for gdb connections

Debug

attach 成功之后,另外打开一个终端窗口,可以使用telnet或者gdb来进行调试

Debug with Gdb
$riscv32-esp-elf-gdb -ex 'target remote 127.0.0.1:3333' ./build/blink.elf
(gdb) info reg
(gdb) s
(gdb) continue
Debug with telnet
$telnet localhost 4444
>reset
>halt
>reg
>step
>reg pc
>resume

参考

nanoESP32-C3

https://github.com/espressif/esp-idf

esp-idf

https://github.com/espressif/esp-idf

esp32-c3 get-started

https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/get-started/

esp32-c3

https://www.espressif.com/zh-hans/p