• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Exception (9): Sonoff Dual уходит в перегрузку

Pavlo

New member
Проблема: при нажатии на кнопку (замыкание контактов на "Button-0"), модуль перегружается, выдавая в консоль несколько раз:
Код:
: Exception (9):
epc1=0x40105538 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000003 depc=0x00000000
sp: 3ffffca0 end: 3fffffb0 offset: 01a0
Код:
: Exception (9):
epc1=0x401055d9 epc2=0x00000000 epc3=0x00000000 excvaddr=0xffffffff depc=0x00000000
ctx: sys
sp: 3ffff490 end: 3fffffb0 offset: 01a0
- Он один раз или несколько раз таким образом перегружается?

Скетч мало провереный, но работает уже 2 месяца на другой Sonoff Dual, открывая и закрывая жалюзи, как по нажатию на внешние кнопки, так и из мобилки (и по времени из самой RaspberryPi, где и стоит Mosquito)

Прошиваю с ArduinoIDE.

Кто посоветует, куда смотреть?

P.S. Вечером попробую еще один/другой модуль. Блин, так обрадовался, что новые модули пришли... что сейчас жалюзи на других окнах автоматизирую, а тут такое "фу".
 
Последнее редактирование:

Pavlo

New member
Есть ли где-то рассшифровки, что означают номера ошибок:
Exception(0), Exception(1) или вот моя Exception(9) ?
 

Pavlo

New member
Нашел вот такое: GitHub - me-no-dev/EspExceptionDecoder: Exception Stack Trace Decoder for ESP8266 and ESP32

Надо будет установить и проверить, что даст...
Исходя из сего EspExceptionDecoder/EspExceptionDecoder.java at master · me-no-dev/EspExceptionDecoder · GitHub
Моя ошибка номер 9, т.е. "LoadStoreAlignmentCause: Load or store to an unaligned address"
 

pvvx

Активный участник сообщества
Исходя из сего EspExceptionDecoder/EspExceptionDecoder.java at master · me-no-dev/EspExceptionDecoder · GitHub
Моя ошибка номер 9, т.е. "LoadStoreAlignmentCause: Load or store to an unaligned address"
Адрес ошибки всё время разный? Если - да, то это может быть не связано с кодом, а аппаратный сбой, приводящий к перезагрузке при неверно выставленных GPIO. По данным в регистрах очень похоже на вылет на ошибку уже при самой перезагрузке - перезагрузка по ветке 'Jump Boot' (не поддерживаемая разработчиками SonOff), а не с Flash.
Jump Boot: GPIO0 = "0", GPIO1 = "1", GPIO2 = "0" (boot mode: (2,x))
Для аппаратных сбоев у SonOff есть множество причин - одна из них ЭМИ от близко расположенной реле при коммутации разных типов нагрузок...

Для более точного выяснения адреса ошибки смотрите лог asm-а кода вашей прошивки от компилятора, согласно адресу...
 
Последнее редактирование:

Pavlo

New member
Адрес ошибки всё время разный?
Происходит так: замыкаю GPIO-0 на минус - для перепрошивки и в таком состоянии прошиваю черет ТТЛ-конвертер.
После прошивки, модуль сам тут же загружается (GPIO-0 остается замкнуто) и начинает отрабатывать залитый скетч (фича такая у Sonoff-Dual).
Т.е. коннектится в WiFi, шлет в Serial мою отладочную информацию (которуя я сам же и выдаю из различных частей скетча), коммуницирует по mqtt с Mqtt-брокером (я вижу в логах mosquito, как он прислал свое состояние).
Далее, я замыкаю вручную контакты, на которых потом будет кнопка, загорается красный светодио (т.е. F330 отработала и наверняка замкнула реле... вечером проверю) и сразу же в консоль несколько раз валятся ошибки Exception(9) с дампом... кажется раза 3 ил 4 и, отвечая на ваш вопрос - во время этих ошибок значение (адрес) у epc1=... и у excvaddr=... все время разный.
После чего в косоле появляются пару кракозябл (нечитаемых символов) и все замирает.

