@@ -30,6 +30,7 @@ extern "C" {
30
30
}
31
31
#include < MD5Builder.h>
32
32
33
+ #include " soc/spi_reg.h"
33
34
#include " esp_system.h"
34
35
#ifdef ESP_IDF_VERSION_MAJOR // IDF 4+
35
36
#if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4
@@ -55,6 +56,14 @@ extern "C" {
55
56
#define ESP_FLASH_IMAGE_BASE 0x1000
56
57
#endif
57
58
59
+ // REG_SPI_BASE is not defined for S3/C3 ??
60
+
61
+ #if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3
62
+ #ifndef REG_SPI_BASE
63
+ #define REG_SPI_BASE (i ) (DR_REG_SPI1_BASE + (((i)>1 ) ? (((i)* 0x1000 ) + 0x20000 ) : (((~(i)) & 1 )* 0x1000 )))
64
+ #endif // REG_SPI_BASE
65
+ #endif // TARGET
66
+
58
67
/* *
59
68
* User-defined Literals
60
69
* usage:
@@ -192,7 +201,7 @@ static uint32_t sketchSize(sketchSize_t response) {
192
201
return data.image_len ;
193
202
}
194
203
}
195
-
204
+
196
205
uint32_t EspClass::getSketchSize () {
197
206
return sketchSize (SKETCH_SIZE_TOTAL);
198
207
}
@@ -329,11 +338,26 @@ uint32_t EspClass::getFlashChipSpeed(void)
329
338
330
339
FlashMode_t EspClass::getFlashChipMode (void )
331
340
{
332
- esp_image_header_t fhdr;
333
- if (flashRead (ESP_FLASH_IMAGE_BASE, (uint32_t *)&fhdr, sizeof (esp_image_header_t )) && fhdr.magic != ESP_IMAGE_HEADER_MAGIC) {
334
- return FM_UNKNOWN;
335
- }
336
- return magicFlashChipMode (fhdr.spi_mode );
341
+ #if CONFIG_IDF_TARGET_ESP32S2
342
+ uint32_t spi_ctrl = REG_READ (PERIPHS_SPI_FLASH_CTRL);
343
+ #else
344
+ uint32_t spi_ctrl = REG_READ (SPI_CTRL_REG (0 ));
345
+ #endif
346
+ /* Not all of the following constants are already defined in older versions of spi_reg.h, so do it manually for now*/
347
+ if (spi_ctrl & BIT (24 )) { // SPI_FREAD_QIO
348
+ return (FM_QIO);
349
+ } else if (spi_ctrl & BIT (20 )) { // SPI_FREAD_QUAD
350
+ return (FM_QOUT);
351
+ } else if (spi_ctrl & BIT (23 )) { // SPI_FREAD_DIO
352
+ return (FM_DIO);
353
+ } else if (spi_ctrl & BIT (14 )) { // SPI_FREAD_DUAL
354
+ return (FM_DOUT);
355
+ } else if (spi_ctrl & BIT (13 )) { // SPI_FASTRD_MODE
356
+ return (FM_FAST_READ);
357
+ } else {
358
+ return (FM_SLOW_READ);
359
+ }
360
+ return (FM_DOUT);
337
361
}
338
362
339
363
uint32_t EspClass::magicFlashChipSize (uint8_t byte)
0 commit comments