I2C durch SM-Bus ersetzen

Gast #1111339
Hallo,
kennt sich hier jemand mit der Einbindung eines Sm-Bus aus?
hier mal ein kleiner Vergleich von I2C und Sm-Bus

                    I²C                      SMBus

Timeout             No                       Yes
Minimum Clock Speed DC                       10kHz
Maximum Clock Speed 100kHz od. 400kHz        100kHz
VHIGH               0.7 × VDD, 3.0V Fixed    2.1V
VLOW                0.3 × VDD, 1.5V Fixed    0.8V
Max I               3mA                      350μA
Clock Nomenclature  SCL                      SMBCLK
Data Nomenclature   SDA                      SMBDAT
General Call        Yes                      Yes
Alert#              No                       Yes

Habe ein fertiges Programm mit I2C für ein LCD Display. I2C und Sm-Bus 
ist ja anscheinend kompatibel. Was heisst das denn ganz genau?
Würde das mit Blick auf den Vergleich oben bedeuten, dass ich einfach wo 
jetzt noch bei Clock Nomenclature(vom I2C) SCL steht, einfach durch 
SMBCLK vom SM-Bus in meinem Programm abändere?
Grüße
Gast #1111349
Wenn ich mal Wikipedia zitieren darf: "Der SMBus basiert auf dem 
I²C-Serienbusprotokoll von Philips."
Also: Im Prinzip muß im Programm nichts geändert werden, wenn der Takt 
schnell genug ist und die Signalpegel kein Problem, die 
Pull-Up-Widerstände nicht zu klein sind, dann kann man direkt SMBCLK als 
SCL anschließen und SMBDAT als SDA.
Gast #1111363
Anstatt TTL sind basiert der SMB auf CMOS I/O, speziell der 0.8/0.6/...
low pegel kann zu Problemen führen. Was du natürlich einführen solltest
ist das SMB-Timeout. Sonst kann es passieren, daß dein I2C Slave den
ganzen Bus lahmlegt, ohne Ausweg. Was SMB auch noch hat, ist eine
dynamisch Adressvergabe der Bausteine, denke aber nicht, daß du das
implementieren musst.
Gast #1111370
arbeite mit 100kHz. also von dem her kein Problem.
Kenne mich halt noch nicht so aus in der Materie. Meinst du also das ich 
den Code, z.B.: SCL in SMBCLK abändern müsste oder einfach alles so 
lassen?
Wie bekomme ich das denn mit den Spannungen hin?

Minimum Pullup Resistor Values per Bus Specifications

           3V VDD       5V  VDD
I²C Bus    > 1k        > 1.6k
SMBus      > 8.5k      > 14k

Kannst du mit den Werten etwas anfangen?
Gruß
Gast #1111378
Was ich dir raten würde, den Timeout einzubauen. Alles andere kannst du 
in SW lassen. Die Spannung, nimm CMOS I/O´s, viele uC nutzen das auch
bei I2C, sonst brauchst du einen Buffer. Die Pull-ups sind die 
Wiederstände, welche zu 3V oder 5V geführt werden, damit der I2C slave 
startet.
Gast #1111526
Wie baue ich denn den Timeout in das Programm ein?Chris: Was meinst du 
mit SW? Könntest du mir evtl noch erklären wie man das mit den pull ups 
macht?
gruß

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.