Forum: Mikrocontroller und Digitale Elektronik I2C sichere Übertragung


von Christoph (Gast)


Lesenswert?

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

von AVRuser (Gast)


Lesenswert?

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).

von Horst H. (horha)


Lesenswert?

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.

von Matthias L. (matze88)


Lesenswert?

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)

von Uhu U. (uhu)


Lesenswert?

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.

von Christoph (Gast)


Lesenswert?

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.

von Horst H. (horha)


Lesenswert?

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
Noch kein Account? Hier anmelden.