ZYB ARTICLES REPOS

ESP32-C3开发板问题汇总

之前尝鲜在安信可购买了一款ESP32C3的12F开发板的外置2M flash版开发板。

它有四种版本

现在还买不到内置4M flash的版本,暂时能买的是第四种版本,也就是它的flash是外置的且只有2M。

大约是2021年7月开始能买到内置4M flash的开发板了。

芯片Rev2、Rev3版本问题

早期买到的低价尝鲜ESP32C3可能是工程版本,具体具体表现为,当执行完idf.py menuconfigidf.py flash monitor之后不断重启,并提示。

E (38) boot_comm: This chip is revision 2 but the application is configured for minimum revision 3. Can't run.

这就是提示芯片的版本是2,是工程验证芯片,而编译系统默认的是按版本3编译的,所以还需要改一下。方法是idf.py menuconfig之后在Component config ---> ESP32C3-Specific ---> Minimum Supported ESP32-C3 Revision里把Rev 3改成Rev 2就可以了。

现在卖出的芯片版本基本都是Rev 3了,一般不会遇到这个问题。

在Arduino IDE环境中遇到的问题

开始在Arduino IDE中通过https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json下载到支持ESP32C3的开发板代码库,并编写最简单的亮灯程序,通过选择ESP32C3 Dev Module来把程序下载到开发板上。

const byte RED_LED_PIN = 3;

void setup() {
  pinMode(RED_LED_PIN, OUTPUT);
}

void loop() {
  digitalWrite(RED_LED_PIN, HIGH);
  delay(1000);
  digitalWrite(RED_LED_PIN, LOW);
  delay(1000);
}

但是下载完成后,开发板会不断重启并提示:

Build:Sep 18 2020
rst:0x3 (RTC_SW_SYS_RST),boot:0xc (SPI_FAST_FLASH_BOOT)
Saved PC:0x403d11b2
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fcd6100,len:0x1484
load:0x403ce000,len:0xb80
load:0x403d0000,len:0x2ba4
entry 0x403ce000
I (34) boot: ESP-IDF v4.4-dev-960-gcf457d412 2nd stage bootloader
I (35) boot: compile time 12:10:59
I (35) boot: chip revision: 2
I (35) boot_comm: chip revision: 2, min. bootloader chip revision: 0
I (41) qio_mode: Enabling default flash chip QIO
I (45) boot.esp32c3: SPI Speed      : 80MHz
I (49) boot.esp32c3: SPI Mode       : QIO
I (53) boot.esp32c3: SPI Flash Size : 2MB
I (57) boot: Enabling RNG early entropy source...
E (61) flash_parts: partition 3 invalid - offset 0x150000 size 0x140000 exceeds flash chip size 0x200000
E (70) boot: Failed to verify partition table
E (74) boot: load partition table error!
ESP-ROM:esp32c3-20200918

这是因为ESP32C3 Dev Module是乐鑫公司的开发板,他们的开发板的ESP32C3芯片是内置4M flash版本,而安信可的ESP32_C3_12F是外置2M flash版本。所以需要改一下Arduino的开发板选项,把Flash size: "4MB (32Mb)"改成Flash size: "2MB (16Mb)"就可以了。

如果下载程序的时候一直不成功

esptool.py v3.1-dev
Serial port /dev/cu.usbserial-1420
Connecting....
Chip is ESP32-C3 (revision 2)
Features: Wi-Fi
Crystal is 40MHz
MAC: 88:88:88:88:88:88
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...

A fatal error occurred: Timed out waiting for packet header
A fatal error occurred: Timed out waiting for packet header

可以把Upload speed: "921600"改成Upload speed: "460800"

ESP32-C3F-Kit开发板引脚标注问题

实际 标注
IO0 EN后边的NC
IO1 IO0
IO9 IO10
IO10 IO9
IO18 IO19
IO19 IO18

ESP32-12H-Kit开发板引脚标注问题

实际 标注
IO10 IO21
IO11 IO20
IO12 IO19
IO19 IO12
IO20 IO11
IO21 IO10

