Definition: Master und Slave in der Kommunikation mit Mikrocontrollern und peripheren Komponenten

Wenn Mikrocontroller mit anderen Mikrocontrollern oder sonstigen ICs (z.B. Speicherbausteinen, Temperaturfühlern, Treiber-Bausteinen etc.) kommunizieren so erfolgt dies entweder über serielle oder parallele Protokolle. Es gibt eine Vielzahl an Protokollen mit diversen Vor- und Nachteilen, die sich je nach Anwendungsfall besser oder schlechter eignen für die Übertragung von Daten.

Sie unterscheiden sich unter anderem durch die Anzahl der benötigten Leitungen (und somit durch die benötigte Anzahl an IOs des Mikrocontrollers was gerade beim MCU mit wenigen Pins ein wichtiges Kriterium sein kann) , die maximal erreichbare Datenübertragungsrate, die Anzahl der Ansprechbaren peripheren Komponenten (Adressierung von mehreren Kompoenten), Fehleranfälligkeit gegen Störungen, maximale Leitungslänge und vielen anderen Parametern.

Die Unterschiede zwischen paralleler und serieller Kommunikation werden im Artikel „serielle vs. parallele Datenübertragung beschrieben“ und sollen nicht weiter behandelt werden in diesem Artikel. Vielmehr sollen hier die Begriffe „Master“ und „Slave“ genauer betrachtet werden.

Wenngleich die Begriffe „Master“ (auch als „aktiver Knoten“ bezeichnet) und „Slave“ (=Sklave auch als passiver Knoten bezeichnet) recht drastisch klingen so beschreiben Sie doch recht gut wer in der Kommunikation zwischen den Komponenten das sagen hat. Der „Master“ in der Datenkommunikation ist immer das Gerät welches die Kontrolle über das „Gespräch“ (die Unterhaltung in Fomr von Datenübertragung zwischen den Komponenten) hat.

Ein Master und ein Slave

Man stelle sich zum Vergleich ein Gespräch mit einer Autoritätsperson, einem Manager (in diesem Fall der Master) und einem oder mehreren Untergebenen (der Begriff „Sklave“ ist hier vielleicht etwas drastisch, wenngleich der ein odere andere Chef diesen Begriff vielleicht als treffend ansieht 😉 ) vor.

Der Manager delegiert die Aufgaben im Gespräch oder holt Statusinformationen ein. Er duldet es nicht das ein „Slave“ von sich aus die Kommunikation anstösst, sondern nur auf Anfragen reagiert.

Spricht nun ein Master mit nur einem „Slave“, da kein anderer in Reichweite ist, so ist es nicht zwingend notwendig das er diesen explizit Addressiert, er redet einfach los und der Slave weiss das er gmeint ist.

Diese konstrukt besteht also nur aus genau einem Master und genau einem Slave.

Ein Master, mehrere Slaves

Ein Beispiel wäre also ein Mikrocontroller der an der Datenleitung nur einen einzigen Slave angeschlossen hat. Alles was er an Daten über die Leitung sendet erreicht also nur genau einen Slave.

Manche Schnittstellen/Protokolle lassen solch eine einfache Verdrahtung zu (z.B. SPI mit nur einem Master und einem Slave oder kaskadierten Slaves, oder diverse parallele Schnittstellen), während andere unabhängig von der Anzahl der Slaves immer eine Form der Adressierung vorschreiben (z.B. I2C oder diverse komplexe Bus Systeme).

Wenn nun jedoch unser Manager in einem Raum (die Räumlichkeit dient nur dem Vergleich mit der menschlichen Kommunikation, im bereich der Datenkommunikation ist der Raum gleichzusetzen mit dem Interface welches genutzt wird, alle Komponenten die am selben Interface hängen, sind also im selben „Raum“ können aber natürlich über lange Leitungen durchaus verteilt posiioniert sein) mit mehreren Angestellten eine Order ausruft, so muss er diese addressieren, damit sich ein oder mehrere seiner Untergebenen angesprochen fühlt. Das Adressieren geschieht z.B durch einen Fingerzeig.

Übetragen auf die Kommunikation zwischen elekronischen Komponenten heisst das nun das es in diesem Besipiel einen Master und mehrere Slaves gibt. Der Master muss vor jedem Befehl mitteilen an welchen Slave er diese Nachricht senden möchte. In einfachen seriellen Schnittstellen wie z.B. SPI erfolgt dies durch eine separate Leitung vom Master zu jedem einzelnen Slave diese Leitungen werden meist als „CS“ (=Chip select) oder „SS“ (=Slave select) Leitungen bezeichnet, je nach Protokoll zieht der Master die Leitung des Slave für den die Nahricht bestimmt ist auf logisch 0 oder 1 (bei SPI meist auf logish 0 = Masse), alle Leitungen zu den Slaves die NICHT angesprochen werden sind dabei im komplementären Zustand (also bei SPI z.B. auf logisch 1, bzw VCC). Der Master zeigt also mittels der CS Leitung genau auf den Slave den er ansprechen möchte.

Der Slave erkennt nun dass „auf ihn gezeigt wird“, da seine Slave-Select Leitung in dem als aktiv definierten Zustand ist und die nun folgenden Daten für Ihn bestimmt sind. Alle anderen Slaves auf die nicht gezeigt wird ignorieren die Nachricht einfach. Es kann dabei durchaus sein das der Master auch mehrere Slaves gleichzeitig aktiviert wenn die Narchricht für alle aktivierten Teilnehmer relevant ist, der Erfolg einer solchen Aktion ist jedoch abhängig vom Protokoll und der Reaktion der Slaves.

