• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP.reset(); - приводит к зависанию

AndrF

Active member
Собственно проблема:

ESP.reset(); - приводит к зависанию...

Проблема, как я понял, давно известная, но внятного решения её в интернете я так и не нашел.

Никто не в курсе - оно не появилось?

Пока решил простейшим образом - запаял отсутствующий резистор-перемычку на Nodemcu и

Код:
        pinMode(16, OUTPUT);
        digitalWrite(16, 0);
Так - работает прекрасно...

И еще чайниковский вопрос - при перезагрузке в браузер/Serial выдается строчка абракадыбры - от нее никак не избавиться? Ну или привести ее в нормальный вид...
 
Последнее редактирование:

enjoynering

Well-known member
И еще чайниковский вопрос - при перезагрузке в браузер/Serial выдается строчка абракадыбры - от нее никак не избавиться? Ну или привести ее в нормальный вид...
Все стартовые сообщения ROM-BIOS выводятся в оба порта GPIO1/U0TXDи GPIO2/U1TXD на скорости 74880bps и «NL & CR». 74880bps не основная скорость ESP8266, просто он всего лишь на ней отправляет отладочную информацию. основная скорость 115200bps.
 

Вложения

Sr.FatCat

Member
Для себя решил вопрос заменой на ESP.restart(); Причем срабатывать она начинает только после первой "честной" перезагрузки ESP питанием или аппаратным ресетом. Сразу после загрузки скетча тоже не работает. Сей феномен описан и обсуждается на ряде буржуйских форумов.
 

Paul_B

Member
Для себя решил вопрос заменой на ESP.restart(); Причем срабатывать она начинает только после первой "честной" перезагрузки ESP питанием или аппаратным ресетом. Сразу после загрузки скетча тоже не работает. Сей феномен описан и обсуждается на ряде буржуйских форумов.
Столкнулся с аналогичной проблемой. ESP.reset() не работает сразу после заливки скетча.
Зависает с таким текстом:
Код:
ets Jan  8 2013,rst cause:2, boot mode:(1,6)


ets Jan  8 2013,rst cause:4, boot mode:(1,6)

wdt reset
, пока хоть раз не нажмешь на Reset пальцами.
Во странно, модуль вводится в состояние для заливки скетча.
После хоть одного хардрезета нормально работает с таким логом:
Код:
ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v09f0c112
~ld
 
Последнее редактирование:

Sr.FatCat

Member
Столкнулся с аналогичной проблемой. ESP.reset() не работает сразу после заливки скетча.
Зависает с таким текстом:
Код:
ets Jan  8 2013,rst cause:2, boot mode:(1,6)


ets Jan  8 2013,rst cause:4, boot mode:(1,6)

wdt reset
, пока хоть раз не нажмешь на Reset пальцами.
Ну скорее это не проблема, а особенность работы ESP при загрузке прошивки по USB
 

gerkimuyda

New member
А что у вас на GPIO15, GPIO0, GPIO2 творится?

Может вы туда повесили какое-то устройство, которое при ресете не мешает ESP, а при програмном сбросе давит линию в ноль?

пс: указывайте тип модуля, это у вас на NodeMCU devboard Lua v3 ESP-12N ? или какой-то коротыш? o_O
 

pvvx

Активный участник сообщества
Используйте ESP.deepSleep(x); , где x - малое число. Но должны быть соединены GPIO16 и RESET по стандартной схеме для ESP8266.
Проблемы с Soft перезагрузкой в Arduino не решаются по ряду причин и это известно с 2014 года:
1) Значения GPIO0..15 в старшие биты (15..31) регистра чтения значений GPIO защелкиваются по фронту ноги RESET и если они указывали загрузку в режим программирования, то туда чип и ломанется по программе в ROM-BIOS при рестарте CPU. Переписать эти значения в Arduino не дано.
2) Если в момент ESP.reset() были неправильные значения у выводов выбора типа загрузки, например эти GPIO настроены на вывод и выведены значения для загрузки в режиме не с Flash, то туда всё и попрет по программе в ROM-BIOS...
Есть и 3-тие, и 4-ое, и ..., но это сложно и муторно описывать - всякие связи с переносом таблицы векторов в последних версиях SDK и не выключенные внутренние блоки генерирующие прерывания во время выполнения softreset, со связью багов не отключения WiFi части в чипе даже по аппаратному сигналу RESET...

Чтобы не глушить в округе всю сеть WiFi при перезагрузке ESP8266 обязательно программно отключите WiFi, а затем уже делайте манипуляции перезагрузки или дергания за RESET !

Блок WiFi отключается посылкой нужного значения в аппаратный регистр управления :)
Но это может повлечь массу других проблем. Например при restart() - китай-SDK при старте подразумевает, что блок WiFi включен, чтобы за время старта и загрузки SDK, а так-же при прошивке, чип больше жрал :)

Команда deepsleep (в SDK) частично это реализует - глушит передатчик, во всяком случае пытается, подав команду закрытия соединений и ожидая до реального включения deep_sleep 100 мс на софт-таймере. Но в последней исполняемой процедуре deep_sleep находится многолетняя ошибка Espressif программеров - возможна перезагрузка с флагами не deep_sleep, а по ошибке (protected). Но это в меньшей степени влияет на перезапуск. :) Какая разница причина перезапуска, запомненная чипом, если вы не используете быстрое восстановление после deep_sleep...
 
