I²C, SPI, CAN-Protokolle und das OSI-Modell

Gibt es eine Referenz oder was ist die Erklärung dafür, dass I²C und SPI nur Protokolle der physikalischen Schicht im OSI-Modell sind (ich weiß, dass dieses Modell für die Kommunikation und möglicherweise nicht genau für Bordbusse bestimmt ist) oder ist das Protokoll der Sicherungsschicht darin definiert? ihnen?

Wie sieht es mit dem CAN-Protokoll aus?

Diese Frage scheint nicht zum Thema zu gehören, da es nicht um elektronisches Design geht.
Hallo, ich wollte es in Stackoverflow hinterfragen, aber ich denke, die Leute dort werden sagen, dass es keine Programmierfrage ist, obwohl SPI- und I2C-Tags in beiden Gruppen gefunden werden. Sie können meine letzte Frage zum UART-Protokoll in Stackoverflow und das Lob und die negativen Punkte sehen, die ich erhalten habe, weil die Leute dort denken, dass die Frage in electronic.stackexchange.com gestellt werden sollte, und deshalb habe ich dieses Konto gestern eröffnet.
Low-Level-Hardwareprotokolle wie SPI, IIC und CAN sind für die Elektrotechnik relevant, daher denke ich, dass dies hier ein Thema ist, auch wenn die spezifische Frage eher theoretisch ist und ihre Antwort im praktischen Sinne sinnlos ist.

Antworten (3)

Beide. Der OSI-Stack ist so abstrakt, dass praktisch jedes in der Industrie verwendete Protokoll höchstwahrscheinlich praktische Überlegungen enthält, die mehrere Ebenen effektiv implementieren.

Wenn diese Protokolle ihre Data Link Layer-Definition enthalten, bedeutet dies, dass nicht ich definiere, wie der Frame gefüllt wird (Kombination aus Adresse, Daten und Befehlen). Es ist bereits in SPI oder I2C definiert, dass beispielsweise die ersten 3 Bits sind Adressbits, dann haben wir 4 Datenbits, dann haben wir wieder 2 Adressbits usw. aber nirgendwo im Netz habe ich diese Information gefunden. Könnten Sie bitte mehr erklären?
Diese Industrieprotokolle enthalten fast immer Definitionen mehrerer Schichten, wenn nicht explizit, dann implizit durch ihre Annahme, dass diese Bitformate auf eine bestimmte Weise verwendet werden. Der wirkliche Test, ob so etwas wie ein Bitformat nur eine Datenschicht ist, wäre zu zeigen, dass mehrere isolierte Protokolle dieselbe Datenschicht ohne Modifikation verwenden. Dies ist selten der Fall, da jedes Protokoll spezifische Anforderungen hat, die in die Daten- und Physischen Schichten eindringen.

I2C arbeitet in Bezug auf definierte Transaktionen mit Arbitrierung und Handshaking, sodass es vernünftigerweise sowohl als Datenverbindungsschicht als auch als physische Schicht betrachtet werden kann, obwohl es nicht unbedingt gut zum OSI-Muster passt. SPI ist nicht wirklich ein Standard, sondern ein Begriff, der verwendet wird, um eine Vielzahl von Kommunikationsdesigns zu beschreiben. Als solches qualifiziert es sich kaum als Protokoll der physikalischen Schicht.

Sowohl mit SPI als auch mit I2C kann man zu höheren Schichten aufsteigen, wenn man seinen Fokus auf bestimmte Chipstile beschränkt. Zum Beispiel gibt es einen gemeinsamen Standard für I2C-EEPROMs bis zu 2 KByte und einen anderen, der für I2C-EEPROMs bis zu 512 KByte anwendbar wäre (obwohl ich noch keine so großen Geräte gesehen habe, die ihn verwenden). Solche Standards definieren nicht nur, wie Transaktionen auf dem Chip durchgeführt werden, sondern legen auch fest, was der Chip mit den darin enthaltenen Daten macht.

Nichts so explizites. Sie können versuchen, bestimmte Teile des I²C-Protokolls für verschiedene OSI-Schichten zu definieren, aber wie Sie sie definieren und wie jemand anderes sie definiert, würde nicht übereinstimmen (fragen Sie fünf Ingenieure und erhalten Sie sieben verschiedene Antworten).

Meine Meinung dazu ist, dass die physische Schicht die einfachste ist. I²C erfordert zwei Busleitungen mit offenem Kollektor, die mit Pullup-Widerständen mit dem Wert X an V CC angeschlossen sind und auf die Kapazität Y pF begrenzt sind (wobei X und Y basierend auf der gewünschten Frequenz des I²C-Busses berechnet werden). Die I²C-Geräte sollten die Leitung im Ruhezustand freigeben und die Leitung nur bei aktiver Kommunikation auf Low ziehen. Das ist die physische Schicht.

Die Datenschicht ist etwas komplexer. I²C-Master, insbesondere in einem Multi-Master-System, sollten beim Kommunikationsversuch prüfen, ob die Leitungen auf Low gezogen sind, wenn frei, versuchen Sie die Kommunikation, prüfen Sie die Leitung erneut. Wenn es zu irgendeinem Zeitpunkt unerwartet niedrig ist, befolgen Sie die Schlichtungsprotokolle . I²C-Slaves (und -Master) können auch Clock-Stretching implementieren und die Kommunikation steuern, indem sie Taktimpulse verhindern.

Physische und logische Adressierung fallen sowohl unter die Datenverbindungsschicht als auch unter die Vermittlungsschicht, wenn Sie Busexpander/Multiplexer/Puffer/Hot-Swap-ICs einbeziehen. I²C hat nicht wirklich eine Netzwerktopologie oder ein IP- Äquivalent, da Busexpander eine nicht-Spezifikations-Hacky-Lösung sind, die Hersteller entwickelt haben.

Wenn ich also einen Mikrocontroller mit I²C-Kommunikationsschnittstelle kaufe und ihn über serielle Kabel an ein integriertes Peripheriegerät anschließen möchte, das auch über eine I²C-Schnittstelle verfügt, kann ich der Definition der I²C-Schaltung (Physical Layer) folgen und zwei Leitungen mit den obigen Widerständen erstellen , dann definiere meinen Frame (Adresse, Daten, Befehl) mit fast vollständiger Freiheit, dann definiere eine Art Logik, die Arbitrierung, Handshaking, ... (Datenverbindungsschicht-Sachen) durchführt.
Wenn ich Ihre Erklärung lese, scheint es mir, als würde ich fragen: Wie definiere ich ein OSI-Modell für eine parallele RLC-Schaltung? sieht meine Frage so aus? Danke
@Michelle nein, nicht völlige Freiheit. i2c-Geräte erwarten, dass der "Frame" startet, 7-Bit-Adresse + 1-Bit-Lese-/Schreib-Bit, n Datenbytes, Stopp (oder Neustart).