对于ESP32C3通过USB-TTL下载程序和打印日志的引脚接法

USB-TTL ESP32C3
3V3 3V3
GND GND
RTS CHIP_EN
DTR IO9
TXD IO20/U0RXD
RXD IO21/U0TXD

这样接线就可以使用USB-TTL工具直接给芯片烧录和调试程序,因此在设计开发板的时候,就可以不用再额外设计如下的电路了。

通过USB下载程序

这种方法只适合下载程序,无法通过串口查看日志。

首先将USB的四根线分出来,可以用如下的模块:

接线如下:

USB ESP32-C3F-Kit
VBUS 5V
GND GND
D+ IO19
D- IO18

对于ESP32-C3F-Kit开发板,在使用USB下载前,先按住板子上右边(这里的左、右是按上图摆放的左、右)的PROG按钮不松开,再按一下板子左边的RST按钮,再松开PROG按钮。然后再使用idf.py flash下载程序。

开发板上的PROG按钮是边接到芯片的GPIO9,按下就是拉低。因此在设计电路的时候,如果不想在板子上加上USB转串口的电路,可以引出3V3GNDGPIO9GPIO18GPIO19这5个触点用来后期烧录程序,如果板子上已经有USB接口,完全可以只引出GPIO9这一个触点。

LED PIN

Led Pin
R 3
G 4
B 5
O(橙色,靠边那个) 18
W(白色,靠中间那个) 19

合宙的ESP32C3-CORE开发板问题

1 GND 接地
2 5V 5V电源接口,与USB的VBUS相连
3 BOOT GPI009,输入
4 IO08 GPIO08,输入,输出,高阻
5 IO04 GPIO04,输入,输出,高阻
6 IO05 GPIO05,输入,输出,高阻
7 3.3V 芯片电源,3.3V
8 GND 接地
9 IO11 GPIO11,输入.输出,高阻
10 IO07 GPIO07,输入,输出,高阻
11 IO06 GPIO06,输入,输出,高阻
12 IO10 GPIO10,输入,输出,高阻
13 IO03 GPIO03,输入,输出,高阻
14 IO02 GPIO02,输入,输出,高阻
15 3.3V 芯片电源,3.3V
16 GND 接地
17 5V 5V电源接口,与USB的VBUS相连
18 PWB 芯片3.3V供电控制.高电平有效,不用可悬空
19 GND 接地
20 3.3V 芯片电源,3.3V
21 RESET 芯片复位
22 NC 悬空
23 IO13 GPIO13,输入,输出,高阻
24 U0_RX GPIO20,输入,输出,高阻
25 U0_TX GPIO21,输入,输出,高阻
26 GND 接地
27 IO19 GPIO19,输入,输出,高阻
28 IO18 GPIO18,输入,输出,高阻
29 IO12 GPIO12,输入,输出,高阻
30 IO1 GPIO1,输入,输出,高阻
31 IO0 GPIO0,输入,输出,高阻
32 GND 接地

烧录失败问题

在Mac系统下使用idf.py flash烧录失败的问题:

Executing action: flash
Serial port /dev/cu.usbmodem544C0026831
Connecting....
Detecting chip type... ESP32-C3
Running ninja in directory /Users/xxx/yyy/esp/blink/build
Executing "ninja flash"...
[1/5] cd /Users/xxx/yyy/esp/blink/build/esp-idf/esptool_py && /Users/ac...tion_table/partition-table.bin /Users/xxx/yyy/esp/blink/build/blink.bin
blink.bin binary size 0x276b0 bytes. Smallest app partition is 0x100000 bytes. 0xd8950 bytes (85%) free.
[2/5] Performing build step for 'bootloader'
[1/1] cd /Users/xxx/yyy/esp/blink/build/bootloader/esp-idf/esptool_py && /Users/ace/.espressif/python_env/idf5.0_py3.9_env/bin/python /Users/xxx/yyy/esp/idf/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 /Users/xxx/yyy/esp/blink/build/bootloader/bootloader.bin
Bootloader binary size 0x5290 bytes. 0x2d70 bytes (35%) free.
[2/3] cd /Users/xxx/yyy/esp/idf/components/esptool_py && /usr/local/Cel...d -P /Users/xxx/yyy/esp/idf/components/esptool_py/run_serial_tool.cmake
esptool esp32c3 -p /dev/cu.usbmodem544C0026831 -b 115200 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 4MB 0x0 bootloader/bootloader.bin 0x10000 blink.bin 0x8000 partition_table/partition-table.bin
esptool.py v4.1
Serial port /dev/cu.usbmodem544C0026831
Connecting....
Chip is ESP32-C3 (revision 3)
Features: Wi-Fi
Crystal is 40MHz
MAC: 60:55:f9:79:68:64
Uploading stub...

