Forum: Mikrocontroller und Digitale Elektronik µC Netzwerk mit I2C


von Raio (Gast)


Lesenswert?

Guten Tag,
ich versuche mehrere µCs über den I2C Bus zu vernetzen.
Ich verwende da zu Freescale Prozessoren, die einen Hardware
I2C-Controller integriert haben.
Die Ansteuerung des I2C funktioniert ohne Probleme, ich will jetzt eine
höhere Protokollschicht über den I2C legen. Dieses Protokoll soll dazu
dienen Übertragungsfehler zu erkennen (Chksum?) und den Datenempfang zu
bestätigen. Bevor ich das Protokoll selber schreibe, würde mich
interessieren ob jemand schon Erfahrungen oder gute Ratschläge hat, wie
man dieses Problem am Geschicktesten lösen kann.

von Markus_8051 (Gast)


Lesenswert?

Da der I2C-bus ein single-Master Bus ist, ist er zur Vernetzung
(gleichwertiger) µCs eher nicht geeignet.

Gruß,
Markus_8051

von Peter D. (peda)


Lesenswert?

"Da der I2C-bus ein single-Master Bus ist..."

Eher nicht.


Peter

von Markus_8051 (Gast)


Lesenswert?

O.K., sorry, Peter hat recht. Ich habe es gerade nochmal nachgelesen.
I2C ist ein Multi-Master-Bus.

Habe ich aber bisher noch nie ausgenutzt, lief bei mir immer
"single-master".

Markus_8051

von Radio (Gast)


Lesenswert?

Danke erst mal für die schnellen Antworten.
Ich habe auch nur einen Master. Der soll mit den anderen µCs (Slaves)
kommunizieren, wo bei jeder Slave auch nur mit dem Master kommunizieren
darf. Ich will bloß sicher sein, das die Daten fehlerfrei ankommen und
auch bestätigt werden. Weil ich z.b die Slaves über den Bus neu
Programmieren will. Dafür suche ich ein simples Protokoll.

Ich selbst habe zwei Ideen:

1. Der Master pollt alle am Bus befindelichen Slaves. D.h der Master
bleibt immer auch I2C Busmaster und die Slaves antworten mit I2C
Slave-Transmit. Das hat den Nachteil, dass der Slave , wenn er
Datensenden möchte, immer auf den Master warten muss, bis dieser den
Slave pollt. Es scheint mir aber die einfachere Lösung zu sein.

Als Beispiel, der Master sendet ein Datenpaket mit Checksum, der Slave
erechnet die Checksum des empfangenem Datenpaktes und sendet ein Ack
oder Nack mit SlaveTransmit zurück, je nach dem ob die Chksum gültig
ist oder nicht. Der Master kann dann entscheiden ob er das Paket noch
mal sendet oder ob er einen Fehler meldet


2.Der Slave kann selbst I2C Busmaster sein. Jegliche kommunikation wird
als Busmaster getätigt, in der anderen Zeit sind alle Geräte im I2C
Slavemodus. Mit Timeouts und anderen Massnahmen werden Pakete verworfen
oder neu gesendet. Da das Daten aufkommen in dem Netzwerk gering ist,
sollte es äußerst selten zu abitrierungs Problemen kommen.

Als Beispiel.
Der Slave will Daten zum Master senden.  Der Slave wird I2c Busmaster.
Er sendet Daten an den Master (der im I2c Slavemodus ist)gibt den Bus
wieder frei und schaltet selbst in I2C Slavemodus zurück. Der Master
wechselt bei Empfang der Daten in den I2C BUSMastermodus und legt sein
ACK oder NACK auf den Bus. Das beinhaltet , das der Slave seine Adresse
mit senden muß, damit der Master weiß, an wen er die Daten zu senden
hat.

Diese Methoden sind nur ein grobes gedanken Spiel, aber mich würde eure
Meinung interessieren.

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.