Skip to content

Commit 2390a54

Browse files
authored
Refactor flash chip mode handling for ESP32 variants
1 parent 65015d5 commit 2390a54

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

cores/esp32/Esp.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -364,17 +364,13 @@ uint32_t EspClass::getFlashChipSpeed(void) {
364364
return magicFlashChipSpeed(fhdr.spi_speed);
365365
}
366366

367-
// FIXME for P4
368-
#if !defined(CONFIG_IDF_TARGET_ESP32P4)
369367
FlashMode_t EspClass::getFlashChipMode(void) {
370-
#if CONFIG_IDF_TARGET_ESP32S2
368+
#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32P4
371369
uint32_t spi_ctrl = REG_READ(PERIPHS_SPI_FLASH_CTRL);
372-
#else
373-
#if CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C6
370+
#elif CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C5
374371
uint32_t spi_ctrl = REG_READ(DR_REG_SPI0_BASE + 0x8);
375372
#else
376373
uint32_t spi_ctrl = REG_READ(SPI_CTRL_REG(0));
377-
#endif
378374
#endif
379375
/* Not all of the following constants are already defined in older versions of spi_reg.h, so do it manually for now*/
380376
if (spi_ctrl & BIT(24)) { //SPI_FREAD_QIO
@@ -390,9 +386,7 @@ FlashMode_t EspClass::getFlashChipMode(void) {
390386
} else {
391387
return (FM_SLOW_READ);
392388
}
393-
return (FM_DOUT);
394389
}
395-
#endif // if !defined(CONFIG_IDF_TARGET_ESP32P4)
396390

397391
uint32_t EspClass::magicFlashChipSize(uint8_t flashByte) {
398392
/*
@@ -557,13 +551,19 @@ uint8_t EspClass::getFlashSourceFrequencyMHz(void) {
557551
*/
558552
uint8_t EspClass::getFlashClockDivider(void) {
559553
#if CONFIG_IDF_TARGET_ESP32
560-
// ESP32 classic: Use SPI0 structure
554+
// ESP32 classic: Use SPI0 structure (no 'mem_' prefix)
561555
if (SPI0.clock.clk_equ_sysclk) {
562556
return 1; // 1:1 clock (no divider)
563557
}
564558
return SPI0.clock.clkcnt_n + 1;
559+
#elif CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32C5
560+
// ESP32-P4 and ESP32-C5: Use SPIMEM0 structure with 'mem_' prefix
561+
if (SPIMEM0.clock.mem_clk_equ_sysclk) {
562+
return 1; // 1:1 clock (no divider)
563+
}
564+
return SPIMEM0.clock.mem_clkcnt_n + 1;
565565
#else
566-
// Modern chips (S2, S3, C2, C3, C5, C6, H2, P4): Use SPIMEM0 structure
566+
// ESP32-S2, S3, C2, C3, C6, H2: Use SPIMEM0 structure without 'mem_' prefix
567567
if (SPIMEM0.clock.clk_equ_sysclk) {
568568
return 1; // 1:1 clock (no divider)
569569
}

0 commit comments

Comments
 (0)