From cbf4d51ddb110732c5faaec8df38b56c84610e47 Mon Sep 17 00:00:00 2001 From: chenjianqiang Date: Fri, 5 Jun 2020 21:06:21 +0800 Subject: [PATCH] psram: fix 16mbit psram id read error --- components/esp32/spiram_psram.c | 6 ++++++ components/esp32s2beta/spiram_psram.c | 9 ++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/components/esp32/spiram_psram.c b/components/esp32/spiram_psram.c index a63069d0cc..501642f3b5 100644 --- a/components/esp32/spiram_psram.c +++ b/components/esp32/spiram_psram.c @@ -900,8 +900,14 @@ esp_err_t IRAM_ATTR psram_enable(psram_cache_mode_t mode, psram_vaddr_mode_t vad bootloader_common_vddsdio_configure(); // GPIO related settings psram_gpio_config(&psram_io, mode); + + /* 16Mbit psram ID read error + * workaround: Issue a pre-condition of dummy read id, then Read ID command + */ + psram_read_id(&s_psram_id); psram_read_id(&s_psram_id); if (!PSRAM_IS_VALID(s_psram_id)) { + ESP_EARLY_LOGE(TAG, "PSRAM ID read error: 0x%08x", (uint32_t)s_psram_id); return ESP_FAIL; } diff --git a/components/esp32s2beta/spiram_psram.c b/components/esp32s2beta/spiram_psram.c index ae3af8f0c4..65af7a6b34 100644 --- a/components/esp32s2beta/spiram_psram.c +++ b/components/esp32s2beta/spiram_psram.c @@ -40,6 +40,8 @@ #if CONFIG_SPIRAM #include "soc/rtc.h" +static const char* TAG = "psram"; + //Commands for PSRAM chip #define PSRAM_READ 0x03 #define PSRAM_FAST_READ 0x0B @@ -99,7 +101,6 @@ typedef enum { #define _SPI_40M_CLK_DIV 2 #define _SPI_20M_CLK_DIV 4 -static const char* TAG = "psram"; typedef enum { PSRAM_SPI_1 = 0x1, PSRAM_SPI_2, @@ -752,8 +753,14 @@ esp_err_t IRAM_ATTR psram_enable(psram_cache_mode_t mode, psram_vaddr_mode_t vad CLEAR_PERI_REG_MASK(SPI_MEM_USER_REG(PSRAM_SPI_1), SPI_MEM_CS_SETUP_M); psram_gpio_config(mode); PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[PSRAM_CS_IO], PIN_FUNC_GPIO); + + /* 16Mbit psram ID read error + * workaround: Issue a pre-condition of dummy read id, then Read ID command + */ + psram_read_id(&s_psram_id); psram_read_id(&s_psram_id); if (!PSRAM_IS_VALID(s_psram_id)) { + ESP_EARLY_LOGE(TAG, "PSRAM ID read error: 0x%08x", s_psram_id); return ESP_FAIL; } uint32_t flash_id = g_rom_flashchip.device_id;