esp32c3使用tft-espi屏幕不断重启原因及解决方法

By | 2025/03/06

开发环境

1、vscode+pio平台,使用arduino;

2、合宙esp32c3开发板,简约版;

3、spi四线tft屏,引脚为BLK CS DC RES SDA SCL VCC GND

原因分析

重启的时候,一般会收到如下的提示:

1、Guru Meditation Error: Core 0 panic’ed (Store access fault). Exception was unhandled.

2、Guru Meditation Error: Core 0 panic’ed (StoreProhibited). Exception was unhandled.

此问题在bodmer的tft_espi的issues有明确的讨论,其中tkggithub对这个问题的产生进行了详细的分析及描述。原因是新版的espidf中,有这么一句:

#define REG_SPI_BASE(i) (((i)==2) ? (DR_REG_SPI2_BASE) : (0)) // only one

而在tft_espi中,有如下的定义

/*
For ESP32/S2/C3:
SPI1_HOST = 0
SPI2_HOST = 1
SPI3_HOST = 2
*/

// Fix IDF problems with ESP32C3
#if CONFIG_IDF_TARGET_ESP32C3
  // Fix ESP32C3 IDF bug for missing definition (VSPI/FSPI only tested at the moment)
  #ifndef REG_SPI_BASE
    #define REG_SPI_BASE(i) DR_REG_SPI2_BASE
  #endif

  // Fix ESP32C3 IDF bug for name change
  #ifndef SPI_MOSI_DLEN_REG
    #define SPI_MOSI_DLEN_REG(x) SPI_MS_DLEN_REG(x)
  #endif
#endif

#define SPI_PORT SPI2_HOST

REG_SPI_BASE 是在基于使用 SPI2_HOST 的 SPI_PORT 定义的库中使用的,而SPI2_HOST值是1,然而核心REG_SPI_BASE期望的值是2,因此 _spi_user 变量的实际地址使用 0x0 作为基址而不是 SPI2 的预期地址 0x60024000,因此出现了错误。

解决办法

1、espressif32使用6.6.0及以下版本,后面的版本会导致上面的错误,无限重启。

2、#define USE_HSPI_PORT 有的文章提到使用这个就可以在高版本espidf中解决上述问题,但这个是esp32s3才支持(其支持spi3,未测试),esp32c3这个选项是不能打开的(因为没有spi3),如果打开屏幕会一直黑屏。因此使用esp32s3的可以打开此选项。

3、修改tft_espi/processors/tft_espi_esp32_c3.h文件的71行,修改后即可解决。


#define SPI_PORT SPI2_HOST

//将上面的内容,替换为下面的代码

#if ESP_IDF_VERSION_MAJOR< 3
  #define SPI_PORT SPI2_HOST
#else
  #define SPI_PORT 2
#endif

拾遗

1、必须的配置引脚

#define TFT_MOSI 3
#define TFT_SCLK 2
#define TFT_CS    7  // Chip select control pin,可不连
#define TFT_DC    6  // Data Command control pin
#define TFT_RST   10  // Reset pin (could connect to RST pin)

2、SPI引脚解释

BLK  屏幕背光控制
CS  片选
DC  数据/控制 选择
RES 重置
SCLK/SCL 时钟信号
MOSI/SDA 数据输出
MISO 数据输入,屏幕是输出设备,所以用不到

一般只需要指定CS、DC、RST引脚就行,MOSI、SCLK是固定的,不用指明,除想走软件模拟驱动。

3、所有SPI屏幕的CS引脚都可以省略,节省一个引脚。屏幕的CS接地就是启用了。

4、点阵屏(灰阶)OLED用u8g2,彩色tft屏用TFT_eSPI。

One thought on “esp32c3使用tft-espi屏幕不断重启原因及解决方法

  1. 谢谢你,我出现的错误和你的一模一样,根据你的解决提议3修改后正常运行!再次向你感谢

    Reply

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理