Zusätzliche GPIOs als digitale E / A verwenden?

11

hoffentlich ist diese Frage ziemlich einfach, aber mein schnelles googeln hat die Antwort nicht gefunden.

Ich weiß, dass das RPi mehrere GPIOs hat, die ich verwenden kann, sowie spezielle GPIOs (SPI, I2C, UART usw.). In meinem Projekt gehen mir tatsächlich die regulären GPIOs aus und ich möchte SPI, I2C und andere GPIOs auch als "reguläre" GPIOs verwenden. Ich weiß, dass dies möglich ist, aber ich bin mir nicht sicher, wie ich sie so einrichten kann, dass sie nicht im SPI / I2C / etc-Modus ausgeführt werden und nur als reguläre GPIOs ausgeführt werden.

Muss ich etwas tun, um sie dafür richtig einzurichten?

Andrew Corsini
quelle

Antworten:

10

Die kurze Antwort

Nein, das tust du (fast) nicht. Es ist eigentlich umgekehrt - Sie müssen sie so einrichten, dass sie nicht GPIO sind, sondern ihren speziellen Zweck erfüllen. Die einzige Ausnahme sind UART-Pins. Auch und I²C-Pins irgendwie besonders.

UART-Stifte

UART-Pins werden vom Kernel für die Konsole verwendet. Sie müssen das System so konfigurieren, dass sie nicht verwendet werden, wenn sie für Ihre Verwendung verfügbar sein sollen:

  • bearbeiten /boot/cmdline.txtund entfernen console=ttyAMA0,115200und kgdboc=ttyAMA0,115200Parameter
  • Bearbeiten /etc/inittabund kommentieren #Sie die Zeile aus (setzen Sie das Zeichen davor):

    T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    
  • Starten Sie Ihr RaspberryPi neu

Jetzt sollten die Pins nicht mehr vom System verwendet werden und Sie können sie verwenden

I²C-Stifte

Bei I²C-Pins sind integrierte 1,8k-Pull-up-Widerstände installiert. Sie können nicht deaktiviert werden. Dies schränkt die Verwendung dieser Pins in einigen Situationen ein (kann aber in anderen nützlich sein).

Zusätzliche Lösungen

Wenn die GPIO-Pins zur Neige gehen, können Sie die Anzahl manchmal leicht erweitern, indem Sie zusätzliche (aber einfache) Hardware verwenden. Für die Ausgabe können Sie beispielsweise shift registersoder I²C I/O expanders(auch als I²C-Bus-Expander bezeichnet) verwenden, die sowohl einfach zu kaufen als auch zu verwenden sind. Ein Beispiel für die Verwendung finden Sie hier .

PFC8574(oder ähnliches aus dieser Familie) sind so beliebt, dass es ein gebrauchsfertiges Kernelmodul gibt, das die gesamte Kommunikation für Sie übernimmt ( es ist im offiziellen RaspberryPi-Kernel nicht aktiviert, Sie müssen Ihren eigenen Kernel kompilieren, um es zu verwenden ). Das Modul wird aufgerufen gpio_pcf857x, vorausgesetzt, Sie haben es mit modprobe(zusammen mit I²C-Treibern) geladen und den Chip an den I²CBus angeschlossen. Sie können es folgendermaßen aktivieren:

echo pcf8574 0x27 > /sys/class/i2c-adapter/i2c-0/new_device

Wo pcf8574ist Ihr tatsächlicher Chipname (dieses Modul kann nur wenige verschiedene Chips wie pca967xund verarbeiten max732x) und 0x27seine Adresse ist eingeschaltet I²C(Sie können die Adresse des Chips bei der Verkabelung konfigurieren).

Dadurch werden Einträge im /sys/class/gpio/Verzeichnis erstellt, mit denen Sie sie wie andere GPIO-Ports in RaspberryPi verwenden können, sofern Sie die sysSchnittstelle verwenden (z. B. wiringPiSetupSys()in wiringPi). Leider unterstützt das Python- RPi.GPIOModul diesen Modus nicht, sodass es diese Pins mit dieser Bibliothek nicht verwenden kann. Die Stifte haben einige hohe Zahlen wie 248-255 oder ähnliches.

Hinweis: PCF8574 ist sinking current- es kann Laufwerkssenke (im niedrigen Zustand akzeptieren) bis zu 20 mA geben, aber es kann nur 0,1 mA im hohen Zustand liefern. Dies bedeutet, dass Sie es normalerweise in umgekehrter Logik verwenden, d +3.3V -> LED -> RESISTOR -> PCF8574_PIN. H.

Krzysztof Adamski
quelle