Man stelle sich der Manager spricht eine Gruppe von angstellten mit einer Frage an und alle wollen gleichzeitig antworten, das füht natürlich zu Chaos und der Manager versteht garnichts. Verteilt er stattdessen eine eindeutig definierte Aufgabe an eine Gruppe die keine Rückantwort erfordert, so können alle gleichzeitig die Arbeit aufnehmen. Meist wird in solch einem Anwendungsfall jedoch eher auf ein Bus-System gesetzt in dem Narichten flexibler addresisert werden können.

Adressierung von Datenpaketen / Nachrichten bei mehreren Slaves

Da jedoch die Verdrahtung eines jeden Slaves an dem Master mit einer dedizierten Leitung recht Ressourcenintensiv (benötigte Anzahl an IO-Pins am Mikrocontroller bzw. Master) ist (unser Microcontroller hat ja nur eine begrenzte Zahl an PINs die in der Regel bei komplexeren Projekten immer zu gering ist 😉 ) wird diese Art der Adressierung bei einer steigenden Anzahl an Slaves zunehmend unhandlicher bis sie irgendwann schlicht unmöglich wird ohne weitere Bausteine (Port-Multiplier etc.). Übetragen auf die menschlische Kommunikation zeigt der Manager also mit dem Finger auf einen oder zwei seiner Angstellten und stellt dann die Aufgabe. Da er aber nur eine begrenzte Anzahl an Händen und Fingern (entspricht dem IO-PIN des Mikrocontroller) hat, kann gehen im irgendwann die Möglichkeiten aus auf mehrere Angestellte gleichzeitig zu zeigen, zum Glück sind Mikrocontroller da meist besser ausgestattet, aber auch Ihre Anzahl an PINs ist endlich.

Hier bieten sich dann BUS-Systeme an, in denen jeder Teilnehmer eine eindeutige Adresse hat mit der er angesprochen werden kann oder auch Nachrichten mit bestimmten Kategoriekennungen zu versehen auf die die angeschlossenen Slaves dann Filtern.

In einem Bus-System wird demnach die Addressierung nicht mehr über dedizierte CS-Leitungen vom Master zu jedem einzelnen Slave geregelt, sondern über eine Addresse die entweder in jeder Nachricht die über den Daten-Bus gesendet wird enthalten ist, oder über einen separaten Adress-Bus gesetzt wird. Wir sprechen hier nun von der Adressierung innerhalb der Nachricht auf dem Datenbus. Im Falle des I2C Interface besteht eine Nachricht immer aus mehreren Teilen: einem Startbit, den Adress bits (7-10 bit je nachdem was der Slave Baustein unterstützt), den eigentlichen Datenbytes und einem Stop Bit. Zusätzlich gibt es noch weitere Bestätigungsbits die aber im Moment nicht weiter relevant sind, da wir über die Adressierung sprechen.

Da nun also in jeder Nachricht ein bestimmte Empfänger enthalten ist, können alle Teilnehmer (aktuell sprechen wir von Slaves) die Nachricht untersuchen und prüfen ob die Empfängeradresse mit Ihrer eigenen Adresse übereinstimmt. Die Adresse der einzelnen ICs sind je nach Baustein bereits vom Hersteller fest im Chip hinterlegt oder können über PINs/Schnittstellen von extern gesetzt werden.

In manchen Bus-Systemen ist es auch möglich mit Sub-Adressen zu arbeiten (z.B. die ersten 3 bits einer Adresse) und somit eine Nachricht an eine Gruppe von Slaves zu addressieren.

Multi-Master Konstellation

Bisher sprachen wir immer davon das es nur einen Master gibt der die Kommunikation regelt, der also Arbeit verteilt und ggf. Informationen abruft. Ein Slave wird also von sich aus niemals etwas senden wenn er nicht explizit dazu aufgefordert wird. Dies dient dazu Kollisionen auf der Datenleitung zur vermeiden. Je nach Bus-System und dem eingesetzten Protokoll ist es jedoch Möglich das es nicht nur einen Master sondern mehrere Master gibt, das heisst es gibt mehrere Teilnehmer die von sich aus Nachrichten senden können ohne vorher dazu aufgefordert zu werden. Solche Konstrukte nennt man dann „Multi-Master“ Konstellationen.

Damit es hier jedoch nicht zu Kollisionen kommt wenn alle teilnehmer gleichzeitig versuchen eine Nachricht zu senden, muss eine Kollisionserkennung im Protokoll vorgesehen werden, die definiert wie Kollisionen von Nachrichten erkannt werden und wie darauf zu reagieren ist, das z.B. also sendende Teilnehmer im Falle einer Kollision die Nachricht erneut senden und auch Quittungs-Nachrichten von den Teilnehmern an die die Nachrichten gerichtet sind, abgefragt werden. Zudem kann auch mit Prüfbytes gearbeitet werden um zu prüfen ob die gesammte Nachricht erfolgreich übertragen wurde. Da dies jedoch nun den Umfang dieses Artikels sprengen würde sei hier nur beispielhaft auf den CAN-BUS (Controller Area Network) verwiesen, ein Feldbus der usprünglich für die Automobilindustrie zum Einsatz in Fahrzeugen entwickelt wurde, jedoch heute in unterschiedlichen Ausprägungen auch in vielen Anderen Bereichen zur Vernetzung von Komponenten im Einsatz ist. Weitere Information dazu z.B. hier: http://www.itwissen.info/definition/lexikon/controller-area-network-CAN-CAN-Bus.html

Weiterführende Informationen zu Master/Slave anhand des SPI Interface sind hier zu finden:

http://de.wikipedia.org/wiki/Serial_Peripheral_Interface

Weitere Informationen zu BUS-Systemen sind unter anderem hier zu finden:

http://de.wikipedia.org/wiki/Bus_%28Datenverarbeitung%29

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

This site uses Akismet to reduce spam. Learn how your comment data is processed.