Что я попробую:
- сначала запитать модуль через TTL-конвертер без замкнутой GPIO-0
- попробую послать mqtt-команду на переключение реле.
- потом запитать от 220В.
...
...
- ну и в конце попробую следующий модуль (блин, самое неприятное, если тут какой-то брак в партии. Я же купил 5 штук) :)
 

Pavlo

New member
Стабильно работает, если не трогать (не замыкать) контакты на самом модуле.
Контакты можно аккуратно замкнуть, чтобы не было "дребезга". Тогда срабатывает нормально.
Как только замыкаю контакты с "дребезгом" - модуль сразу валится в перегрузку.
Расшифровка дампа ошибки:
Код:
Exception 9: LoadStoreAlignmentCause: Load or store to an unaligned address
Decoding 22 results
0x40105538: ets_timer_setfn at ?? line ?
0x40105764: ets_timer_arm_new at ?? line ?
0x4022490a: tcp_output at /Users/igrokhotkov/espressif/arduino/tools/sdk/lwip/src/core/tcp_out.c line 990
0x40201098: delay at G:\Users\Tester\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/core_esp8266_wiring.c line 45
0x402031aa: ClientContext::write(char const*, unsigned int) at G:\Users\Tester\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClient.cpp line 327
0x402031d4: WiFiClient::write(unsigned char const*, unsigned int) at G:\Users\Tester\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/WiFiClient.cpp line 327
0x401054d6: wdt_feed at ?? line ?
0x40203654: PubSubClient::write(unsigned char, unsigned char*, unsigned short) at G:\Users\Tester\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.cpp line 590
0x4010053d: _umm_realloc at G:\Users\Tester\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\umm_malloc/umm_malloc.c line 1491
:  (inlined by) realloc at G:\Users\Tester\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\umm_malloc/umm_malloc.c line 1709
0x40105764: ets_timer_arm_new at ?? line ?
0x402038b0: PubSubClient::publish(char const*, unsigned char const*, unsigned int, unsigned char) at G:\Users\Tester\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.cpp line 590
0x4020427c: String::changeBuffer(unsigned int) at G:\Users\Tester\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/WString.cpp line 339
0x402038ee: PubSubClient::publish(char const*, char const*, unsigned char) at G:\Users\Tester\Documents\Arduino\libraries\PubSubClient\src/PubSubClient.cpp line 590
0x402043c0: String::operator=(String const&) at G:\Users\Tester\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/WString.cpp line 339
0x4020254c: MqttWrapper::publishState(String) at G:\Users\Tester\AppData\Local\Temp\arduino_build_588850\sketch/MqttWrapper.cpp line 61
0x4020217e: readSerialFromF330() at D:\Development\Arduino\Esp8285_Dual\JalousieOnSonoffDual-1/JalousieOnSonoffDual-1.ino line 88
0x4021ad05: ets_timer_handler_isr at ?? line ?
0x4021ad4a: ets_timer_handler_isr at ?? line ?
0x4021a96f: ets_snprintf at ?? line ?
 

Pavlo

New member
Вроде бы модуль позже куплен, вроде бы должен быть получше.
Как вспомню, сколько я проигрался с предыдущим, пытаясь выловить "длинное нажатие".
Там "дребезг" ну никак не прокатывал.
 

Юрий Ботов

Moderator
Команда форума
ревность (jalousie) никого до добра не доводила :) (шутка и только)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Далее, я замыкаю вручную контакты, на которых потом будет кнопка, загорается красный светодио (т.е. F330 отработала и наверняка замкнула реле... вечером проверю) и сразу же в консоль несколько раз валятся ошибки Exception(9) с дампом... кажется раза 3 ил 4 и, отвечая на ваш вопрос - во время этих ошибок значение (адрес) у epc1=... и у excvaddr=... все время разный.
После чего в косоле появляются пару кракозябл (нечитаемых символов) и все замирает.
Ну тут четко определить причину не выйдет. Неоднозначность ситуации: не известно, есть ли нагрузка на реле, какие данные и как распределились от того-же MQTT. Но общее описание все-же походит на аппаратный сбой. До вполне банального провала питания при включении реле.
 

