Page 1 of 1

ESP32-S2 SPI flash CS only low during clock pulse

Posted: Sun Mar 12, 2023 11:34 am
by tobi_ffm
Hi all,
We are having some strange behaviour of the CS line with ESP32-S2 and SPI flash. I would expect the CS line to be low for the whole transaction. But it is only low for very short periods and during clock pulses.

Writing to and reading from the flash works fine. But we have flash corruption from time to time. So I started to check the signals.

I tried with SPI2_HOST and SPI3_HOST and also with different CS pins and several ESP32s.
CS is pulled up with a 4K7 resistor.
Flash: S25FL256SAGNFI000

Can anyone help me with this?

Thanks in advance.
Tobi

Code: Select all

esp_flash_t* example_init_ext_flash(void)
{
  spi_bus_config_t bus_config = {
	.mosi_io_num = GPIO_NUM_12,
	.miso_io_num = GPIO_NUM_13,
	.sclk_io_num = GPIO_NUM_15,
	.quadwp_io_num = -1,
	.quadhd_io_num = -1
    };

    const esp_flash_spi_device_config_t device_config = {
        .host_id = SPI2_HOST,
        .cs_io_num = GPIO_NUM_5,
        .io_mode = SPI_FLASH_SLOWRD,
        .speed = ESP_FLASH_40MHZ,
        .input_delay_ns = 0,
        .cs_id = 0,
        .freq_mhz = 40,
    };

    ESP_LOGI(API_TAG_IO, "Initializing external SPI Module");
    ESP_LOGI(API_TAG_IO, "Pin assignments:");
    ESP_LOGI(API_TAG_IO, "MOSI: %2d   MISO: %2d   SCLK: %2d   CS: %2d",
        bus_config.mosi_io_num, bus_config.miso_io_num,
        bus_config.sclk_io_num, device_config.cs_io_num
    );

    // Initialize the SPI bus
    ESP_ERROR_CHECK(spi_bus_initialize(SPI2_HOST, &bus_config, SPI2_HOST));

    // Add device to the SPI bus
    esp_flash_t* ext_flash;
    ESP_ERROR_CHECK(spi_bus_add_flash_device(&ext_flash, &device_config));
	
    // Probe the Flash chip and initialize it
    // ERASE DOES NOT WORK WITH THIS
    ext_flash->chip_drv = &esp_flash_chip_winbond;
    esp_err_t err = esp_flash_init(ext_flash);
    if (err != ESP_OK) {
        ESP_LOGE(API_TAG_IO, "Failed to initialize external Flash: %s (0x%x)", esp_err_to_name(err), err);
        return NULL;
    }

    ext_flash->size = 32*1024*1024;
    esp_flash_set_chip_write_protect(ext_flash,false);

    return ext_flash;
}
ESP32-S2_SPI_Flash.PNG
ESP32-S2_SPI_Flash.PNG (196.04 KiB) Viewed 1013 times

Re: ESP32-S2 SPI flash CS only low during clock pulse

Posted: Mon Mar 13, 2023 12:24 am
by ESP_Sprite
Your scope is set to 20uS/div and SPI runs at 40MHz, meaning one clock cycle is 1/800th div. Are you sure you're not just zoomed out too much on your scope?

Re: ESP32-S2 SPI flash CS only low during clock pulse

Posted: Mon Mar 13, 2023 8:15 am
by tobi_ffm
You are absolutely right. Oh boy :lol:
Thank you so much!