Перейти к содержанию
    

UART забрасывает сообщениями на ESP32

Создал минималистический проект

void app_main()
{
    esp_err_t ret = nvs_flash_init();
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
    {
	     ESP_ERROR_CHECK(nvs_flash_erase());
	     ret = nvs_flash_init();
	}
	ESP_ERROR_CHECK(ret);

	esp_log_level_set("*", ESP_LOG_NONE);

	GPIO_Init();

	UART_Setup();
	UART_PrintString("UART setup done.\n");

	while (1)
	{

	}
}

После прожига подключаю UART и он все время забрасывает сообщениями

Quote

rs?:0x10 (RT?WDT_RTC_R?SET),boot:0x1? (?PI_FAS?_FLASH_BO?T)
fl?sh rea? e?r, 1000
?ts_mai?.c 371
ets Ju? 8 2016 00:22:57

rs?:0x10 (RTCWDT?RTC_RE?ET),boot:0x1b (S?I_FAST?FLASH_?OO?)
fla?h read er?, 1000
ets_main.c 371
ets Jun 8 2016 00:22:57

rst:0x10 (RTCWDT_RTC_?ES?T),boot:0x1b (SPI_FAST_FLASH_B?OT)
?la?h ?ea? e?r, 1000
ets_main.c 371
ets Jun 8 2016 00:22:57

В чём может быть проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, jenya7 said:

В чём может быть проблема?

А в чем сейчас проблема? Если не хотите ничего видеть на UART, подтяните IO15 к земле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, aaarrr said:

А в чем сейчас проблема? Если не хотите ничего видеть на UART, подтяните IO15 к земле.

у меня дев. борд. там всё подтянуто. если я прожигаю ардуиновский проект всё работает нормально - UART печатает только то что я ему говорю.

Мне кажется Debug Level выставлен так что он забрасывает меня системными сообщениями. Я думал это поможет

esp_log_level_set("*", ESP_LOG_NONE);

но не помогло.

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это случается из-за работающего WDT - таймер сторожевой собаки.
Так как while(1) {} является бесконечным циклом ожидания, а встроенная RTOS в SDK переключает задачи только явными вызовами системных функций, сброса таймера не происходит и он перезапускает кристалл.

Попробуйте сделать так:

while (1) {
  vTaskDelay(1000 / portTICK_PERIOD_MS);
};

Фактически, основная задача будет спать и постоянно переключать контекст выполнения с себя на фоновые задачи. В том числе, сброс WDT.

 

------------------------------------------------------------------------------------------------------

 

Ещё проверьте, что запись идёт в правильный адрес памяти - 0x1000 в вашем случае. Можно руками прошить итоговый файл.

Пример: esptool.py.exe --port COM7 --baud 512000 write_flash --flash_size=detect 0x1000 .\Downloads\esp32-idf3-20210202-v1.14.bin

Отсюда: https://www.esp32.com/viewtopic.php?f=12&t=9941&sid=eb816a68997eb0864719cef143cac436&start=10

Изменено пользователем AlanDrakes
Дополнил вторым вариантом

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, AlanDrakes said:

Это случается из-за работающего WDT - таймер сторожевой собаки.
Так как while(1) {} является бесконечным циклом ожидания, а встроенная RTOS в SDK переключает задачи только явными вызовами системных функций, сброса таймера не происходит и он перезапускает кристалл.

Попробуйте сделать так:


while (1) {
  vTaskDelay(1000 / portTICK_PERIOD_MS);
};

Фактически, основная задача будет спать и постоянно переключать контекст выполнения с себя на фоновые задачи. В том числе, сброс WDT.

 

------------------------------------------------------------------------------------------------------

 

Ещё проверьте, что запись идёт в правильный адрес памяти - 0x1000 в вашем случае. Можно руками прошить итоговый файл.

Пример: esptool.py.exe --port COM7 --baud 512000 write_flash --flash_size=detect 0x1000 .\Downloads\esp32-idf3-20210202-v1.14.bin

