62 char *buf = buffer.data();
63 const size_t size = RESET_REASON_BUFFER_SIZE;
65 unsigned reason = esp_reset_reason();
66 if (reason <
sizeof(RESET_REASONS) /
sizeof(RESET_REASONS[0])) {
67 if (reason == ESP_RST_SW) {
69 char reboot_source[REBOOT_MAX_LEN]{};
70 if (pref.load(&reboot_source)) {
71 reboot_source[REBOOT_MAX_LEN - 1] =
'\0';
72 snprintf(buf,
size,
"Reboot request from %s", reboot_source);
74 snprintf(buf,
size,
"%s", RESET_REASONS[reason]);
77 snprintf(buf,
size,
"%s", RESET_REASONS[reason]);
80 snprintf(buf,
size,
"unknown source");
82 ESP_LOGD(TAG,
"Reset Reason: %s", buf);
118 " %-12s %-4s %-8s %-10s %-10s",
119 "Name",
"Type",
"Subtype",
"Address",
"Size");
120 esp_partition_iterator_t it = esp_partition_find(ESP_PARTITION_TYPE_ANY, ESP_PARTITION_SUBTYPE_ANY, NULL);
122 const esp_partition_t *partition = esp_partition_get(it);
123 ESP_LOGCONFIG(TAG,
" %-12s %-4d %-8d 0x%08" PRIX32
" 0x%08" PRIX32, partition->label, partition->type,
124 partition->subtype, partition->address, partition->size);
125 it = esp_partition_next(it);
127 esp_partition_iterator_release(it);
146 constexpr size_t size = DEVICE_INFO_BUFFER_SIZE;
147 char *buf = buffer.data();
149#if defined(USE_ARDUINO)
150 const char *flash_mode;
151 switch (ESP.getFlashChipMode()) {
165 flash_mode =
"FAST_READ";
168 flash_mode =
"SLOW_READ";
171 flash_mode =
"UNKNOWN";
173 uint32_t flash_size = ESP.getFlashChipSize() / 1024;
174 uint32_t flash_speed = ESP.getFlashChipSpeed() / 1000000;
175 ESP_LOGD(TAG,
"Flash Chip: Size=%" PRIu32
"kB Speed=%" PRIu32
"MHz Mode=%s", flash_size, flash_speed, flash_mode);
176 pos = buf_append(buf,
size,
pos,
"|Flash: %" PRIu32
"kB Speed:%" PRIu32
"MHz Mode:%s", flash_size, flash_speed,
180 esp_chip_info_t info;
181 esp_chip_info(&info);
182 const char *model = ESPHOME_VARIANT;
185 pos = buf_append(buf,
size,
pos,
"|Chip: %s Features:", model);
186 bool first_feature =
true;
187 for (
const auto &feature : CHIP_FEATURES) {
188 if (info.features & feature.bit) {
189 pos = buf_append(buf,
size,
pos,
"%s%s", first_feature ?
"" :
", ", feature.name);
190 first_feature =
false;
191 info.features &= ~feature.bit;
194 if (info.features != 0) {
195 pos = buf_append(buf,
size,
pos,
"%sOther:0x%" PRIx32, first_feature ?
"" :
", ", info.features);
197 ESP_LOGD(TAG,
"Chip: Model=%s, Cores=%u, Revision=%u", model, info.cores, info.revision);
198 pos = buf_append(buf,
size,
pos,
" Cores:%u Revision:%u", info.cores, info.revision);
201 ESP_LOGD(TAG,
"CPU Frequency: %" PRIu32
" MHz", cpu_freq_mhz);
202 pos = buf_append(buf,
size,
pos,
"|CPU Frequency: %" PRIu32
" MHz", cpu_freq_mhz);
206 ESP_LOGD(TAG,
"Framework: Arduino");
207 pos = buf_append(buf,
size,
pos,
"|Framework: Arduino");
208#elif defined(USE_ESP32)
209 ESP_LOGD(TAG,
"Framework: ESP-IDF");
210 pos = buf_append(buf,
size,
pos,
"|Framework: ESP-IDF");
212 ESP_LOGW(TAG,
"Framework: UNKNOWN");
213 pos = buf_append(buf,
size,
pos,
"|Framework: UNKNOWN");
216 ESP_LOGD(TAG,
"ESP-IDF Version: %s", esp_get_idf_version());
217 pos = buf_append(buf,
size,
pos,
"|ESP-IDF: %s", esp_get_idf_version());
221 ESP_LOGD(TAG,
"EFuse MAC: %02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
222 pos = buf_append(buf,
size,
pos,
"|EFuse MAC: %02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4],
225 char reason_buffer[RESET_REASON_BUFFER_SIZE];
226 const char *reset_reason =
get_reset_reason_(std::span<char, RESET_REASON_BUFFER_SIZE>(reason_buffer));
227 pos = buf_append(buf,
size,
pos,
"|Reset: %s", reset_reason);
229 const char *wakeup_cause =
get_wakeup_cause_(std::span<char, RESET_REASON_BUFFER_SIZE>(reason_buffer));
230 pos = buf_append(buf,
size,
pos,
"|Wakeup: %s", wakeup_cause);