Anforderungen des I2C Bus
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, daß sich die Logigpegel 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 inputs eingelesen werden d.h. mit einer gewissen Hysterese.
- Spikes müssen bis zu einem gewissen Grad herausgefiltert werden (bei Übertragungen mit Fullspeed).
- Setup und Hold-Zeiten: diese beinhalten Maxima für die Taktrate von 100 bzw. 400 kHz.
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 den I2C Bus beschäftigt ist man erstaunt, zu welchen Problemen es bei diesen Implementationen kommen kann und leider auch heute noch kommt.