Hallo,
grundsätzlich hat es im normalen I2C-Modus ja nur 7-Bit Adressen, wobei
Adressen mit 0000xxx und 1111xxx reserviert sind, d.h. es blieben noch
112 Möglichkeiten übrig, die man per Software durchprobieren kann. Das
sollte eigentlich kein Problem sein, denn wenn kein Gerät mit der
getesteten Adresse da ist, gibt's auch kein Acknowledge. Unterstützt
der I2C-Slave General Call, dann geht's noch einfacher. Mit der
General Call Address (0000000 --> eine der bereits erwähnten
Reservierten) wird einfach alles am I2C-Bus angesprochen. Damit lässt
sich dann z.B. auch die I2C-Adresse eines Slaves per Software neu
vergeben.
Wenn zwei Slaves die gleiche Adresse haben, dann antworten sie auch
gleichzeitig. Grundsätzlich arbeitet der I2C-Bus nach dem
Wired-And-Prinzip, d.h. eine 1 wird von einer 0 überschrieben. Wenn
zwei Master gleichzeitig senden, dann prüfen sie jeweils, ob das was
sie schreiben auch auf dem Bus ankommt und wenn nicht, dann hören sie
auf zu schreiben. Im Klartext heisst das, daß sich einer der beiden
durchsetzt. Bei den Slaves gibt es also zwei Möglichkeiten: Entweder
das tut genauso und es antwortet eben nur einer von beiden oder es
antworten beide und es gibt Datenmüll...
Grundsätzlich sollte die I2C-Beschreibung weiterhelfen:
http://www.semiconductors.philips.com/acrobat_download/literature/9398/39340011.pdf
Gruss Florian.