Ja das geht mit dem I2C-Bus sogar sehr einfach ohne Absprache unter den einzelnen Slaves/Mastern. Wenn beide Leitungen High haben kann jeder anfangen zu senden. Im übrigen nicht nur an einen Slave sondern auch gleichzeitig an mehrere, falls die die gleiche Slave Adresse haben.
Es gibt natürlich den seltenen Fall das versehendlich 2 oder mehr Master gleichzeitig beginnen zu senden. Aber auch das ist kein Problem, da dies die offizielle Norm vorsieht. Jeder Controller muß beim belassen des High Pegels auf einer Datenleitung prüfen, ob die auch noch High ist. Wenn mehrere gleichzeitig senden wird irgendwann einer statt High Low senden wollen. Das wird dann von den Slaves die High senden wollen zum Anlass genommen sich einfach zurückzuziehen. Somit kommt immer der Slave durch, der Datenübertragung mit den meisten Nullen beginnt.
Eine einfache aber praktikable Lösung die so von Philips vorgesehen ist.
Das einzige Problem scheint mir, das viele I2C Routinen die so im Umlauf sind noch nicht ganz korrekt diesen Umstand berücksichtigen. Einige prüfen noch nicht mal den Signalpegel nach sondern senden sturr weiter. Da oft beim I2C Bus nur der Master Slave Mode genutzt wird funktionieren diese Treiber dann auch oft.
Der bidirektional Mode beginnt aber langsam mehr Freunde zu finden, so das die Treiber besser werden sollten.
Gruß Frank
Lesezeichen