Ich entwerfe einen Alarm, um mich am Morgen aufzuwecken. Das System besteht aus 3 Subsystemen:
- (S1) RGB-Sieben-Segment-Management. Bestehend aus 5µCs, einer für jede Ziffer und einer für ":". Die hohe Anzahl von µC ist darauf zurückzuführen, dass ich keinen IC für RGB-LEDs verwende, sondern nur Transistoren.
- (S2) Sensor- und Eingangsmanagement. Ein µC, der den Abstandssensor für den eingestellten Alarm und die aktuelle Zeit verwaltet; und Schalter für die Konfiguration.
- (S3) Kommunikations- und Audiodatei. Ein µC, der für ein weiteres Projekt mit einem Bluetooth-Modul in UART kommuniziert, erhielt einen RTC-Kristall, um eine genaue Uhr zu haben und die Audiowiedergabe zu verwalten. (Ich habe noch nicht am Audio gearbeitet)
Während der normalen Ausführung liest S2 die Eingabe und sendet sie zur Verarbeitung an S3. dann sendet S3 an S1, was angezeigt werden muss.
Ich möchte all diese Subsysteme miteinander kommunizieren lassen und dann den I2C-Bus verwenden. Aber hier kommt meine Frage:
- Welcher µC muss der Master sein?
In der ersten Hand ist S3 das Zentrum des Systems, andererseits kann S2 mehr Nachrichten als S3 senden. Deshalb bin ich mir nicht sicher, wer Meister / Sklave sein wird.
- Gibt es eine Regel, um zu bestimmen, wer Slave / Master sein wird? Welche Frage sollte ich mir stellen, um die gute Wahl zu treffen? (im Allgemeinen nicht für dieses spezielle System)
Antworten:
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.
Überlegen Sie, welche MCU in Ihrem System weiß:
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:
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.
quelle
S1 sollte ein I 2 C-Slave sein. Für einen Master wäre entweder S2 oder S3 eine sinnvolle Wahl. Aber das ist nur eine Wiederholung dessen, was in der ursprünglichen Frage erwähnt wurde.
Oft ist die MCU, die sich mit der größten Vielfalt der Eingaben befasst, ein guter Kandidat für einen Master. In Ihrem Fall ist es entweder der S2 (eine Vielzahl von Benutzertasten, RTC) oder der S3 (eine Vielzahl von Befehlen über Bluetooth). Wenn Sie sich nicht entscheiden können, können Sie einen größeren Controller erwerben und beide Funktionen S2 und S3 in eine MCU integrieren. Dieser Ansatz bietet Ihnen mehr Flexibilität.
quelle
Jeder Mikrocontroller in Ihrem System kann der Master sein. Einige von ihnen eignen sich jedoch besser für diese Funktion. Wie von anderen Leuten gesagt, sollte der Mikrocontroller mit den mehr Informationen der Meister sein.
quelle