pvvx

Активный участник сообщества
Как только замыкаю контакты с "дребезгом" - модуль сразу ....
К сожалению сейчас нет под рукой Дуал СонОфф на даче :) и скетч не проверить. Но похоже вы уже нашли причину - впишите подавление дребезга кнопки/контакта...
 

Pavlo

New member
К сожалению сейчас нет под рукой Дуал СонОфф на даче :) и скетч не проверить. Но похоже вы уже нашли причину - впишите подавление дребезга кнопки/контакта...
Так ведь в том и беда, что не все так просто.
Как иметь дело с esp8266 - кругом описано.
А вот как перепрошить F330, которая собственно говоря и занимается передачей сигналов: реле-контакт-esp8266 (по Serial), я нигде не встречал.
 

Pavlo

New member
Вот тут на картинке есть.
Контакты для перепрошивки F330 я обвел. И стрелкой на саму F330 указал.
Такое вот...
Кстати, только сейчас в голову мысль пришла: а если залить пустой скетч и спровоцировать "дребезг" на контактах, уйдет ли плата в перезагрузку?
Ведь если не уйдет, т.е. F330 нормально отрабатывает, бедные релюшки будут трещать трещеткой... то получается, что нужно просто в скетче сию ситуацию красиво обработать..? ;)
В описаном случае нет ничего хорошего для самого модуля, ведь злоупотребление "дребезгом" ничего хорошего не сулит самому модулю (реле?), ни мотору.
Ну что ж, сдаваться так просто не охота, пойду искать в интернете, что народ по поводу "дребезга" для Sonoff Dual пишет.
Кстати, как "дребезг" на английском будет? :D
P.S. картинка не моя - честно откуда-то спер и дорисовал стрелочки. ;)
 

Вложения

Последнее редактирование:

Pavlo

New member
...
Кстати, только сейчас в голову мысль пришла: а если залить пустой скетч и спровоцировать "дребезг" на контактах, уйдет ли плата в перезагрузку?
Ведь если не уйдет, т.е. F330 нормально отрабатывает, бедные релюшки будут трещать трещеткой... то получается, что нужно просто в скетче сию ситуацию красиво обработать..? ;)
...
Пустой скетч с легкой дебаг-информацией не зависает. Клацал и так и эдак. Замыкал быстро и медленно.
Значит аппаратно - все ок.
Новость хорошая. ;)
 

Pavlo

New member
Вылетает именно при попытке повторно отослать mqtt-брокеру текущее состояние (без паузы).

State: WAITING -> cur.position: 48.00 %, callibration Off
Publish. Topic:home/kitchen/window/motor/state
Publish. Value:2
Publish. Topic:home/kitchen/window/motor/state
Publish. Value:0

Exception (9):
epc1=0x40105538 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000003 depc=0x00000000
 
Последнее редактирование:

Pavlo

New member
Отпишусь и... можно тему закрыть.
Проблема была в коде скетча.
А именно - проблема была в call-back функции, которая вызывалась для отслылки нового значния mqtt-брокеру (статуса и позиции жалюзей).
Дело в том, что вызов call-back функции имеет определенный таймаут на завершение.
Если функция выполняется дольше, чем "позволяет" WDT (watch dog timeout), то WDT производит "Soft reboot" модуля.

Как выглядит "fix": вызов mqttClient.publish(topic, value) вынесен в основной цикл. А в call-back функции я просто меняю значение переменных и флаг "готов-к-публикации".
 
  • Like
Реакции: kab
Сверху Снизу