Wie unterscheidet der Raspberry Pi zwischen mehreren Erweiterungskarten?

8

Ich fange gerade erst an, das GPIO auf dem Raspberry Pi für verschiedene Projekte zu verwenden. Es gibt viele Breakout-Boards für das RPi und viele davon haben Stifte, um Boards übereinander zu stapeln. Es scheint, als ob die GPIO-Pins gerade durchgehen und alle Boards die gleichen Pins gemeinsam haben. Für mich bedeutet dies, dass alle Karten in einem Stapel genau die gleichen Signale vom RPi empfangen und sich entsprechend verhalten sollten. Dies scheint eine Menge Fehler bei Befehlen zu verursachen, die für eine Karte bestimmt sind und die Funktionsweise einer anderen Karte beeinflussen, aber anscheinend passiert dies nicht.

Woher weiß der Raspberry Pi, welches Board welche bestimmten Befehle erhält? Gibt es eine Art Initialisierungsbefehl, den nur eine bestimmte Karte erkennt und dann den Rest der Befehle akzeptiert?

cspirou
quelle
Dies sehe ich auch bei stapelbaren Arduino-Shields und anderen verschiedenen Computerplattformen.
Cspirou
Ich fürchte, die Antwort ist, dass es für eine Karte keine Standardmethode gibt, eine andere zu erkennen und sich selbst neu zu konfigurieren. Sie müssen vor dem Kauf die Details der einzelnen Boards überprüfen und selbst bestimmen, ob Sie in der Lage sind, miteinander zu arbeiten.
Joan

Antworten:

5

Computer verwenden ein System namens Busing , um mehrere Peripheriegeräte über denselben Kabelsatz mit der CPU zu verbinden. I2C und SPI sind Beispiele für Bussysteme, die mit den pi-GPIO-Pins verwendet werden und die mehrere Geräte auf denselben physischen Pins (vom internen Bus verwaltet) ermöglichen, jedoch unterschiedliche Adressen verwenden . Die Adressierung ist eine Abstraktion, die vom Bussystemprotokoll erstellt wird. Es ist ein bisschen so, wie Sie mehrere Netzwerkanwendungen mit derselben physischen Verbindung zum Internet haben können, die alle gleichzeitig ausgeführt werden.

Schauen Sie sich zum Beispiel die RTC Pi Plus an , eine der stapelbaren Karten aus Ihrem Beispiellink:

Geben Sie hier die Bildbeschreibung ein

Beachten Sie auf der nahen Seite die fünf Verbindungen in einer Box. Diese entsprechen Stiften auf der anderen Seite. Sie sind beschriftet:

  • 5V = Strom, gemeinsam mit anderen Geräten gemeinsam nutzbar.
  • GND = Ground, auch häufig.
  • SDA und SCL = I2C-Buspins; Auf dem Pi befinden sich die Pins 3 und 5. Sie können eine ganze Reihe von Geräten auf dem I2C-Bus haben, die alle dieselben zwei Pins für die Kommunikation verwenden.
  • SQW = Ich glaube, dies steht für "Rechteckwelle" und vielleicht wird eines unserer elektronisch sachkundigeren Mitglieder einen netten Kommentar hinterlassen, der seinen Zweck erklärt.

Mit anderen Worten, die meisten Pins werden von dieser Platine überhaupt nicht verwendet. Sie sind nur da, um das Stapeln zu ermöglichen. Diejenigen, die es verwendet, können alle (oder meistens wissen sie immer noch nichts über SQW) gleichzeitig mit anderen Geräten geteilt werden.

Die wirkliche Grenze für das Stapeln auf diese Weise wird die Menge an Energie sein, die geliefert werden kann, im Vergleich zu dem, was verbraucht wird, nicht die Anzahl der beteiligten Pins. Vielleicht würde es zu einer Einschränkung werden, wenn Sie zusätzliche Netzteile einbauen würden, aber ich denke, vorher müssten Sie den Stapel nach draußen bewegen und eine Leiter verwenden, um daran zu arbeiten. ;)

Goldlöckchen
quelle
3

Sie können nur eine HAT-Karte haben, daher gibt es kein solches Problem. Es gibt einige Karten, auf denen Sie mehrere verbinden können, aber dies sind keine HAT-Karten.

Lachs
quelle
1
HATs sind möglicherweise nicht das Richtige, aber ich spreche von Boards, die mit den GPIO-Pins verbunden sind. Die folgende Seite zeigt hohe Stapel solcher Bretter. abelectronics.co.uk Ich kann die Frage ändern, um 'HATs' zu entfernen
cspirou
1

Woher weiß der Raspberry Pi, welches Board welche bestimmten Befehle erhält?

Der Pi kann es nicht wissen. Sie müssen sicherstellen.

Wenn Sie mehrere Erweiterungskarten anschließen, müssen Sie darauf achten, dass Signalleitungen entweder nicht mehr als einmal verwendet werden oder ein Busschema implementieren, das mit mehreren Geräten funktioniert, die einige Leitungen gemeinsam nutzen (wie bereits von @goldilocks vorgeschlagen). Um ein Gefühl dafür zu bekommen, wie dies gemacht werden könnte, würde ich empfehlen, sich im alten ISA-Bus zu informieren . Etwas, das mit GPIO als Daten- und Adressleitungen implementiert werden könnte (und wenn man bereit ist, Schmerzen zu haben).

Gibt es eine Art Initialisierungsbefehl, den nur eine bestimmte Karte erkennt und dann den Rest der Befehle akzeptiert?

Während HATs nicht in Frage kommen, ist das von ihnen verwendete Identifikationsschema einen Blick wert. Beachten Sie, dass es keine gestapelten HATs * gibt (laut Raspberry Pi Blog : Stapelbare HATs, die in der Spezifikationsdiskussion vorgestellt wurden - sie wurden jedoch aufgrund der stark gestiegenen Komplexität der Autokonfiguration und der Möglichkeit von Benutzerfehlern verworfen. ) Es wird also zu jedem Zeitpunkt nur ein HAT verbunden, sein EEPROM wird ausgelesen und seine Informationen werden im Gerätebaum verfügbar gemacht.


* Es ist möglich, stapelbare Hüte herzustellen, wenn sie vom gleichen Typ sind und daher keine mehrfache und unterschiedliche Identifizierung erfordern, z. B. der Adafruit 16-Kanal-PWM / Servo-HAT für Raspberry Pi .

Ghanima
quelle