Closed Zico56 closed 4 years ago
Crashdumps without decoding are useless.
Try to #include <LittleFS.h>
and replace all occurrences of SPIFFS
by LittleFS
(your filesystem will need to be repopulated).
edit: SPIFFS is now deprecated, LittleFS is generally faster. edit2: Also try to run at 160MHz.
Both modifications (LittleFS & frequency) have been done. Issue is still there.
I've updated description with dump decoding.
I would
ESP.getMaxFreeBlockSize()
,new
is used when key is a local var)It displays before loop and crash (rest of logs is same as previous test)
14:58:31.761 -> system_get_free_heap_size():36824 / ESP.getMaxFreeBlockSize():36112
14:58:31.966 -> system_get_free_heap_size():33440 / ESP.getMaxFreeBlockSize():33104
14:58:31.966 -> system_get_free_heap_size():33440 / ESP.getMaxFreeBlockSize():33104
14:58:31.966 -> MQTT initialization...
14:58:31.966 -> system_get_free_heap_size():33376 / ESP.getMaxFreeBlockSize():33104
Debug options were already activated on previous provided logs (SSL + TLS_MEM). Which other logs level would like me to add ?
Removing big objects was already tested (and with smaller values too). It run normally in that case (except that connection normally fails because of wrong key). But goal is to read those values from files. So, cannot redure size of these objects. Heap size seems to show that it is not full....however, size of the arrays seems to be source of the problem. But where is the link ?
Sorry, i did not understand your latest point ?
By the way, just for information, I made equivalent test on a ESP32, it works.
My two last points are about your private keys stored into the stack.
Can you make it a pointer w/new
or move it to global ?
If your key is too large it might not fit into the stack (like in the BearSSL examples).
@d-a-v is correct, this:
File crtFile = SPIFFS.open(AWS_CERTIFICATE, "r");
char crtBuffer[crtFile.size()];
is likely blowing up the stack. Closing xue to user error.
Basic Infos
Platform
Settings in IDE
Problem Description
Hello, I have stored certificates files (pem format) on ESP8266 flash. I managed to load them using SPIFFS and initialize WifiClientSecure (cf. code below). But when trying to connect, TCP connection failed and delay() instruction stops working...causing "WDT reset" (probably because of the connection loop is going endless because connection is not ok).
I tried to add yield() instruction. This cause "User exception (panic/abort/assert) / Panic core_esp8266_main.cpp:133 __yield".
I tried limiting number connection attemps in loop with counter. Result is delay() is still not working. ESP is going to deepSleep(0) (last sketch instruction) but wakup by itselft with WDT reset reason.
When storing certificates data as PROGMEM constants, all is working pretty well.
I logged the free heap size (cf. logs below), but seems that loading certificates from files doesn't affect it so much.
Is it bug from BearSLL, which may not support data not stored as PROGMEM ? Is it due buffer size when loading files ? But why free heap size would be ok then ?
I tried lot of things but do not manage to find where the issue is exactly coming from. Thanks in advance for your help.
For context: I don't want to use PROGMEM hardcoded certificates but need to find a way to store them certificates as files (pem format). I use AWS IoT service with "fleet provisionning with device that dont have device certificates" Goal is having 1st set of certificates for provisionning, onboarded when making device. Then AWS generates and returns specific certificate for device (not shared with other IoT) on JSON format. I want to save this return as certificates files on ESP8266 flash. Moreover, having externalized files instead of hardcoded constant is better device industrialization process.
Sketch
Debug Messages
Crashdump decode