A fatal error occurred: Failed to write to target RAM (result was 01070000: Operation timed out)
CMake Error at run_serial_tool.cmake:55 (message):

  /Users/ace/.espressif/python_env/idf5.0_py3.9_env/bin/python;;/Users/xxx/yyy/esp/idf/components/esptool_py/esptool/esptool.py;--chip;esp32c3
  failed


FAILED: CMakeFiles/flash /Users/xxx/yyy/esp/blink/build/CMakeFiles/flash
cd /Users/xxx/yyy/esp/idf/components/esptool_py && /usr/local/Cellar/cmake/3.22.1/bin/cmake -D IDF_PATH=/Users/xxx/yyy/esp/idf -D "SERIAL_TOOL=/Users/ace/.espressif/python_env/idf5.0_py3.9_env/bin/python;;/Users/xxx/yyy/esp/idf/components/esptool_py/esptool/esptool.py;--chip;esp32c3" -D "SERIAL_TOOL_ARGS=--before=default_reset;--after=hard_reset;write_flash;@flash_args" -D WORKING_DIRECTORY=/Users/xxx/yyy/esp/blink/build -P /Users/xxx/yyy/esp/idf/components/esptool_py/run_serial_tool.cmake
ninja: build stopped: subcommand failed.
ninja failed with exit code 1

这主要是没有安装驱动,按官方文档说需要先安装CH343驱动。实际安装CH34X驱动即可,点此访问官网下载 。或者直接在此即可下载 CH34XSER_MAC

需要注意,如果要指定端口的话,在安装驱动后要将/dev/cu.usbmodem544C0026831这种端口改成/dev/cu.wchusbserial544C0026831这种名字的端口。

解决方法参考此处: https://github.com/espressif/esptool/issues/280

一直重启问题

ESP-ROM:esp32c3-api1-20210207
Build:Feb  7 2021
rst:0x3 (RTC_SW_SYS_RST),boot:0xc (SPI_FAST_FLASH_BOOT)
Saved PC:0x403d0a9e
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fcd6108,len:0x1818
load:0x403ce000,len:0xc30
load:0x403cf600,len:0x2df0
entry 0x403ce000
I (35) boot: ESP-IDF v5.0-dev-4037-g9b8c558e63 2nd stage bootloader
I (35) boot: compile time 23:08:48
I (35) boot: chip revision: V003
I (39) boot_comm: chip revision: 3, min. bootloader chip revision: 2
I (46) qio_mode: Enabling QIO for flash chip MXIC
I (51) boot.esp32c3: SPI Speed      : 80MHz
I (56) boot.esp32c3: SPI Mode       : QIO
I (61) boot.esp32c3: SPI Flash Size : 4MB
I (65) boot: Enabling RNG early entropy source...
E (71) flash_parts: partition 0 invalid magic number 0xcdce
E (77) boot: Failed to verify partition table
E (82) boot: load partition table error!

这里提示的失败是flash_parts: partition 0 invalid magic number 0xcdceboot: Failed to verify partition tableboot: load partition table error!

解决方法是执行idf.py menuconfig,将 Serial flasher config ---> Flash SPI mode 改成 DIO 即可。然后再idf.py flash就好了。