• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
проект в студию!!!
 
Сверху Снизу