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?
Antworten:
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:
Beachten Sie auf der nahen Seite die fünf Verbindungen in einer Box. Diese entsprechen Stiften auf der anderen Seite. Sie sind beschriftet:
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. ;)
quelle
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.
quelle
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).
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 .
quelle