-
Notifications
You must be signed in to change notification settings - Fork 7.8k
Description
I have a project that has three I2C slave devices on a single bus (running at 100kHz). For some time I was developing with ESP-IDF 2.1.1 and everything was working pretty well, except for a weird problem where the I2C master would freeze up after a few minutes. I did some research and it looks like this is a problem with the I2C master hardware state machine which has been addressed in more recent commits of ESP-IDF. So to make use of this fix I migrated my project to use master (595688a). I had to make a few changes (remove references to FreeRTOS heap measurement commands, add nvs_flash_init()
before initialising WiFi) but then everything seemed to work well. The slave devices are all being polled correctly and everything seems happy.
The project is here: https://github.com/DavidAntliff/esp32-poolmon/tree/ESP-IDF_master
I came back a little while later and the application is crashing over and over with the following console output shortly after boot:
Guru Meditation Error: Core 0 panic'ed (Interrupt wdt timeout on CPU0)
Register dump:
PC : 0x400859f3 PS : 0x00060034 A0 : 0x80084685 A1 : 0x3ffb0590
0x400859f3: xQueueGenericSendFromISR at /Users/david/esp32/esp-idf-master/components/freertos/./queue.c:2037
A2 : 0x00000001 A3 : 0x00000000 A4 : 0x3ffb05b0 A5 : 0x00000002
A6 : 0x3ffbc970 A7 : 0x00060021 A8 : 0x800859f3 A9 : 0x3ffb0570
A10 : 0x00000000 A11 : 0x00000000 A12 : 0x00000002 A13 : 0x3ffbadc0
A14 : 0x00000000 A15 : 0x400849fc SAR : 0x00000012 EXCCAUSE: 0x00000005
0x400849fc: i2c_isr_handler_default at /Users/david/esp32/esp-idf-master/components/driver/./i2c.c:1023
EXCVADDR: 0x00000000 LBEG : 0x4000c2e0 LEND : 0x4000c2f6 LCOUNT : 0xffffffff
Backtrace: 0x400859f3:0x3ffb0590 0x40084682:0x3ffb05b0 0x40084a89:0x3ffb05e0 0x40082ba5:0x3ffb0610 0x4000bfed:0x00000000
0x400859f3: xQueueGenericSendFromISR at /Users/david/esp32/esp-idf-master/components/freertos/./queue.c:2037
0x40084682: i2c_master_cmd_begin_static at /Users/david/esp32/esp-idf-master/components/driver/./i2c.c:1023
0x40084a89: i2c_isr_handler_default at /Users/david/esp32/esp-idf-master/components/driver/./i2c.c:1023
0x40082ba5: _xt_lowint1 at /Users/david/esp32/esp-idf-master/components/freertos/./xtensa_vectors.S:1105
Rebooting...
A software or on-board reset does not stop this endless reset behaviour, however removing power for a short period of time does "fix" the issue. It is strange that a brief ESP32 reset does not clear it. (EDIT: but a long reset press does).