Ich würde gerne die SoftWire Library auf einem Raspi Pico 2W unter Arduino verwenden um einen SHT45 Temperatur- und Feuchtesensor auszulesen. Die SoftWire weil ich HW-unabhängig sein möchte und die Pins flexibel zuzuordnen sein sollen. Außerdem könnten mehr als die in HW vorhandenen I2C Interfaces benötigt werden.
Dabei kommt es immer wieder zu fehlenden Acknowledges. Wenn ich mir die Signale mit dem Oszi anschaue sehe ich immer wieder Phasen in denen SCL oder auch SDA auf Low sind und dann offensichtlich für 400ns getristated werden bevor sie wieder auf Low geschaltet werden. Der 4k7 Pullup zieht die Pegel dann bis auf ca. 2,2V hoch was natürlich Probleme verursachen kann
In der SoftWire sind solche kurzen Intervalle nicht vorhanden da bei meinen Einstellungen nach jedem Pinwechsel 10us gewartet wird was ich zusätzlich durch Traces in der Lib überprüft habe.
Die SoftWire verwendet digitalWrite, digitalRead und pinMode. Wenn ich die GPIO-Zugriffe durch eigene Funktionen ersetze die gpio_set_dir, gpio_get und gpio_put verwenden funktioniert alles.
pinMode scheint etwas unsauber implementiert zu sein, da zuerst der GPIO zurückgesetzt wird (und damit auch auf Input gestellt wird) und erst danach die Richtung eingestellt wird. Allerdings erklärt das nicht das Problem, da pinMode nur dann aufgerufen wird wenn ohnehin eine Änderung der Richtung erforderlich ist. Das beschriebene unsaubere Verhalten würde aber nur Probleme verursachen wenn man mehrmals hintereinander auf Output konfiguriert.
Kennt jemand solche oder ähnliche Probleme mit den Pico 2 GPIOs?

