@@ -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
}
@@ -327,31 +336,28 @@ uint32_t EspClass::getFlashChipSpeed(void)
327
336
return magicFlashChipSpeed (fhdr.spi_speed );
328
337
}
329
338
330
- FlashMode_t EspClass::getFlashChipMode (void )
331
- {
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 );
337
- }
338
-
339
- uint32_t EspClass::magicFlashChipSize (uint8_t byte)
340
- {
341
- switch (byte & 0x0F ) {
342
- case 0x0 : // 8 MBit (1MB)
343
- return (1_MB);
344
- case 0x1 : // 16 MBit (2MB)
345
- return (2_MB);
346
- case 0x2 : // 32 MBit (4MB)
347
- return (4_MB);
348
- case 0x3 : // 64 MBit (8MB)
349
- return (8_MB);
350
- case 0x4 : // 128 MBit (16MB)
351
- return (16_MB);
352
- default : // fail?
353
- return 0 ;
354
- }
339
+ const char * EspClass::getFlashChipMode (void )
340
+ {
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 (" QIO" );
349
+ } else if (spi_ctrl & BIT (20 )) { // SPI_FREAD_QUAD
350
+ return (" QOUT" );
351
+ } else if (spi_ctrl & BIT (23 )) { // SPI_FREAD_DIO
352
+ return (" DIO" );
353
+ } else if (spi_ctrl & BIT (14 )) { // SPI_FREAD_DUAL
354
+ return (" DOUT" );
355
+ } else if (spi_ctrl & BIT (13 )) { // SPI_FASTRD_MODE
356
+ return (" Fast" );
357
+ } else {
358
+ return (" Slow" );
359
+ }
360
+ return (" DOUT" );
355
361
}
356
362
357
363
uint32_t EspClass::magicFlashChipSpeed (uint8_t byte)
@@ -370,15 +376,6 @@ uint32_t EspClass::magicFlashChipSpeed(uint8_t byte)
370
376
}
371
377
}
372
378
373
- FlashMode_t EspClass::magicFlashChipMode (uint8_t byte)
374
- {
375
- FlashMode_t mode = (FlashMode_t) byte;
376
- if (mode > FM_SLOW_READ) {
377
- mode = FM_UNKNOWN;
378
- }
379
- return mode;
380
- }
381
-
382
379
bool EspClass::flashEraseSector (uint32_t sector)
383
380
{
384
381
return spi_flash_erase_sector (sector) == ESP_OK;
0 commit comments