Page 1 of 1

Cache error on nvs_flash_init

Posted: Wed Dec 26, 2018 5:23 pm
by BrettG
Just running very simple nvs init code:

Code: Select all

void app_main(void){
    vTaskDelay(2000 / portTICK_PERIOD_MS);
    printf("Initing NVS\n");
    nvs_flash_init();
    printf("NVS init Done.\n");
    vTaskDelay(2000 / portTICK_PERIOD_MS);
}
I run across an NVS init error shown below. After researching this issue it seems to be generally caused by an interrupt not registered with IRAM. But I have not declared any interrupt functions. The only code is the one above. My only other thoughts are that it is a partition table issue (using partitions_two_ota.csv) or nvs corruption (however I can run nvs_flash_init via unity unit test framework).

I have been messing with make menuconfig for days trying to fis this issue. Any ideas would be greatly appreciated.
Thanks,
- Brett

Code: Untitled.txt Select all


Guru Meditation Error: Core  0 panic'ed (Cache disabled but cached memory region
Core 0 register dump:
PC : 0x400d1f94 PS : 0x00060d34 A0 : 0x800853bc A1 : 0x3f
A2 : 0x00000001 A3 : 0x15122500 A4 : 0x00060d20 A5 : 0x40
A6 : 0x3ffaffe8 A7 : 0x3ffb5d90 A8 : 0x80081a40 A9 : 0x3f
A10 : 0x00000000 A11 : 0x15122500 A12 : 0x00060f20 A13 : 0x00
A14 : 0x3ffb3b0c A15 : 0x3ffb5d40 SAR : 0x00000020 EXCCAUSE: 0x00
EXCVADDR: 0x00000000 LBEG : 0x400014fd LEND : 0x4000150d LCOUNT : 0xff

Backtrace: 0x400d1f94:0x3ffb5d90 0x400853b9:0x3ffb5dc0 0x40085925:0x3ffb5df0 0x4
0x400d1f94: portENTER_CRITICAL_NESTED at dport_access.c:?

0x400853b9: Cache_Flush at flash_mmap.c:?

0x40085925: spi_flash_mmap_pages at ??:?

0x40085575: spi_flash_mmap at ??:?

0x400fd4ef: load_partitions at partition.c:?

0x400fd34d: esp_partition_find at ??:?

0x400fd471: esp_partition_find_first at ??:?

0x400fbf32: nvs_flash_init_partition at C:/msys32/home/brettG/Git/esp-idf/com

0x400fbf72: nvs_flash_init at C:/msys32/home/brettG/Git/esp-idf/components/nv

0x400e3fc1: app_main at ??:?

0x400d1504: main_task at cpu_start.c:?

Re: Cache error on nvs_flash_init

Posted: Wed Dec 26, 2018 9:45 pm
by mzimmers
Just out of curiosity, what does your partition table look like?

Re: Cache error on nvs_flash_init

Posted: Thu Dec 27, 2018 8:08 am
by ESP_igrr
This looks like a bug in IDF that portENTER_CRITICAL_NESTED inline function doesn't have IRAM_ATTR attribute.

Re: Cache error on nvs_flash_init

Posted: Thu Dec 27, 2018 1:47 pm
by BrettG
This looks like a bug in IDF that portENTER_CRITICAL_NESTED inline function doesn't have IRAM_ATTR attribute.
Thanks so much!! I added the IRAM_ATTR to portENTER_CRITICAL_NESTED definition and it went off without a hitch.

Re: Cache error on nvs_flash_init

Posted: Thu Oct 29, 2020 10:40 am
by devlat
I wanted to resurrect this old post to note that I had exactly same issue in ESP-IDF 4.2 and this info helped me to fix it.
Obviously by setting 'inline' attribute on portENTER_CRITICAL_NESTED ESP-IDF team assumed the problem would go away.
But this seems only a partial solution because when you build in debug mode with all optimisations disabled the 'inline'
attribute is just ignored and portENTER_CRITICAL_NESTED is compiled as normal function landing in cached region.
Just to note, i am using ESP-IDF as a backend for VisualDBG on ESP-WROVER-KIT V4.1 with JTAG debugging and my Debug config has all optimisations disabled, so this issue was reproduced 100% - CPU goes to panic and call stack always points to this function.
After inserting IRAM_ATTR the issue was fixed immediately.