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.