@@ -855,17 +855,15 @@ String GetDeviceHardware(void) {
855
855
// https://www.espressif.com/en/products/socs
856
856
857
857
/*
858
- Source: esp-idf esp_system.h or arduino core esp_chip_info.h and esptool
858
+ Source: esp-idf esp_system.h and esptool
859
859
860
860
typedef enum {
861
861
CHIP_ESP32 = 1, //!< ESP32
862
862
CHIP_ESP32S2 = 2, //!< ESP32-S2
863
863
CHIP_ESP32S3 = 9, //!< ESP32-S3
864
864
CHIP_ESP32C3 = 5, //!< ESP32-C3
865
+ CHIP_ESP32H2 = 6, //!< ESP32-H2
865
866
CHIP_ESP32C2 = 12, //!< ESP32-C2
866
- CHIP_ESP32C6 = 13, //!< ESP32-C6
867
- CHIP_ESP32H2 = 16, //!< ESP32-H2
868
- CHIP_POSIX_LINUX = 999, //!< The code is running on POSIX/Linux simulator
869
867
} esp_chip_model_t;
870
868
871
869
// Chip feature flags, used in esp_chip_info_t
@@ -876,12 +874,13 @@ typedef enum {
876
874
#define CHIP_FEATURE_IEEE802154 BIT(6) //!< Chip has IEEE 802.15.4
877
875
#define CHIP_FEATURE_EMB_PSRAM BIT(7) //!< Chip has embedded psram
878
876
877
+
879
878
// The structure represents information about the chip
880
879
typedef struct {
881
880
esp_chip_model_t model; //!< chip model, one of esp_chip_model_t
882
881
uint32_t features; //!< bit mask of CHIP_FEATURE_x feature flags
883
- uint16_t revision; //!< chip revision number (in format MXX; where M - wafer major version, XX - wafer minor version)
884
882
uint8_t cores; //!< number of CPU cores
883
+ uint8_t revision; //!< chip revision number
885
884
} esp_chip_info_t;
886
885
887
886
*/
@@ -1006,8 +1005,20 @@ typedef struct {
1006
1005
- Rich set of peripheral interfaces and GPIOs, ideal for various scenarios and complex applications
1007
1006
*/
1008
1007
#ifdef CONFIG_IDF_TARGET_ESP32C3
1008
+ /* esptool:
1009
+ def get_pkg_version(self):
1010
+ num_word = 3
1011
+ block1_addr = self.EFUSE_BASE + 0x044
1012
+ word3 = self.read_reg(block1_addr + (4 * num_word))
1013
+ pkg_version = (word3 >> 21) & 0x0F
1014
+ return pkg_version
1015
+ */
1009
1016
uint32_t chip_ver = REG_GET_FIELD (EFUSE_RD_MAC_SPI_SYS_3_REG, EFUSE_PKG_VERSION);
1010
1017
uint32_t pkg_version = chip_ver & 0x7 ;
1018
+ // uint32_t pkg_version = esp_efuse_get_pkg_ver();
1019
+
1020
+ // AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("HDW: ESP32 Model %d, Revision %d, Core %d, Package %d"), chip_info.model, chip_revision, chip_info.cores, chip_ver);
1021
+
1011
1022
switch (pkg_version) {
1012
1023
case 0 : return F (" ESP32-C3" ); // Max 160MHz, Single core, QFN 5*5, ESP32-C3-WROOM-02, ESP32-C3-DevKitC-02
1013
1024
case 1 : return F (" ESP32-C3FH4" ); // Max 160MHz, Single core, QFN 5*5, 4MB embedded flash, ESP32-C3-MINI-1, ESP32-C3-DevKitM-1
@@ -1019,6 +1030,25 @@ typedef struct {
1019
1030
return F (" ESP32-S3" );
1020
1031
}
1021
1032
else if (7 == chip_model) { // ESP32-C6(beta)
1033
+ #ifdef CONFIG_IDF_TARGET_ESP32C6
1034
+ /* esptool:
1035
+ def get_pkg_version(self):
1036
+ num_word = 3
1037
+ block1_addr = self.EFUSE_BASE + 0x044
1038
+ word3 = self.read_reg(block1_addr + (4 * num_word))
1039
+ pkg_version = (word3 >> 21) & 0x0F
1040
+ return pkg_version
1041
+ */
1042
+ uint32_t chip_ver = REG_GET_FIELD (EFUSE_RD_MAC_SPI_SYS_3_REG, EFUSE_PKG_VERSION);
1043
+ uint32_t pkg_version = chip_ver & 0x7 ;
1044
+ // uint32_t pkg_version = esp_efuse_get_pkg_ver();
1045
+
1046
+ // AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("HDW: ESP32 Model %d, Revision %d, Core %d, Package %d"), chip_info.model, chip_revision, chip_info.cores, chip_ver);
1047
+
1048
+ switch (pkg_version) {
1049
+ case 0 : return F (" ESP32-C6" );
1050
+ }
1051
+ #endif // CONFIG_IDF_TARGET_ESP32C6
1022
1052
return F (" ESP32-C6" );
1023
1053
}
1024
1054
else if (9 == chip_model) { // ESP32-S3
@@ -1032,16 +1062,30 @@ typedef struct {
1032
1062
- Reliable security features ensured by RSA-based secure boot, AES-XTS-based flash encryption, the innovative digital signature and the HMAC peripheral, “World Controller”
1033
1063
*/
1034
1064
#ifdef CONFIG_IDF_TARGET_ESP32S3
1035
- // chip-debug-report.cpp
1036
- uint32_t chip_ver = REG_GET_FIELD (EFUSE_RD_MAC_SPI_SYS_3_REG, EFUSE_PKG_VERSION);
1037
- uint32_t pkg_version = chip_ver & 0x7 ;
1038
- switch (pkg_version) {
1039
- case 0 : return F (" ESP32-S3" );
1040
- }
1065
+ // no variants for now
1041
1066
#endif // CONFIG_IDF_TARGET_ESP32S3
1042
1067
return F (" ESP32-S3" ); // Max 240MHz, Dual core, QFN 7*7, ESP32-S3-WROOM-1, ESP32-S3-DevKitC-1
1043
1068
}
1044
1069
else if (10 == chip_model) { // ESP32-H2(beta1)
1070
+ #ifdef CONFIG_IDF_TARGET_ESP32H2
1071
+ /* esptool:
1072
+ def get_pkg_version(self):
1073
+ num_word = 3
1074
+ block1_addr = self.EFUSE_BASE + 0x044
1075
+ word3 = self.read_reg(block1_addr + (4 * num_word))
1076
+ pkg_version = (word3 >> 21) & 0x0F
1077
+ return pkg_version
1078
+ */
1079
+ uint32_t chip_ver = REG_GET_FIELD (EFUSE_RD_MAC_SPI_SYS_3_REG, EFUSE_PKG_VERSION);
1080
+ uint32_t pkg_version = chip_ver & 0x7 ;
1081
+ // uint32_t pkg_version = esp_efuse_get_pkg_ver();
1082
+
1083
+ // AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("HDW: ESP32 Model %d, Revision %d, Core %d, Package %d"), chip_info.model, chip_revision, chip_info.cores, chip_ver);
1084
+
1085
+ switch (pkg_version) {
1086
+ case 0 : return F (" ESP32-H2" );
1087
+ }
1088
+ #endif // CONFIG_IDF_TARGET_ESP32H2
1045
1089
return F (" ESP32-H2" );
1046
1090
}
1047
1091
else if (12 == chip_model) { // ESP32-C2 = ESP8684
@@ -1053,15 +1097,7 @@ typedef struct {
1053
1097
- 576 KB ROM, 272 KB SRAM (16 KB for cache) on the chip
1054
1098
- 14 programmable GPIOs: SPI, UART, I2C, LED PWM controller, General DMA controller (GDMA), SAR ADC, Temperature sensor
1055
1099
*/
1056
- #ifdef CONFIG_IDF_TARGET_ESP32C2
1057
- // chip-debug-report.cpp
1058
- uint32_t chip_ver = REG_GET_FIELD (EFUSE_RD_BLK2_DATA1_REG, EFUSE_PKG_VERSION);
1059
- uint32_t pkg_version = chip_ver & 0x7 ;
1060
1100
1061
- switch (pkg_version) {
1062
- case 0 : return F (" ESP32-C2" );
1063
- }
1064
- #endif // CONFIG_IDF_TARGET_ESP32C2
1065
1101
return F (" ESP32-C2" );
1066
1102
}
1067
1103
else if (13 == chip_model) { // ESP32-C6
@@ -1073,30 +1109,12 @@ typedef struct {
1073
1109
- 320 KB ROM, 512 KB SRAM, 16 KB Low-power SRAM on the chip, and works with external flash
1074
1110
- 30 (QFN40) or 22 (QFN32) programmable GPIOs, with support for SPI, UART, I2C, I2S, RMT, TWAI and PWM
1075
1111
*/
1076
- #ifdef CONFIG_IDF_TARGET_ESP32C6
1077
- // chip-debug-report.cpp
1078
- uint32_t chip_ver = REG_GET_FIELD (EFUSE_RD_MAC_SPI_SYS_3_REG, EFUSE_PKG_VERSION);
1079
- uint32_t pkg_version = chip_ver & 0x7 ;
1080
- switch (pkg_version) {
1081
- case 0 : return F (" ESP32-C6" );
1082
- }
1083
- #endif // CONFIG_IDF_TARGET_ESP32C6
1112
+
1084
1113
return F (" ESP32-C6" );
1085
1114
}
1086
1115
else if (14 == chip_model) { // ESP32-H2(beta2)
1087
1116
return F (" ESP32-H2" );
1088
1117
}
1089
- else if (16 == chip_model) { // ESP32-H2
1090
- #ifdef CONFIG_IDF_TARGET_ESP32H2
1091
- // chip-debug-report.cpp
1092
- uint32_t chip_ver = REG_GET_FIELD (EFUSE_RD_MAC_SYS_4_REG, EFUSE_PKG_VERSION);
1093
- uint32_t pkg_version = chip_ver & 0x7 ;
1094
- switch (pkg_version) {
1095
- case 0 : return F (" ESP32-H2" );
1096
- }
1097
- #endif // CONFIG_IDF_TARGET_ESP32H2
1098
- return F (" ESP32-H2" );
1099
- }
1100
1118
return F (" ESP32" );
1101
1119
}
1102
1120
@@ -1109,16 +1127,11 @@ String GetDeviceHardwareRevision(void) {
1109
1127
1110
1128
esp_chip_info_t chip_info;
1111
1129
esp_chip_info (&chip_info);
1112
- char revision[16 ] = { 0 };
1130
+ char revision[10 ] = { 0 };
1113
1131
if (chip_info.revision ) {
1114
- // idf5 efuse_hal_chip_revision(void)
1115
- if (chip_info.revision >= 100 ){
1116
- snprintf_P (revision, sizeof (revision), PSTR (" rev %d.%d" ), chip_info.revision / 100 , chip_info.revision % 100 );
1117
- } else {
1118
- snprintf_P (revision, sizeof (revision), PSTR (" rev %d" ), chip_info.revision );
1119
- }
1132
+ snprintf_P (revision, sizeof (revision), PSTR (" rev.%d" ), chip_info.revision );
1120
1133
}
1121
- result += revision; // ESP32-C3 rev 3
1134
+ result += revision; // ESP32-C3 rev. 3
1122
1135
1123
1136
return result;
1124
1137
}
0 commit comments