@@ -364,17 +364,13 @@ uint32_t EspClass::getFlashChipSpeed(void) {
364
364
return magicFlashChipSpeed (fhdr.spi_speed );
365
365
}
366
366
367
- // FIXME for P4
368
- #if !defined(CONFIG_IDF_TARGET_ESP32P4)
369
367
FlashMode_t EspClass::getFlashChipMode (void ) {
370
- #if CONFIG_IDF_TARGET_ESP32S2
368
+ #if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32P4
371
369
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
374
371
uint32_t spi_ctrl = REG_READ (DR_REG_SPI0_BASE + 0x8 );
375
372
#else
376
373
uint32_t spi_ctrl = REG_READ (SPI_CTRL_REG (0 ));
377
- #endif
378
374
#endif
379
375
/* Not all of the following constants are already defined in older versions of spi_reg.h, so do it manually for now*/
380
376
if (spi_ctrl & BIT (24 )) { // SPI_FREAD_QIO
@@ -390,9 +386,7 @@ FlashMode_t EspClass::getFlashChipMode(void) {
390
386
} else {
391
387
return (FM_SLOW_READ);
392
388
}
393
- return (FM_DOUT);
394
389
}
395
- #endif // if !defined(CONFIG_IDF_TARGET_ESP32P4)
396
390
397
391
uint32_t EspClass::magicFlashChipSize (uint8_t flashByte) {
398
392
/*
@@ -557,13 +551,19 @@ uint8_t EspClass::getFlashSourceFrequencyMHz(void) {
557
551
*/
558
552
uint8_t EspClass::getFlashClockDivider (void ) {
559
553
#if CONFIG_IDF_TARGET_ESP32
560
- // ESP32 classic: Use SPI0 structure
554
+ // ESP32 classic: Use SPI0 structure (no 'mem_' prefix)
561
555
if (SPI0.clock .clk_equ_sysclk ) {
562
556
return 1 ; // 1:1 clock (no divider)
563
557
}
564
558
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 ;
565
565
#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
567
567
if (SPIMEM0.clock .clk_equ_sysclk ) {
568
568
return 1 ; // 1:1 clock (no divider)
569
569
}
0 commit comments