Sowohl der SMBus als auch der I2C-Bus arbeiten mit einer Takt- und einer Datenleitung. Beide Systeme sind in vielen Bereichen zueinander kompatibel, was insbesondere für den prinzipiellen elektrischen Aufbau und das Übertragungsschema gilt. Eine logische Null wird durch das Gegen-Masse-Ziehen einer Leitung erreicht (open collector), während der Grundzustand beider Leitungen die 1 (high) ist. Dies impliziert auch, daß beide Busse terminiert, d.h. über einen Widerstand mit der Referenzspannung versorgt werden müssen.
Häufig lassen sich SMBus- und I2C-Teilnehmer beliebig mischen, solange der Bustakt unter 100 kHz und schneller als 5 kHz ist. Der SMBus ist im Gegensatz zu I2C auf diesen Geschwindigkeitsbereich beschränkt, da er vor allem für Steuerungsaufgaben verwendet wird, welche keine höheren Taktraten erfordern.
Ein wesentlicher Unterschied der beiden Systeme ist die Art der Fehlerbehandlung. Theoretisch kann ein I2C-Slave die SCL-Leitung (Takt) beliebig lange gegen Masse ziehen und dem Master so anzeigen, daß er noch nicht für die nächste Übertragung bereit ist. Maximalwerte für dieses Blockieren finden sich nicht in der I2C-Spezifikation. Ein Master kann lediglich versuchen, die Leitung auf High zu legen; erst wenn ihm dies gelingt ist der Bus wieder frei.
Der SMBus definiert ein Timeout von 35 µs und eine minimale Taktrate von 10 kHz. Bleibt die Takt- oder Datenleitung länger als das Timeout auf 0, so können und müssen alle Slaves ihre interne Zustandsmaschine zurücksetzen und so den Bus wieder freigeben.
Dies bedeutet einen erheblichen Vorteil bei der Erkennung und Behebung von Fehlern, die durch blockierte oder ausgefallene Busteilnehmer entstehen können.
Einen weiteren Unterschied stellt die Definition der minimalen und maximalen Werte für die Busterminierung dar. Während I2C-Teilnehmer in der Lage sein müssen, bis zu 3 mA abzuleiten, ist dieser Wert in der SMBus-Spezifikation auf 350 µA begrenzt, um die Teilnehmer diesbezüglich zu entlasten. Diese Werte für die Stomstärke ergeben zusammen mit der Referenzspannung die maximal mögliche Busterminierung, welche für den SMBus erheblich niedriger ausfällt. Nachteil einer niedrigen Terminierung ist ein erhöhter Einfluß der Buskapazität auf die Signalqualität, was jedoch mit der Beschränkung des Bustaktes auf 100 kHz relativiert wird.
Ein weit weniger relevanter Unterschied beider Busse ist die Definition der elektrischen Pegelgrenzen für 1 und 0, da die meisten Busteilnehmer diese Limits ohnehin nicht ausreizen, sondern eine 0 durch eine "beinahe 0" darstellen und die 1 durch die Terminierung definiert ist.
Der I2C-Bus definiert einen sogenannten "General Call" auf Adresse 0. Hier dürfen sich dann alle Slaves angesprochen fühlen und entsprechend reagieren. In der Praxis findet man hierfür allerdings kaum Anwendungen. Der SMBus definiert statt dessen eine Alert-Leitung, die als Interrupt zum Busmaster fungiert und bewirkt, daß der Master eine Bestätigung aussendet, auf die hin alle Slaves ihre Adresse an den Bus senden. Im Wege einer durch die Open-Collector-Technologie bewirkten Arbitrierung wird ein Slave ausgewählt, der dann mit dem Master kommunizieren kann.
Dieser Prozeß kann dann für alle Slaves wiederholt und so die Interrupts abgearbeitet werden.
Darüberhinaus existieren noch weitere Detailunterschiede der beiden Busse, die in der Praxis nur selten zum Tragen kommen. Einzig die Fähigkeit des SMB-Buses, die Terminierung im Ruhezustand ganz abzuschalten, muß häufig gesondert unterstützt werden, um das Wiedereinschalten der Terminierungsspannung nicht als Start- oder Stopbedingung fehlzuinterpretieren.
Beachten Sie bitte, daß Tracii XL den SMBus, wie natürlich auch den I2C Bus voll unterstützt.
Eine ausführliche Gegenüberstellung I2C / SMBus finden Sie
hier.