Hi all! I have an ESP8266 running a long code and recieving the measurements of 5 sensors (CO2, TVOC, Pressure Difference, Temperature, Humidity and Particulate Matter) which is working fine for many hours until I receive an Exception (0): epc1=0x4021a614 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000.
Facts:
-
The ESP8266 time of failure is unpredictable; it can be running for 3 hours, for 15 hours or for 24 hours without throwing the Exception, but it finally does.
-
When the ESP8266 gets the Exception, I guess it resets itself (I am not there for hours to see exactly the moment in time when the Exception is received), and tries to do the setup(). However, the board is stuck in the autoConnect() function, receiving a
*wm:[2] Connection result: WL_NO_SSID_AVAIL
. Inmediately after pressing the Reset button in the pyisical PCB, the PCB connects correctly to the stored WiFi and works until another Exception (0) is found. -
The physical Reset button in the PCB, after the Exception, only works when the FTDI cables are connected to the PCB.
Exception decoder result
**Exception 0: Illegal instruction** PC: 0x4021a614 EXCVADDR: 0x00000000 *Decoding stack results* 0x40100c4c: **interrupt_handler(void*, void*)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_wiring_digital.cpp** line **167** 0x4022d0b8: **ip4_output_if_opt_src** at core/ipv4/**ip4.c** line **1764** 0x40100b88: **interrupt_handler(void*, void*)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_wiring_digital.cpp** line **138** 0x40100690: **ets_post(uint8, ETSSignal, ETSParam)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **238** 0x40100b88: **interrupt_handler(void*, void*)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_wiring_digital.cpp** line **138** 0x40229248: **sys_timeout_LWIP2** at core/**timeouts.c** line **304** 0x401000ab: **app_entry_redefinable()** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **386** 0x40100690: **ets_post(uint8, ETSSignal, ETSParam)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **238** 0x40100690: **ets_post(uint8, ETSSignal, ETSParam)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **238** 0x40100690: **ets_post(uint8, ETSSignal, ETSParam)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **238** 0x40100690: **ets_post(uint8, ETSSignal, ETSParam)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **238** 0x40100690: **ets_post(uint8, ETSSignal, ETSParam)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **238** 0x402308f9: **br_sha2small_round** at src/hash/**sha2small.c** line **87** 0x40100690: **ets_post(uint8, ETSSignal, ETSParam)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **238** 0x40100690: **ets_post(uint8, ETSSignal, ETSParam)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **238** 0x40223a6d: **glue2esp_linkoutput** at glue-esp/**lwip-esp.c** line **301** 0x40100690: **ets_post(uint8, ETSSignal, ETSParam)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **238** 0x40223c9b: **new_linkoutput** at glue-lwip/**lwip-git.c** line **272** 0x402240fa: **ethernet_output** at netif/**ethernet.c** line **312** 0x40100690: **ets_post(uint8, ETSSignal, ETSParam)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **238** 0x40223a6d: **glue2esp_linkoutput** at glue-esp/**lwip-esp.c** line **301** 0x40223c9b: **new_linkoutput** at glue-lwip/**lwip-git.c** line **272** 0x402240fa: **ethernet_output** at netif/**ethernet.c** line **312** 0x4022b674: **etharp_output_to_arp_index** at core/ipv4/**etharp.c** line **769** 0x40214187: **String::copy(__FlashStringHelper const*, unsigned int)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266/**WString.h** line **343** 0x4022b748: **etharp_output_LWIP2** at core/ipv4/**etharp.c** line **885** 0x40215696: **__yield()** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266/**core_esp8266_features.h** line **64** 0x4022d0b8: **ip4_output_if_opt_src** at core/ipv4/**ip4.c** line **1764** 0x40101448: **malloc(size_t)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\**umm_malloc.cpp** line **912** 0x4022d120: **ip4_output_if_opt** at core/ipv4/**ip4.c** line **1572** 0x40224a38: **memp_malloc** at core/**memp.c** line **355** 0x4022d146: **ip4_output_if** at core/ipv4/**ip4.c** line **1549** 0x4022e083: **ip_chksum_pseudo** at core/**inet_chksum.c** line **392** 0x40228de2: **tcp_output** at core/**tcp_out.c** line **1621** 0x402287ad: **tcp_enqueue_flags** at core/**tcp_out.c** line **1086** 0x401010c6: **umm_free_core(umm_heap_context_t*, void*)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\**umm_malloc.cpp** line **642** 0x401010c6: **umm_free_core(umm_heap_context_t*, void*)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\**umm_malloc.cpp** line **642** 0x40101414: **free(void*)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\**umm_malloc.cpp** line **688** 0x401010c6: **umm_free_core(umm_heap_context_t*, void*)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\**umm_malloc.cpp** line **642** 0x40101414: **free(void*)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\**umm_malloc.cpp** line **688** 0x40212d21: **stack_thunk_del_ref()** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**StackThunk.cpp** line **82** 0x401010c6: **umm_free_core(umm_heap_context_t*, void*)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\**umm_malloc.cpp** line **642** 0x401010c6: **umm_free_core(umm_heap_context_t*, void*)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\**umm_malloc.cpp** line **642** 0x40101414: **free(void*)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\umm_malloc\**umm_malloc.cpp** line **688** 0x40201e95: **BearSSL::WiFiClientSecure::~WiFiClientSecure()** at c:\users\alberto\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.1.0-gcc10.3-e5f9fec\xtensa-lx106-elf\include\c++\10.3.0\bits/**shared_ptr_base.h** line **1183** 0x40202874: **send_data()** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266/**WString.h** line **115** 0x40100690: **ets_post(uint8, ETSSignal, ETSParam)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **238** 0x40100690: **ets_post(uint8, ETSSignal, ETSParam)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **238** 0x40100690: **ets_post(uint8, ETSSignal, ETSParam)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **238** 0x40100c4c: **interrupt_handler(void*, void*)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_wiring_digital.cpp** line **167** 0x40100b88: **interrupt_handler(void*, void*)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_wiring_digital.cpp** line **138** 0x4020f9f7: **SD_ZH03B::readData()** at C:\Users\Alberto\Documents\Arduino\libraries\SD_ZH03B-master\**SD_ZH03B.cpp** line **73** 0x4020f9f5: **SD_ZH03B::readData()** at C:\Users\Alberto\Documents\Arduino\libraries\SD_ZH03B-master\**SD_ZH03B.cpp** line **73** 0x401001f0: **SoftwareSerial::writePeriod(unsigned int, unsigned int, bool)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\libraries\SoftwareSerial\src\**SoftwareSerial.cpp** line **382** 0x402155e8: **__esp_suspend()** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266/**core_esp8266_features.h** line **64** 0x40215739: **__esp_delay(unsigned long)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **161** 0x402157ae: **esp_try_delay(unsigned int, unsigned int, unsigned int)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266\**core_esp8266_main.cpp** line **182** 0x40216718: **__delay(unsigned long)** at C:\Users\Alberto\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\cores\esp8266/**coredecls.h** line **69** 0x4020f9fa: **SD_ZH03B::readData()** at C:\Users\Alberto\Documents\Arduino\libraries\SD_ZH03B-master\**SD_ZH03B.cpp** line **73** 0x40201c38: **readSensorData()** at C:\Users\Alberto\Downloads\v1.0.0_MedicinePlus/**v1.0.0_MedicinePlus.ino** line **557** 0x4020290e: **loop()** at C:\Users\Alberto\Downloads\v1.0.0_MedicinePlus/**v1.0.0_MedicinePlus.ino** line **626**
After compilation results
. Variables and constants in RAM (global, static), used 34888 / 80192 bytes (43%)
║ SEGMENT BYTES DESCRIPTION
╠══ DATA 1572 initialized variables
╠══ RODATA 3916 constants
╚══ BSS 29400 zeroed variables
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 63103 / 65536 bytes (96%)
║ SEGMENT BYTES DESCRIPTION
╠══ ICACHE 32768 reserved space for flash instruction cache
╚══ IRAM 30335 code in IRAM
. Code in flash (default, ICACHE_FLASH_ATTR), used 454992 / 1048576 bytes (43%)
║ SEGMENT BYTES DESCRIPTION
╚══ IROM 454992 code in flash
Interpretation of the results
-
I can see in the Exception Decoder results that there is something wrong about the particulatte matter sensor (ZH03B). However, I have the same model running without a single error for many months in another PCB version.
-
It also could be something about the high Instruction RAM (96%)?
Please, let me know what your thoughts are and/or if you need any more information. Thank you!