µC Netzwerk mit I2C

Gast #357886
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.
Gast #357889
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
Gast #357890
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren