64 char *buf = buffer.data();
65 const size_t size = RESET_REASON_BUFFER_SIZE;
67 unsigned reason = esp_reset_reason();
68 if (reason <
sizeof(RESET_REASONS) /
sizeof(RESET_REASONS[0])) {
69 if (reason == ESP_RST_SW) {
72 char reboot_source[REBOOT_MAX_LEN]{};
73 if (pref.load(&reboot_source)) {
74 reboot_source[REBOOT_MAX_LEN - 1] =
'\0';
75 snprintf(buf,
size,
"Reboot request from %s", reboot_source);
77 snprintf(buf,
size,
"%s", RESET_REASONS[reason]);
80 snprintf(buf,
size,
"%s", RESET_REASONS[reason]);
83 snprintf(buf,
size,
"unknown source");
127 static constexpr auto NUM_CAUSES =
sizeof(WAKEUP_CAUSES) /
sizeof(WAKEUP_CAUSES[0]);
128#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(6, 0, 0)
130 uint32_t causes = esp_sleep_get_wakeup_causes();
132 return WAKEUP_CAUSES[0];
134 char *p = buffer.data();
135 char *
end = p + buffer.size();
137 const char *sep =
"";
138 for (
unsigned i = 0; i < NUM_CAUSES && p <
end; i++) {
139 if (causes & (1U << i)) {
140 size_t needed = strlen(sep) + strlen(WAKEUP_CAUSES[i]);
141 if (p + needed >=
end) {
144 p += snprintf(p,
end - p,
"%s%s", sep, WAKEUP_CAUSES[i]);
148 return buffer.data();
150 unsigned reason = esp_sleep_get_wakeup_cause();
151 if (reason < NUM_CAUSES) {
152 return WAKEUP_CAUSES[reason];
154 return "unknown source";
161 " %-12s %-4s %-8s %-10s %-10s",
162 "Name",
"Type",
"Subtype",
"Address",
"Size");
163 esp_partition_iterator_t it = esp_partition_find(ESP_PARTITION_TYPE_ANY, ESP_PARTITION_SUBTYPE_ANY, NULL);
165 const esp_partition_t *partition = esp_partition_get(it);
166 ESP_LOGCONFIG(TAG,
" %-12s %-4d %-8d 0x%08" PRIX32
" 0x%08" PRIX32, partition->label, partition->type,
167 partition->subtype, partition->address, partition->size);
168 it = esp_partition_next(it);
170 esp_partition_iterator_release(it);
189 constexpr size_t size = DEVICE_INFO_BUFFER_SIZE;
190 char *buf = buffer.data();
192#if defined(USE_ARDUINO)
193 const char *flash_mode;
194 switch (ESP.getFlashChipMode()) {
208 flash_mode =
"FAST_READ";
211 flash_mode =
"SLOW_READ";
214 flash_mode =
"UNKNOWN";
216 uint32_t flash_size = ESP.getFlashChipSize() / 1024;
217 uint32_t flash_speed = ESP.getFlashChipSpeed() / 1000000;
218 pos = buf_append_printf(buf,
size,
pos,
"|Flash: %" PRIu32
"kB Speed:%" PRIu32
"MHz Mode:%s", flash_size, flash_speed,
222 esp_chip_info_t info;
223 esp_chip_info(&info);
224 const char *model = ESPHOME_VARIANT;
227 pos = buf_append_printf(buf,
size,
pos,
"|Chip: %s Features:", model);
228 bool first_feature =
true;
229 for (
const auto &feature : CHIP_FEATURES) {
230 if (info.features & feature.bit) {
231 pos = buf_append_printf(buf,
size,
pos,
"%s%s", first_feature ?
"" :
", ", feature.name);
232 first_feature =
false;
233 info.features &= ~feature.bit;
236 if (info.features != 0) {
237 pos = buf_append_printf(buf,
size,
pos,
"%sOther:0x%" PRIx32, first_feature ?
"" :
", ", info.features);
239 pos = buf_append_printf(buf,
size,
pos,
" Cores:%u Revision:%u", info.cores, info.revision);
242 pos = buf_append_printf(buf,
size,
pos,
"|CPU Frequency: %" PRIu32
" MHz", cpu_freq_mhz);
244 char reset_buffer[RESET_REASON_BUFFER_SIZE];
245 char wakeup_buffer[WAKEUP_CAUSE_BUFFER_SIZE];
246 const char *reset_reason =
get_reset_reason_(std::span<char, RESET_REASON_BUFFER_SIZE>(reset_buffer));
247 const char *wakeup_cause =
get_wakeup_cause_(std::span<char, WAKEUP_CAUSE_BUFFER_SIZE>(wakeup_buffer));
253 "ESP32 debug info:\n"
257 " CPU Frequency: %" PRIu32
" MHz\n"
258 " ESP-IDF Version: %s\n"
259 " EFuse MAC: %02X:%02X:%02X:%02X:%02X:%02X\n"
260 " Reset Reason: %s\n"
262 model, info.cores, info.revision, cpu_freq_mhz, esp_get_idf_version(), mac[0], mac[1], mac[2], mac[3],
263 mac[4], mac[5], reset_reason, wakeup_cause);
264#if defined(USE_ARDUINO)
265 ESP_LOGD(TAG,
" Flash: Size=%" PRIu32
"kB Speed=%" PRIu32
"MHz Mode=%s", flash_size, flash_speed, flash_mode);
269 ESP_LOGD(TAG,
" Framework: Arduino");
270 pos = buf_append_printf(buf,
size,
pos,
"|Framework: Arduino");
272 ESP_LOGD(TAG,
" Framework: ESP-IDF");
273 pos = buf_append_printf(buf,
size,
pos,
"|Framework: ESP-IDF");
276 pos = buf_append_printf(buf,
size,
pos,
"|ESP-IDF: %s", esp_get_idf_version());
277 pos = buf_append_printf(buf,
size,
pos,
"|EFuse MAC: %02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3],
279 pos = buf_append_printf(buf,
size,
pos,
"|Reset: %s", reset_reason);
280 pos = buf_append_printf(buf,
size,
pos,
"|Wakeup: %s", wakeup_cause);