esp32 boot et reset : messages inquiétants...

Bonjour,

je reviens vers vous car parfois au boot et presque toujours après un deepsleep, j'ai des messages comme ci-dessous :

Guru Meditation Error: Core  0 panic'ed (InstrFetchProhibited). Exception was unhandled.
10:22:46.104 -> Core 0 register dump:
10:22:46.104 -> PC      : 0x3ffe3bbc  PS      : 0x00050333  A0      : 0x3ffe3bbc  A1      : 0x3ffe3af0  
10:22:46.104 -> A2      : 0x40087a64  A3      : 0x00000000  A4      : 0x00000000  A5      : 0x000036f0  
10:22:46.104 -> A6      : 0x00000000  A7      : 0x3ffbdb20  A8      : 0xbaad5678  A9      : 0x80087782  
10:22:46.104 -> A10     : 0x3ffe3b50  A11     : 0x3ffc0304  A12     : 0x3ffc02fc  A13     : 0x3ffbd0ec  
10:22:46.104 -> A14     : 0x00000000  A15     : 0x00000000  SAR     : 0x00000000  EXCCAUSE: 0x00000014  
10:22:46.104 -> EXCVADDR: 0x3ffe3bbc  LBEG    : 0x3f401760  LEND    : 0x00000000  LCOUNT  : 0x00000001  
10:22:46.151 -> 
10:22:46.151 -> Backtrace: 0x3ffe3bbc:0x3ffe3af0 0x3ffe3bb9:0x3ffe3ba0 0x40082b40:0x3ffe3bf0 0x40082cd1:0x3ffe3c20 0x40078f2b:0x3ffe3c40 0x40078f91:0x3ffe3c70 0x40078f9c:0x3ffe3ca0 0x40079165:0x3ffe3cc0 0x400806da:0x3ffe3df0 0x40007c31:0x3ffe3eb0 0x4000073d:0x3ffe3f20
10:22:46.151 -> 
10:22:46.151 -> Rebooting...
10:22:46.151 -> ets Jun  8 2016 00:22:57
10:22:46.151 -> 
10:22:46.151 -> rst:0xc (SW_CPU_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
10:22:46.151 -> configsip: 0, SPIWP:0xee
10:22:46.151 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
10:22:46.151 -> mode:DIO, clock div:2
10:22:46.151 -> load:0x3fff0018,len:4
10:22:46.205 -> load:0x3fff001c,len:1100
10:22:46.205 -> load:0x40078000,len:9232
10:22:46.205 -> load:0x40080400,len:6412
10:22:46.205 -> entry 0x400806a8
10:22:46.452 -> Frequence du CPU :80
10:22:46.505 -> LoRa Initial OK!
10:22:46.505 -> Calibration du HX711
10:22:46.505 -> Enlever tous les poids de la balance
10:22:46.505 -> des la lecture commencee, placer un poids connu sur la balance
10:22:46.505 -> Presser a,s,d,f ajoute a la calibration 10,100,1000,10000 respectivement
10:22:46.505 -> Presser z,x,c,retranche a la calibration 10,100,1000,10000 respectivement
10:22:46.505 -> taper t dans le moniteur pour tarer la balance
10:22:47.308 -> Zero factor: 8375366
10:22:50.417 ->  Calibration: 11370.00
10:22:50.417 -> ****************
10:22:50.417 -> Poids de la ruche :0.95Kg
10:22:50.417 -> ****************

ceux-ci n'apparaissent en clair que si je choisis 115200 comme vitesse de transfert, sinon ils apparaissent en "garbage characters". A noter que le résultat apparait même si j'ai supprimé la fonction serial.

Ça ne pénalise en rien le fonctionnement de mes dispositifs mais franchement c'est pas top.

D'où cela peut-il venir ?

J'ajoute que je fonctionne sur alim extérieure alimentant le SoC sur l'entrée 5v (en fait, 5.3V). J'ai fait un essai sur lipo c'est pareil.

J'ai joué sur la fréquence du CPU (240, 160, 80) on ne peut pas descendre plus bas car ça désactive la fonction radio.
J'ai également comparé les méthodes d'abaissement de la fréquence du CPU (autre fil de discussion).

C'est toujours pareil.

Voilà ci-dessous un bout de mon code :

#include <SPI.h>
#include <HX711.h>
#include <LoRa.h>
#include <esp32-hal-cpu.h>

#define DOUT 4 
#define CLK  13 

void setup() {
  D_SerialBegin(115200);
  setCpuFrequencyMhz(80); 
  int cpuSpeed = getCpuFrequencyMhz();  
  D_SerialPrint("Frequence du CPU :");
  D_SerialPrintln(cpuSpeed);
  scale.begin(DOUT, CLK);

while (!Serial);
  SPI.begin(5, 19, 27, 18);
  LoRa.setPins(SS, RST, DI0);
  LoRa.begin(BAND);
  if (!LoRa.begin(BAND)) {
    D_SerialPrintln("Le demarrage de LoRa a echoue !");
    while (1);
  }
  LoRa.setSpreadingFactor(10); // Facteur d'étalement 7 est la valeur par défaut
  D_SerialPrintln("LoRa Initial OK!");

et dans le loop :

esp_sleep_enable_timer_wakeup(uSc_Sc * Sc_Mn * Time_To_Sleep); // Timer d'endormissement en microsecondes
  D_SerialPrint("deepsleep:");
  esp_deep_sleep_start();

J'attends vos suggestions, même si comme je l'ai dit plus haut tout est parfaitement fonctionnel à 80 MHz.

Bonjour

A noter que le résultat apparait même si j'ai supprimé la fonction serial.

Il y a le code de l'application qui utilise Serial . et ce qui se passe en coulisse : bootloader, FreeRTOS (systeme d'exploitation ) Tout ce petit monde se manifeste directement par le port série indépendement du code de l'application.

Ce message indique qu'à un certain moment une anomalie d'exécution d'instruction s'est produite :

Guru Meditation Error: Core  0 panic'ed (InstrFetchProhibited). Exception was unhandled.

ceci a entraîné un redémarrage avec émission du message tout à fait normal de démarrage :

10:22:46.151 -> Rebooting...
10:22:46.151 -> ets Jun  8 2016 00:22:57
10:22:46.151 -> 
10:22:46.151 -> rst:0xc (SW_CPU_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
10:22:46.151 -> configsip: 0, SPIWP:0xee
10:22:46.151 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
10:22:46.151 -> mode:DIO, clock div:2
10:22:46.151 -> load:0x3fff0018,len:4
10:22:46.205 -> load:0x3fff001c,len:1100
10:22:46.205 -> load:0x40078000,len:9232
10:22:46.205 -> load:0x40080400,len:6412
10:22:46.205 -> entry 0x400806a8

A part l'erreur initiale (InstrFetchProhibited) je ne vois rien d'anormal : le système démarre, signale les éléments clefs de son démarrage (type de Reset, mode d'accès à la mémoire Flash.... adresses des diverses partitions....) puis passe la main a l'application commençant à l'adresse 0x400806a8

l'ESP32 n'est pas un micro-controlleur, c'est un SOC (System On Chip) , le bootloader et le système d'exploitation (FreeRTOS) s'expriment avant que la main soit passée au code utilisateur !! C'est le sens de ces messages de damararge.

Merci pour toutes ces explications, c'est moins grave que ce que je pensais mais sur une bordée
de données j'ai de temps en temps ce message de panique, il n'apparait pas qu'au boot, d'ailleurs souvent le démarrage est sans message désagréable donc il y a un côté erratique dans tout ça...

Mais bon, ça marche...

Je vais stopper les investigations sur le sujet, quelqu'un a dit le mieux est l'ennemi du bien...

Cordialement

une investigation, pas forcément simple , permettrait de comprendre la cause de l''erreur qui produit une bonne partie du message 'système' + un redémarrage (avec son message) , erreur peut être erratique

Guru Meditation Error: Core  0 panic'ed (InstrFetchProhibited). Exception was unhandled.
10:22:46.104 -> Core 0 register dump:
10:22:46.104 -> PC      : 0x3ffe3bbc  PS      : 0x00050333  A0      : 0x3ffe3bbc  A1      : 0x3ffe3af0  
10:22:46.104 -> A2      : 0x40087a64  A3      : 0x00000000  A4      : 0x00000000  A5      : 0x000036f0  
10:22:46.104 -> A6      : 0x00000000  A7      : 0x3ffbdb20  A8      : 0xbaad5678  A9      : 0x80087782  
10:22:46.104 -> A10     : 0x3ffe3b50  A11     : 0x3ffc0304  A12     : 0x3ffc02fc  A13     : 0x3ffbd0ec  
10:22:46.104 -> A14     : 0x00000000  A15     : 0x00000000  SAR     : 0x00000000  EXCCAUSE: 0x00000014  
10:22:46.104 -> EXCVADDR: 0x3ffe3bbc  LBEG    : 0x3f401760  LEND    : 0x00000000  LCOUNT  : 0x00000001  
10:22:46.151 -> 
10:22:46.151 -> Backtrace: 0x3ffe3bbc:0x3ffe3af0 0x3ffe3bb9:0x3ffe3ba0 0x40082b40:0x3ffe3bf0 0x40082cd1:0x3ffe3c20 0x40078f2b:0x3ffe3c40 0x40078f91:0x3ffe3c70 0x40078f9c:0x3ffe3ca0 0x40079165:0x3ffe3cc0 0x400806da:0x3ffe3df0 0x40007c31:0x3ffe3eb0 0x4000073d:0x3ffe3f20
10:22:46.151 ->

Un outil permet d'analyser l'erreur , voire localiser la fonction en cause : GitHub - me-no-dev/EspExceptionDecoder: Exception Stack Trace Decoder for ESP8266 and ESP32

Par ailleurs il n'est pas exclu qu'on puisse configurer la puce pour que ces messages 'système' soient déroutés vers un autre port série (l'ESP32 à 3 UART)
Il en est question ici mais ça ne fonctionne peut être pas sous IDE Arduino :

Je vais stopper les investigations sur le sujet, quelqu'un a dit le mieux est l'ennemi du bien...

C'est raisonnable !!

En cas de doute voici ce qu'on peut lire ici sur l'erreur InstrFetchPhohibited

InstrFetchProhibited
This CPU exception indicates that CPU could not load an instruction because the the address of the instruction did not belong to a valid region in instruction RAM or ROM.
Usually this means an attempt to call a function pointer, which does not point to valid code.

PC

(Program Counter) register can be used as an indicator: it will be zero or will contain garbage value (not

0x4xxxxxxx

).

Merci d'avoir fouillé pour moi dans les arcanes d'espressif.

Je vais finalement encore creuser (un peu).

Oui j'avais vu qu'il était possible de dérouter ce type de message vers un autre port série. Cela dit, ça ne change pas grand chose sinon au plan de de l'esthétique. On ne voit plus de message paniquant ni full of garbage.