Отсюда: https://www.esp32.com/viewtopic.php?f=12&t=9941&sid=eb816a68997eb0864719cef143cac436&start=10

 

спасибо большое.

в этом наверное проблема - мои аргументы

Quote

--chip esp32 --port COM79 --baud 115200  --before default_reset --after hard_reset write_flash 0x0

получается он начинвется с 0

 

прожёг по адресу 0х1000 - та же проблема, хотя добавил в код

rtc_wdt_protect_off();
rtc_wdt_disable();

судя по этой строке

Quote

rst:0x10 (RTCWDT_RTC_RESET),boot:0x1b (SPI_FAST_FLASH_BOOT)

 

таки происходит рисет от вотчдога.

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, jenya7 сказал:

COM79

Это мощно!)))

3 часа назад, AlanDrakes сказал:

Это случается из-за работающего WDT

Вы посмотрите, что у него валится в уарт, там явно несоотв. адресов начала строки, валится мусор из совсем другой области памяти... Собака будет просто прерывать сообщение и циклить его, но не мусор черт те откуда...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

похоже что прожег правильно

Quote

upload.py --chip esp32 --port COM79 --baud 115200  --before default_reset --after hard_reset write_flash 0x10000 D:\Workspace_Eclipse\build/ble_ibeacon_demo.bin

 

теперь на стартапе получаю

Quote

[0;31mE (5230) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:[0m
[0;31mE (5230) task_wdt:  - IDLE0 (CPU 0)[0m
[0;31mE (5230) task_wdt: Tasks currently running:[0m
[0;31mE (5230) task_wdt: CPU 0: main[0m
[0;31mE (5230) task_wdt: CPU 1: IDLE1[0m

и всё.

UART_PrintString("UART setup done.\n"); ничего не печатает, но это уже другая головная боль.

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 часов назад, jenya7 сказал:

UART_PrintString("UART setup done.\n"); ничего не печатает, но это уже другая головная боль.

Вроди бы, UART0 нельзя использовать напрямую, т.к. он отладочный. Но можно выводить сообщения через ESP_LOGx
Требуется
#include "esp_log.h"
ESP_LOGI("TEXT", "TEXT"); выведет "информационное" сообщение.
ESP_LOGE("TEXT", "TEXT"); выведет "ошибку" и так далее.

 

13 часов назад, jenya7 сказал:

[0;31mE (5230) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:[0m

Таки ещё раз рекомендую добавить в бесконечный цикл вызов переключения контекста "vTaskDelay(1);"
Без него внутренняя ОС так и будет падать в перезагрузку.

 

Если вам нужен отдельный UART, который работает только в момент выполнения основной программы - то используйте другие пины. Либо переназначайте текущие (если это поддерживается).

Документация от производителя: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/uart.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, AlanDrakes said:

Вроди бы, UART0 нельзя использовать напрямую, т.к. он отладочный

Можно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, AlanDrakes said:

 

Если я прожигаю ардуиновскую прогу всё прекрасно работает. UART пишет и читает, я через него настраиваю системные параметры. сейчас я пишу в Эклипсе а бинарник пытаюсь загрузить через PowerShell и что то там криво прожигается, что то я не учитываю. вот пытаюсь разобраться.

 

я понял в чем проблема. я пытался эмулировать ардуиновский прожиг подтасовывая свои bin и elf

Quote

Arduino15\\packages\\esp32\\tools\\esptool_py\\3.0.0/esptool.exe" --chip esp32 elf2image --flash_mode dio --flash_freq 80m --flash_size 4MB -o "main.ino.bin" "main.ino.elf"

 

но этого недостаточно. он к примеру вызывает

Quote

gen_esp32part.exe" -q "arduino_build_475973/partitions.csv" "arduino_build_475973/main.ino.partitions.bin"

 

и еще кучу всего

 

пробовал этим тулом

 

esp.thumb.png.67c435b28b7230792b336cf32f173829.png

 

Он прожигает но тоже криво.

 

у меня есть подозрение что ардуино прожигает весь пакет -bootloader.bin, partition-table.bin, my_app.bin

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...