Anforderungen des I2C-Busses
Die I2C-Spezifikation stellt eine Reihe von Anforderungen an Busteilnehmer. Die Wichtigsten sind:
- Sowohl SDA als auch SCL müssen als Open-Kollektor / Open-Drain-Schaltung ausgelegt sein und dürfen den Bus nicht aktiv gegen High treiben.
- Für die meisten I2C-Busse gilt, dass sich die Logikpegel an der Versorgungsspannung des Busses orientieren, d. h. 1,1 V wird an einem mit 5 V versorgten Bus als low, in einem mit 1,2 V versorgten Bus als high interpretiert.
- SCL und SDA müssen über Schmitt-Trigger-Eingänge eingelesen werden, d. h. mit einer gewissen Hysterese.
- Spikes müssen bis zu einem gewissen Grad herausgefiltert werden (bei Übertragungen mit Fullspeed).
- Set-up- und Hold-Zeiten: Diese legen eine maximale SCL-Taktrate fest (100 kHz bei Standard Speed, 400 kHz bei Full Speed).
I2C Bus Anforderungen an Softwareimplementationen
Die meisten mit I2C ausgestatteten Standard-ICs erfüllen die I2C Bus Anforderungen. Problematisch in dieser Hinsicht sind hingegen Software-Implementierungen. Auch wenn der Bus hinsichtlich des Timings tolerant ist und Sie notfalls mit Hilfe des Clock Stretching den Bus anhalten können, sollten Sie das natürlich vermeiden, denn nicht jeder I2C-Bus-Master kommt mit solchen Situationen klar.
Es gibt viele Hundert Implementierungen in Software. Auch wenn man sich seit Jahren immer wieder mit dem I2C-Bus beschäftigt, ist man erstaunt, zu welchen Problemen es bei diesen Implementationen kommen kann und leider auch heute noch kommt.