Gibt es eine Regel, um zu bestimmen, wer [I 2 C] Slave / Master sein wird?
Ja. Nur ein I 2 C- Master kann eine Übertragung starten. Ein I 2 C-Slave kann Ihnen nichts erzählen, bis es das nächste Mal vom Master abgefragt wird (es sei denn, Sie fügen zusätzliche Interrupt-Signale hinzu, was die Gesamtsystemkomplexität erhöht).
Wenn Sie die (selten verwendete) Funktion eines Geräts ignorieren, um zwischen Master und Slave zu wechseln, muss der I 2 C-Master über ausreichende Kenntnisse des Gesamtsystems verfügen , um mit allen I 2 C kommunizieren zu können Sklaven in diesem Bus.
Welche Frage sollte ich mir stellen, um die gute Wahl zu treffen? (im Allgemeinen nicht für dieses spezielle System)
Überlegen Sie, welche MCU in Ihrem System weiß:
- am meisten über den Gesamtsystemstatus und kann daher entscheiden, wann I 2 C-Befehle an die Slaves gesendet werden sollen;
- Welche I 2 C-Befehle müssen an jeden Slave gesendet werden?
- Welche Daten müssen von jedem I 2 C-Slave gesammelt werden ?
- welche I 2 C-Geräte nur auf eingehende Befehle reagieren (dies gilt für Ihre "S1" -MCUs - es scheint klar zu sein, dass sie am besten als Slaves geeignet sind);
Unabhängig davon, welche MCU der I 2 C-Master sein wird, müssen Sie die gesamte Systemarchitektur entwerfen und überlegen, welche Befehle an jedes Gerät gesendet werden müssen und wie schnell Antworten empfangen werden müssen. Versuchen Sie, ein System zu entwerfen, das einen offensichtlichen "Master" hat und den gesamten Systemstatus kennt. Dann kann es wahrscheinlich auch das I 2 C-Master-Gerät sein.
Du sagtest:
S3 ist das Zentrum des Systems, aber andererseits kann S2 mehr Nachrichten als S3 senden.
Es ist nicht klar , wer „S2“ Nachrichten sendet an . Muss es aktiv Nachrichten an jemanden senden ? Oder kann "S2" von "S3" als I 2 C-Master abgefragt werden , um die Sensor- und Schaltinformationen zu empfangen, die "S2" sammelt? Wenn "S2" von "S3" abgefragt werden kann, scheint es auf der Grundlage der Beschreibung klar zu sein, dass die MCU "S3" der I 2 C-Master sein könnte.
Ich bin vorsichtig , wenn ich noch eine weitere MCU (nennen wir sie "S10") als I 2 C-Master hinzufüge . Das liegt daran, dass eine "S10" -MCU anscheinend viele Abfragen durchführen muss, um das gesamte Systemstatuswissen zu sammeln, das "S3" bereits bekannt ist. Das scheint eine unnötige Vervielfältigung zu sein.
Daher kann es weniger kompliziert sein, wenn "S3" das System steuert, indem es zum I 2 C-Master gemacht wird, anstatt es hinzuzufügen , es sei denn, "S3" kann die Aufgabe nicht ausführen, da die Grenzen des RAM-Speicherplatzes, des Flash-Speicherplatzes oder der CPU-Zyklen usw. erreicht sind ein zusätzlicher "S10" Controller.
Wenn Ihnen die zusätzliche Komplexität nichts ausmacht, erhöht das Hinzufügen eines allgemeinen "S10" -Controllers die Modularität (Segmentierung) des Systems, da "S3" dann nur Bluetooth und Audio ausführt - sonst nichts. Dies könnte zusätzliche Flexibilität für das Hinzufügen neuer (unvorhergesehener) Funktionen / zusätzlicher MCUs in der Zukunft ermöglichen, ohne dass der Code in "S3" geändert werden muss.