@@ -39,7 +39,9 @@ extern "C" {
39
39
40
40
// Include HAL layer for flash clock access
41
41
#include " hal/spi_flash_ll.h"
42
- #if !CONFIG_IDF_TARGET_ESP32
42
+ #if CONFIG_IDF_TARGET_ESP32
43
+ #include " soc/spi_struct.h"
44
+ #else
43
45
#include " hal/spimem_flash_ll.h"
44
46
#include " soc/spi_mem_struct.h"
45
47
#endif
@@ -549,18 +551,11 @@ uint8_t EspClass::getFlashSourceFrequencyMHz(void) {
549
551
*/
550
552
uint8_t EspClass::getFlashClockDivider (void ) {
551
553
#if CONFIG_IDF_TARGET_ESP32
552
- // ESP32 classic: Read CLOCK register directly (no SPIMEM structure available)
553
- volatile uint32_t * clock_reg = (volatile uint32_t *)(DR_REG_SPI0_BASE + 0x14 );
554
- uint32_t clock_val = *clock_reg;
555
-
556
- // Bit 31: if set, clock is 1:1 (no divider)
557
- if (clock_val & (1 << 31 )) {
558
- return 1 ;
554
+ // ESP32 classic: Use SPI0 structure
555
+ if (SPI0.clock .clk_equ_sysclk ) {
556
+ return 1 ; // 1:1 clock (no divider)
559
557
}
560
-
561
- // Bits 16-23: clkdiv_pre
562
- uint8_t clkdiv_pre = (clock_val >> 16 ) & 0xFF ;
563
- return clkdiv_pre + 1 ;
558
+ return SPI0.clock .clkcnt_n + 1 ;
564
559
#else
565
560
// Modern chips (S2, S3, C2, C3, C5, C6, H2, P4): Use SPIMEM0 structure
566
561
if (SPIMEM0.clock .clk_equ_sysclk ) {
0 commit comments