r-map / rmap

rete monitoraggio ambientale partecipativo documentation at https://doc.rmap.cc
https://rmap.cc
52 stars 43 forks source link

firmware: reboot i2c at first error #405

Closed mbaldinetti closed 2 years ago

mbaldinetti commented 2 years ago

restarting the i2c bus at each error makes the system more responsive in case of multiple errors on the bus also due to other modules

pat1 commented 2 years ago

non sono convinto di questa strategia in senso generale, il bus I2C deve funzionare ed essere stabile prima di tutto. Il reset porta a una temporanea indisponibilità a rispondere a richieste tipo request che anche se non utilizzata non può comunque essere implementeta per uso generale. Con l'attuale funzionamento sul modulo master in corso di test non è MAI stato necessario un reset del bus. Inoltre sul modulo master (unico modulo) il reset del bus è un HARD reset e porta down per un certo tempo SDA e SCL quindi è distruttivo per il bus. Si può applicare questa strategia per gli altri modulo ma NON per il modulo master.

pat1 commented 2 years ago

guardare a https://github.com/r-map/rmap/blob/0b20edf5572831bc5069464f7f5a1e8b7f4da1ec/platformio/stima_v3/stima/src/stima.ino#L378 operazione necessaria per recuperare da blocchi ben documentati su I2C

mbaldinetti commented 2 years ago

è ovvio che è una situazione al limite ma con tanti disturbi esterni sul bus, per ora, è l'unico modo che lo rende funzionante. se si trovano strategie migliori, ben vengano ma preferisco una situazione funzionante che ad una che in teoria dovrebbe funzionare.

pat1 commented 2 years ago

tutti i test superati con successo compreso con il generatore di rumore i2c_noise_generator che simula una situazione completamente degenerata.