www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik µC Netzwerk mit I2C


Autor: Raio (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus_8051 (Gast)
Datum:

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

Gruß,
Markus_8051

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Da der I2C-bus ein single-Master Bus ist..."

Eher nicht.


Peter

Autor: Markus_8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Radio (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.