From dcc82f3ed1c08d2e472bc00803517d8de16bf61e Mon Sep 17 00:00:00 2001 From: Martijn Scheepers Date: Tue, 24 Mar 2020 15:23:20 +0100 Subject: [PATCH 1/4] ESP.getChipModel() returns model of the chip --- cores/esp32/Esp.cpp | 20 ++++++++++++++++++++ cores/esp32/Esp.h | 1 + 2 files changed, 21 insertions(+) diff --git a/cores/esp32/Esp.cpp b/cores/esp32/Esp.cpp index 54451127ef3..d72fbb2cfed 100644 --- a/cores/esp32/Esp.cpp +++ b/cores/esp32/Esp.cpp @@ -218,6 +218,26 @@ uint8_t EspClass::getChipRevision(void) return chip_info.revision; } +const char * EspClass::getChipModel(void) +{ + esp_chip_info_t chip_info; + esp_chip_info(&chip_info); + switch (chip_info.model) { + case 0: + return "ESP32D0WDQ6"; + case 1: + return "ESP32D0WDQ5"; + case 2: + return "ESP32D2WDQ5"; + case 4: + return "ESP32-PICO-D2"; + case 5: + return "ESP32-PICO-D4"; + default: + return "Unknown"; + } +} + const char * EspClass::getSdkVersion(void) { return esp_get_idf_version(); diff --git a/cores/esp32/Esp.h b/cores/esp32/Esp.h index 2580eecf65b..047c5ff9fff 100644 --- a/cores/esp32/Esp.h +++ b/cores/esp32/Esp.h @@ -75,6 +75,7 @@ class EspClass uint32_t getMaxAllocPsram(); uint8_t getChipRevision(); + const char * getChipModel(); uint32_t getCpuFreqMHz(){ return getCpuFrequencyMhz(); } inline uint32_t getCycleCount() __attribute__((always_inline)); const char * getSdkVersion(); From 13dd87377268fff1fa1d50e1a62adfdb32fb8475 Mon Sep 17 00:00:00 2001 From: Martijn Scheepers Date: Tue, 24 Mar 2020 15:31:00 +0100 Subject: [PATCH 2/4] ESP.getChipCores() returns the core count. --- cores/esp32/Esp.cpp | 7 +++++++ cores/esp32/Esp.h | 1 + 2 files changed, 8 insertions(+) diff --git a/cores/esp32/Esp.cpp b/cores/esp32/Esp.cpp index d72fbb2cfed..f66643ec6e2 100644 --- a/cores/esp32/Esp.cpp +++ b/cores/esp32/Esp.cpp @@ -238,6 +238,13 @@ const char * EspClass::getChipModel(void) } } +uint8_t EspClass::getChipCores(void) +{ + esp_chip_info_t chip_info; + esp_chip_info(&chip_info); + return chip_info.cores; +} + const char * EspClass::getSdkVersion(void) { return esp_get_idf_version(); diff --git a/cores/esp32/Esp.h b/cores/esp32/Esp.h index 047c5ff9fff..e0b27e99a57 100644 --- a/cores/esp32/Esp.h +++ b/cores/esp32/Esp.h @@ -76,6 +76,7 @@ class EspClass uint8_t getChipRevision(); const char * getChipModel(); + uint8_t getChipCores(); uint32_t getCpuFreqMHz(){ return getCpuFrequencyMhz(); } inline uint32_t getCycleCount() __attribute__((always_inline)); const char * getSdkVersion(); From 5ef8045164b905ec1b142fb548b9a4af38b58086 Mon Sep 17 00:00:00 2001 From: Martijn Scheepers Date: Tue, 24 Mar 2020 15:43:09 +0100 Subject: [PATCH 3/4] Example gives chip model, revision and core count. --- libraries/ESP32/examples/ChipID/GetChipID/GetChipID.ino | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libraries/ESP32/examples/ChipID/GetChipID/GetChipID.ino b/libraries/ESP32/examples/ChipID/GetChipID/GetChipID.ino index de8a7386b93..c66731f7457 100644 --- a/libraries/ESP32/examples/ChipID/GetChipID/GetChipID.ino +++ b/libraries/ESP32/examples/ChipID/GetChipID/GetChipID.ino @@ -9,6 +9,9 @@ void loop() { Serial.printf("ESP32 Chip ID = %04X",(uint16_t)(chipid>>32));//print High 2 bytes Serial.printf("%08X\n",(uint32_t)chipid);//print Low 4bytes. + Serial.printf("ESP32 Chip model = %s Rev %d\n", ESP.getChipModel(), ESP.getChipRevision()); + Serial.printf("This chip has %d cores\n", ESP.getChipCores()); + delay(3000); } From 4aabaa61db062d24a0f8f1ff7ce637586dfe1452 Mon Sep 17 00:00:00 2001 From: Martijn Scheepers Date: Thu, 26 Mar 2020 11:08:01 +0100 Subject: [PATCH 4/4] Read efuse for chipmodel --- cores/esp32/Esp.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/cores/esp32/Esp.cpp b/cores/esp32/Esp.cpp index f66643ec6e2..e125df9a04f 100644 --- a/cores/esp32/Esp.cpp +++ b/cores/esp32/Esp.cpp @@ -220,18 +220,18 @@ uint8_t EspClass::getChipRevision(void) const char * EspClass::getChipModel(void) { - esp_chip_info_t chip_info; - esp_chip_info(&chip_info); - switch (chip_info.model) { - case 0: - return "ESP32D0WDQ6"; - case 1: - return "ESP32D0WDQ5"; - case 2: - return "ESP32D2WDQ5"; - case 4: + uint32_t chip_ver = REG_GET_FIELD(EFUSE_BLK0_RDATA3_REG, EFUSE_RD_CHIP_VER_PKG); + uint32_t pkg_ver = chip_ver & 0x7; + switch (pkg_ver) { + case EFUSE_RD_CHIP_VER_PKG_ESP32D0WDQ6 : + return "ESP32-D0WDQ6"; + case EFUSE_RD_CHIP_VER_PKG_ESP32D0WDQ5 : + return "ESP32-D0WDQ5"; + case EFUSE_RD_CHIP_VER_PKG_ESP32D2WDQ5 : + return "ESP32-D2WDQ5"; + case EFUSE_RD_CHIP_VER_PKG_ESP32PICOD2 : return "ESP32-PICO-D2"; - case 5: + case EFUSE_RD_CHIP_VER_PKG_ESP32PICOD4 : return "ESP32-PICO-D4"; default: return "Unknown";