Последнее редактирование:

pvvx

Активный участник сообщества
ESP.reset() и "должны быть соединены GPIO16 и RESET по стандартной схеме для ESP8266"...
Десять раз :)
Это вызов system_restart_local()
Там, вывод всяких сообщений в UART, ожидание вывода, прочие ненужные процедуры в кол-во десятка шт. Затем system_restart_core() в которой отключение Flash (вроде с подачей команды sleep ей), отключение 'кэш' и прочее и в конце jmp к:
Код:
ROM:40000080 _ResetVector:
ROM:40000080                 j        _ResetHandler
а не подскажите команды ардуино для отключения wifi?
А таковых там быстрых нет по умолчанию. На то оно и Ар-Дурино
Надо записать в регистр 0x60000710 значение 0x0. Но после этого другие процедуры SDK могут что-то ещё там поменять...
Это регистр коммутации клоков на внутренние устройства.
// IO_RTC_4 = 0 - отключение WiFi
// bit31 =1 источник тактирования для I2S, ... = PLL (80MHz)
// bit25, 26 =1 источник тактирования для SAR ... = PLL (80MHz)
....

В esptool.py отключается так self.write_reg(0x60000710, 0x0, 0xffffffff)
 
Последнее редактирование:

kab

New member
а не подскажите команды ардуино для отключения wifi?
Мне кто-то объяснял, что, при отсутствии какой-либо функции в ардуино иде, достаточно просто подключается нужная функция из SDK. Правда, сам этот механизм еще не пробовал...
 

pvvx

Активный участник сообщества
Мне кто-то объяснял, что, при отсутствии какой-либо функции в ардуино иде, достаточно просто подключается нужная функция из SDK. Правда, сам этот механизм еще не пробовал...
В SDK такой функции тоже нет. Те, что есть - все кривые, с гарантией пересброса не более 80% если всё остальное аппаратное соблюдено. Чип же даже не имеет BOR и мелкий провал питания несет неизвестные причуды, как и превышение на входе ADC 1.1В - он вам такое при этом выкинет... :) Ну и много ещё чего.
Поиграться в программирование то хватает? Ну и ладно.
 

Sr.FatCat

Member
Май эсс, как говорится. Если после прошивки торкнуть разок резет, дальше проблемы не существует в принципе. После прошивки по ОТА такой проблемы нет тоже. И из-за всего этого тут уже такое понаписали... А главное, рабочего варианта решения несуществующей проблемы - так и не предложили :D
Я валяюсь!
 

pvvx

Активный участник сообщества
Май эсс, как говорится. Если после прошивки торкнуть разок резет, дальше проблемы не существует в принципе. После прошивки по ОТА такой проблемы нет тоже. И из-за всего этого тут уже такое понаписали... А главное, рабочего варианта решения несуществующей проблемы - так и не предложили :D
Я валяюсь!
Используйте ESP.deepSleep(x); , где x - малое число.
А рабочим вариантом ESP8266, увы не является. Ну для валяющихся можно считать "рабочим вариантом" и пакет на голову. :)
 

Sr.FatCat

Member
А рабочим вариантом ESP8266, увы не является.
У меня в двух проектах домашней автоматизации все прекрасно работает одновременно как веб-сервер и как блинк-клиент, успевая обслуживать
ряд переферии по SPI/I2C/1-Wire и обрабатывая, не всегда тривиальную, бизнес-логику. Нареканий нет вообще. Тайм-апы месяцами. Что я делаю не так?;)
Хотя, да - на Протон я его лепить не стал бы, они и так падают :D:D
Ну для валяющихся можно считать "рабочим вариантом" и пакет на голову.
Какой с вашего позволения "пакет" порекомендуете: TCP или UDP, ICMP не предлагать! И можно еще IPv4 на голову натягивать или уже v6 - хайп?
 

kab

New member
У меня в двух проектах домашней автоматизации все прекрасно работает одновременно как веб-сервер и как блинк-клиент, успевая обслуживать
ряд переферии по SPI/I2C/1-Wire и обрабатывая, не всегда тривиальную, бизнес-логику. Нареканий нет вообще. Тайм-апы месяцами. Что я делаю не так?;)
Хотя, да - на Протон я его лепить не стал бы, они и так падают :D:D

Какой с вашего позволения "пакет" порекомендуете: TCP или UDP, ICMP не предлагать! И можно еще IPv4 на голову натягивать или уже v6 - хайп?
Кто же это не так давно советовал мне не поднимать лишний ... :)
 

enjoynering

Well-known member
У меня в двух проектах домашней автоматизации все прекрасно работает одновременно как веб-сервер и как блинк-клиент, успевая обслуживать
ряд переферии по SPI/I2C/1-Wire и обрабатывая, не всегда тривиальную, бизнес-логику. Нареканий нет вообще. Тайм-апы месяцами. Что я делаю не так?;)
Хотя, да - на Протон я его лепить не стал бы, они и так падают :D:D
проект в студию!!!
 
Сверху Снизу