Hallo, ich möchte 2 Geräte (beides mit PIC Prozessoren,hardware I2c) per I2c verbinden. Wichtig ist dabei, dass Daten( Befehle ) sicher auf der anderen Seite ankommen. Die Geräte sind etwa 5 Meter entfert voneinader. Wenn durch Störungen auf der Leitung einzelne Bits gekippt werden, würden die Daten nicht korrekt ankommen. Nun die Frage: Kann I2c so etwas selbst erkennen, und in dem Falle einen retransmit anfordern, oder müsste dort ein richtiges Protokoll her? Wenn ja, gibt es dort simple Protokolle? Vielen Dank, Christoph
Hallo, für Deine Anwendung ist I2C für eine so grosse Entfernung denkbar ungeeignet. Dieser Bus ist nur für kurze Strecken ausgelegt, und ausser einem "Acknowledge" findet kein Handshake oder gar eine Fehlererkennung statt. Es gibt zwar auch I2C-Bustreiber (ich glaube von NXP), aber die lösen höchstens eine Deiner Anforderungen. Für eine solche Übertragung von Daten über ca. 5m wäre eine serielle Schnittstelle auf beiden Seiten sinnvoll (entweder mit RS-232- oder, wenn es schnell und störsicher sein soll, mit RS-422-Treibern). Für die Fehler- Korrektur und ein gesichertes Protokoll musst Du dann allerdings selbst sorgen. Kleiner Vorteil: man kann seriell auch Full Duplex übertragen (also in beide Richtungen).
Hallo, ein Protokoll ist doch zwischen zwei Mikrokontrollern auch über I2C zu realisieren. Man kann ja eine CRC der Daten mitsenden und der Empfänger wird dies dann testen und als Antwort etwas wie OK, Wiederhole, bin beschäftigt etc. zurücksenden.
bleibt weiter das Problem, dass I2C nicht für solche Distanzen gemacht ist. Vielleicht hat der TE ja nochmal die geforderte Geschwindigkeit parat? BTW dürfte Uart auch etwas leichter zu programmieren sein, vor allem wenn Daten hin und hergehen (das müssen sie, wenn Fehlerkorrektur/Retransmission gefordert ist)
Horst Hahn schrieb: > Hallo, > > ein Protokoll ist doch zwischen zwei Mikrokontrollern auch über I2C zu > realisieren. > Man kann ja eine CRC der Daten mitsenden und der Empfänger wird dies > dann testen und als Antwort etwas wie OK, Wiederhole, bin beschäftigt > etc. zurücksenden. Nur ist I²C für solche Strecken nicht konstruiert und wird wahrscheinlich sehr viele Fehler produzieren, was selbst mit einem Protokoll nicht sonderlich effizient ist.
Es müssen nur kleine Datenmengen übertragen werden. Vielleicht ein paar Befehle von 5-20 Byte alle Paar Sekunden. Zeitkritisch ist da nichts. Die langsamste Übertragungsrate ist also möglich um Fehler zu vermeiden. Treiberbausteine wollte ich nicht verwenden, da es ein modulares System sein soll,dass nicht nur auf einen Schnittstellentyp festgelegt ist.
Hallo, wieviel mA können denn die Port-Ausgänge für I2C treiben? Doch sicher mehr als die 3 mA eines LM75. Der schafft 100 khz an 400 pf Last. Bei ~100 pf/m Kabelkapazität also etwa 3 m mit den Kapazitäten der IO-Pinne . 20 m bei 10 khz: [[Beitrag "Re: I2C Hausbus NSLU2"]] Mit Bustreibern ist erheblich mehr möglich. http://www.standardics.nxp.com/support/documents/i2c/pdf/an10658.pdf Mit einem eigenem Protokoll, könntest Du ja auch die Datenrate per Handshake langsam hoch fahren bis Fehler auftreten und dann wieder absenken.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.