Raspberry Pi ist wirklich ein interessantes Gerät, da es so viele Funktionen in einem so kleinen und einfachen Formfaktor unterstützt. Wenn auf den GPIO-Erweiterungsheader wie auf eine normale speicherabgebildete Schnittstelle zugegriffen werden kann, können mehr Projekte ihn als Entwicklungsplattform verwenden. Ein paar Fragen dazu:
Können die GPIO-Pins auf dem Header in seiner Hardware (Chip) zu einem einzigen Speicherzugriffsbefehl zusammengefasst werden? Wenn nicht (was ich annehme), kann eine Erweiterungskarte / Schaltung an den Anschluss angeschlossen werden, um das Verhalten so zu ändern, dass eine solche Zugriffsmethode unterstützt werden kann? Wie sehen Sie ein solches Design?
Wenn all dies unmöglich oder zu mühsam erscheint, sehe ich eine praktikable Lösung darin, den Zugriff in eine Bibliothek oder eine Abstraktionsschicht einzubinden. Gab es eine solche Arbeit? Gibt es ähnliche Arbeiten? Ich schaue nicht auf den Userland-Zugang, ich denke an eine Art Kernel-Bibliothek, die es einfach macht, Treiber auf Kernel-Ebene basierend auf R-Pi zu entwickeln.
Vielen Dank im Voraus für Ihre Kommentare.
Der Raspberry Pi stellt 17 GPIO-Pins auf P1 zur Verfügung, und das Rev. 2-Board stellt 4 weitere auf P5 zur Verfügung. Diese Pins können nicht direkt als speicherabgebildeter E/A-Bus verwendet werden, wie Sie ihn vielleicht bei einem alten mikroprozessorbasierten System gefunden haben.
Ich nehme an, Sie könnten einen solchen Bus bit-bangen, aber die begrenzte Anzahl von Pins wäre ein Problem. Sie könnten beispielsweise einen 8-Bit-Datenbus, einen Lese-Strobe, einen Schreib-Strobe definieren und die restlichen 7 (oder 11) Bits als Adressbus verwenden. Da die verfügbaren GPIO-Bits jedoch nicht sequentiell sind, wäre dies langsam zu betreiben; Der Treiber auf dem RPi müsste Bits einzeln setzen und löschen.
Ein besserer Ansatz wäre die Verwendung der I2C- und/oder SPI-Busse (seriell), die auf dem P1-Header verfügbar sind, um externen Speicher und/oder speicherabgebildete E/A zu implementieren.
Tatsächlich können Sie speicherbasierte E/A ausführen, werfen Sie einfach einen Blick auf das WiringPI-Beispiel unter http://elinux.org/RPi_Low-level_peripherals .
Es gibt jedoch einige Einschränkungen, Sie müssen das /dev/mem
Gerät öffnen, was bedeutet, dass Sie root sein müssen. Ich weiß, dass einige Leute planen, ein spezielles /dev/gpio-mem
Gerät zu erstellen, um nur diesen Teil des Adressraums zugänglich zu machen (für weniger privilegierte Benutzer/Gruppen).
Um sich tatsächlichen Code anzusehen, der dies bereits tut, werfen Sie einen Blick auf Wiring Pi ( https://projects.drogon.net/raspberry-pi/wiringpi/ ) oder LogAn ( https://github.com/r42/logan ).
LogAn liest alle GPIO-Pins in nur einem Speicherzugriff - Es wurde bereits zum Debuggen/Diagnostizieren des SPI-Protokolls auf dem RPI verwendet (siehe https://github.com/R42/pinokia ). Beachten Sie, dass Pinokia speicherbasierte E/A verwendet, um auf die Pins zu schreiben.
Beispiele für Boards, die den GPIO intensiv nutzen, finden Sie auf Gertboard ( http://www.element14.com/community/docs/DOC-51726?ICID=hp-gertboard-banner ) und PiFace ( http:// uk.farnell.com/jsp/search/productdetail.jsp?SKU=2218566&MER=baynote-2218566-pr ).
PeterJ
minghua
PeterJ
minghua