Nachdem ich bereits glaubte durch die Änderung der Stromversorgung etwas zur Stabilität beigetragen zu haben, tauchten leider sporadisch immer noch Probleme auf. Diese waren nach wie vor in keinem Log zu erkennen und wegen des sporadischen Auftretens auch nicht zb. im Logic Analyzer oder Ozilloskop aufzuzeichnen.
Dies sind die durchgeführten Hardwareverbesserungen im Ausschlussprinzip:
– Kabel und Box mit Alu abgeschirmt: crash
– Relais entfernt und durch SSR ersetzt: crash
– ESP ohne die langen Kabel / Antennen laufen lassen: crash
– andere Stromversorgung verwendet: crash
– nur noch VIN bedienen, nicht mehr 3.3V parallel versorgen: crash
– glättenden Kondensator an der Stromversorgung: crash
– Wifi Kommunikation reduziert durch neues Protokoll: crash
– MQTTget und push deaktiviert: crash
– 2k2 pullups statt 10k auf i2c: crash
Des Rätsels Lösung konnte ich dann mit Unterstützung durch stickbreaker erschlagen: Bei der Kommunikation über i2c trat – ausgelöst durch einen Bug im Arduino Core – ein Crash auf sobald ein READ Kommando mit 0 bytes Länge abgesetzt wurde. Daraufhin landete der Slave in einer unbegrenzten Warteschleife und das STOP Kommando konnte nie abgesetzt werden. Und somit war der ganze Chip in einem permanenten WAIT Status während SDA nie auf high gehen konnte („Stop“).
Ja, das ist gemein und betrifft alle ESP32 Arduino Cores vor Commit 9a7946e (Version 1.0.1-rc4) und nach irgend einer Version aus dem September 2018.
Schreibe einen Kommentar