ESP32 постоянно перезагружается из-за «ошибки чтения flash, 1000»

#esp32

Вопрос:

Ребята, я не мог решить, относится ли это к теме или нет, но мне кажется, что это связано с программированием.

У меня есть плата ESP32, встроенная в NodeMCU. Я подключил последовательный монитор UART2USB непосредственно к RX-TX ESP32, и первоначально он был напечатан на последовательной консоли после включения питания:

 rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0x00
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0008,len:8
load:0x3fff0010,len:3480
load:0x40078000,len:7804
ho 0 tail 12 room 4
load:0x40080000,len:252
entry 0x40080034
I (46) boot: ESP-IDF v2.0-3-gbef9896 2nd stage bootloader
 

Я последовал инструкциям Эспрессифа, чтобы создать простейшую программу helloworld:

 #include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"

void app_main(void)
{
    printf("Hello world!n");

    /* Print chip information */
    esp_chip_info_t chip_info;
    esp_chip_info(amp;chip_info);
    printf("This is %s chip with %d CPU core(s), WiFi%s%s, ",
            CONFIG_IDF_TARGET,
            chip_info.cores,
            (chip_info.features amp; CHIP_FEATURE_BT) ? "/BT" : "",
            (chip_info.features amp; CHIP_FEATURE_BLE) ? "/BLE" : "");

    printf("silicon revision %d, ", chip_info.revision);

    printf("%dMB %s flashn", spi_flash_get_chip_size() / (1024 * 1024),
            (chip_info.features amp; CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");

    printf("Minimum free heap size: %d bytesn", esp_get_minimum_free_heap_size());

    for (int i = 10; i >= 0; i--) {
        printf("Restarting in %d seconds...n", i);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
    printf("Restarting now.n");
    fflush(stdout);
    esp_restart();
}
 

Кроме того, я успешно (я полагаю) скомпилировал и прошил (без ошибок) этот пример hello world для ESP32.

После этого, однако, это печатается на последовательном мониторе:

 rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
flash read err, 1000
ets_main.c 371 
ets Jun  8 2016 00:22:57

rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
flash read err, 1000
ets_main.c 371 
ets Jun  8 2016 00:22:57
 

RTCWDT_RTC_RESET продолжает повторяться. Останавливается только тогда, когда я отключаю питание.

Как я уже сказал, я не мог определиться с «актуальностью» этого вопроса, потому что я не уверен, является ли это проблемное поведение какой-то ошибкой в примере «адского мира» или происходит откуда-то еще.

Обновить

Я мог случайно стереть загрузчик, поэтому я сделал make flash .

Это создало bootloader.bin в папке сборки, которую я попытался прошить, но это ничего не меняет.

Я вспыхиваю с https://github.com/espressif/esp-serial-flasher.

Комментарии:

1. «make flash» загружает приложение с помощью esptool

2. Я компилирую на DeviceA и мигаю на DeviceB, поэтому make flash скомпилировал только двоичные файлы для меня. Хотя я понял, что , несмотря make flash на созданный хороший размер hello_world.bin , мне, возможно, придется загрузить bootloader.bin в 0x1000, partition-table.bin в 0x8000 и, наконец hello_world.bin , в 0x10000. Можете ли вы подтвердить, что я прав со всем этим, пожалуйста?

3. да, это то, что делает make flash. Я думаю, что если вы запустите только make, в конце будет выведена командная строка esptool, которую вы можете запустить

4. Отлично, теперь все работает так, как задумано. Возможно, вы захотите получить несколько кредитов, если вы добавите свой ответ, я с радостью приму его. Спасибо!