I2C-Slave kompatibel mit SMBus-Protokoll?

Ich habe einige Anfragen zur Verwendung eines I2C-Slave-Controllers (von Arria 10 FPGA).

Wir prüfen derzeit die Unterstützung des MCTP-Protokolls in unserem Gerät, dessen Bitübertragungsschicht gemäß den MCTP-Spezifikationen auf SMBus/I2C aufbaut. Unser Ausgangspunkt wäre, den eingebauten I2C-Controller in unserem festen Prozessor innerhalb des FPGA zu verwenden. Unser Gerät würde nur als I2C-Slave fungieren, was bedeutet, dass es keine Kommunikation initiiert.

Ich verstehe, dass SMBus und I2C hauptsächlich Ähnlichkeiten im elektrischen Signalpegel haben, mit Ausnahme der Geschwindigkeit (SMBus ist nur bis zu 100 kHz Takt, während I2C höhere Takte unterstützt; aber wir sind sowieso gerade nach der grundlegenden Implementierung bei 100 kHz Takt, also ist dies kein Problem) . Später in den MCTP-Spezifikationen wird das MCTP-Verhalten jedoch nur in Bezug auf das SMBus-Protokoll beschrieben, wie z. B. SMBus-Blockschreiben, das ich in I2C nicht genau äquivalent sehe. Es empfahl auch die Verwendung von ARP, das meiner Meinung nach nicht in I2C und nur in SMBus spezifiziert ist. Ich erwarte also, dass der MCTP-Host mir, dem Gerät, Befehle in Bezug auf das SMBus-Protokoll sendet. Wenn wir nun einen SMBus-Controller in Arria 10 haben, ist dies kein Problem, aber wir haben nur I2C, und ich bin mir nicht sicher, ob unser I2C-„Slave“-Controller das SMBus-Protokoll versteht. ICH' Ich habe versucht, online zu recherchieren, aber ich bekomme widersprüchliche Ansichten. Ich habe auch Altera gefragt, warte aber immer noch auf ihre Antwort. Was ich immer wieder gelesen habe, ist, dass "SMBus eine Teilmenge von I2C ist".

Ich mache mir hauptsächlich Sorgen um Multibyte-Transaktionen (Blockschreiben, Lesen, Multibyte-Schreiben, wie auch immer sie heißen), da der Host Pakete sendet und ich mit einer bestimmten Anzahl von Datenbytes antworte. Funktioniert unser I2C-Controller mit dem SMBus-Protokoll? Lass mich wissen was du denkst.

Diese Antwort auf eine verwandte Frage enthält möglicherweise nützliche Informationen, falls Sie sie noch nicht gesehen haben.
Danke für den Link. Ich habe es gelesen. Es behandelt hauptsächlich den Fall von I2C als Master und smbus als Slave; Mein Fall ist umgekehrt - ich bin der I2C-Slave und nehme höchstwahrscheinlich Befehle vom SMBus-Protokoll-treuen Master entgegen. Der Link, den ich gelesen habe, ist hier . Ich bin verwirrt, da es empfiehlt, die SMBus-Seite zu optimieren, wenn ich dort keine Kontrolle habe.

Antworten (1)

Das hängt davon ab, wie viel I2C-Protokoll in Ihrem Arria-Controller implementiert ist. Wenn es nur die "Ereignisse" an das Programm meldet (wie "STOP erkannt", "START erkannt", "ACK erhalten", "Adresse erhalten" usw.), können Sie höchstwahrscheinlich die meisten implementieren SMBus, außer vielleicht ARP, das AFAIR erfordert, das auf eine Broadcast-Adresse antwortet (die Ihr Controller möglicherweise nicht unterstützt). Die andere Sorge sind Zeitüberschreitungen. SMBus hat strengere Timeouts, insbesondere im Hinblick auf die Taktdehnung. Die Kompatibilität würde stark davon abhängen, inwieweit der Master das SMBus-Protokoll verwendet und Konformität erwartet.

Wenn Ihr Arria andererseits eine Abstraktion auf höherer Ebene bietet (wie "I2C-Byte senden"), wird dies höchstwahrscheinlich ein Show-Stopper sein.

Wenn Sie ein Evaluierungsboard für Ihr Arria 10 FPGA haben, würde ich empfehlen, das Konzept mit diesem Board zu testen, bevor Sie diesen Chip für Design und Produktion verwenden.

Ich stimme zu, die kleinen Unterschiede auf niedriger Ebene sind wahrscheinlich kein Problem, aber die Implementierung der SMBus-Funktionen auf höherer Ebene könnte ein Problem sein. Bei 100 kHz ist der I2C tatsächlich nicht vollständig kompatibel mit dem SMBus. Zum Beispiel dürfen SDA und SCL für I2C gleichzeitig niedrig werden, aber nicht für den SMBus.