Wenn es nicht im Datenblatt enthalten ist, müssten Sie es wahrscheinlich messen, um sicherzugehen. Linux "kennt" sich mit GPIOs nicht aus, so dass es sie beim Booten nicht ändert (es sei denn, Sie haben ein Startskript erstellt, das dies tat), aber es besteht immer die Möglichkeit, dass das ROM dies tut.
Malvineous,
@Malvineous, du bist falsch. Linux kennt sich mit GPIOs aus und die Unterstützung ist direkt in den Kernel integriert. Hier ist eine Dokumentation: kernel.org/doc/Documentation/gpio.txt
Emmaly Wilson
2
@DustyWilson: Entschuldigung, wenn ich nicht sicher war, meinte ich, dass der Linux-Kernel beim Booten keine GPIOs verwendet. Es macht sie nur für Benutzer und bestimmte Treiber verfügbar. Daher sollte der Standardkernel den Status der GPIO-Pins während des Startvorgangs nicht ändern.
Ich bin zu Schlussfolgerungen über meine Pull-up-Widerstände / Empfindlichkeit meiner Schaltung gegenüber den Pull-down-Widerständen gesprungen. Das RPi stellt das GPIO beim ersten Start nicht auf Ausgabe ein. Es schaltet einen Pull-Down-Widerstand für 740 Millisekunden ein.
Ich habe zwei 18K-Widerstände (3v3 -> GPIO -> GND) verwendet, um genau zu sehen, was mit den Pins los ist. Hier ist die Spur. Blaue Linie ist 3v3-Leistung, gelbe Linie ist GPIO-Linie.
Können Sie etwas klarstellen? Wenn der Raspberry Pi bootet, ist der GPIO auf einen hochohmigen Eingangszustand eingestellt?
Alex Chamberlain
1
@ AlexChamberlain, sieht aus wie der Broadcom-Chip startet mit Pulldowns, aber der Lader löscht die Pulldowns, so dass sie hohe Impedanz (Eingänge) werden
John La Rooy
9
Wenn Sie die empfohlene Debian-Distribution für RPi verwenden, ist GPIO deaktiviert. Sie müssen jeden Pin einzeln aktivieren.
Wenn Sie es über / sys tun, werden Sie "Paths in Sysfs" interessant finden (suchen Sie in http://www.kernel.org/doc/Documentation/gpio.txt ). Insbesondere würden Sie einen Pin aktivieren, indem Sie ihn "exportieren". Alle folgenden Befehle setzen voraus, dass Sie mit Root-Rechten (sudo oder anderweitig) ausgeführt werden oder die Berechtigungen / den Besitz der zu ändernden virtuellen Dateien geändert haben.
echo 4 > /sys/class/gpio/export
Auf diese Weise wird der GPIO-Pin 4 aktiviert, der dann zur Existenz von / sys / class / gpio / gpio4 führt, der mehrere virtuelle Dateien enthält. Diese Dateien enthalten "Richtung", die definiert, ob es sich um einen Eingabe- oder einen Ausgabepin handelt, "Wert", der entweder für die Eingabe schreibgeschützt ist oder für die Ausgabe schreibbar ist und den aktuellen Wert enthält, und andere.
echo out > /sys/class/gpio/gpio4/direction # set it as an output pin
echo 1 > /sys/class/gpio/gpio4/value # set the value to ON
echo 0 > /sys/class/gpio/gpio4/value # set the value to OFF
echo in > /sys/class/gpio/gpio4/direction # set it as input
cat /sys/class/gpio/gpio4/value # get the value
echo 4 > /sys/class/gpio/unexport # disables pin 4 and removes the gpio4 directory
Natürlich werden Sie es wahrscheinlich vorziehen, eine bereits vorhandene Bibliothek zu verwenden, um GPIO zu erstellen, das mit der Sprache Ihrer Wahl geliefert wird oder mit dieser kompatibel ist. Wenn Sie jedoch etwas Einfaches wünschen, können Sie sich direkt mit sysfs verbinden, um ein sehr einfaches GPIO zu erstellen.
Das ist hilfreich. Ich habe mir das Datenblatt angesehen, aber den Standardstatus der Stifte nicht gefunden. Dies ist wichtig, wenn Sie Dinge mit den Pins steuern und keine Peripheriegeräte einschalten möchten, während das Betriebssystem geladen wird.
John La Rooy
3
Dies ist eine großartige Antwort, aber ich bin nicht sicher, ob sie die Frage wirklich beantwortet. Wie ist der Status des GPIO unmittelbar nach seiner Aktivierung? und richtung festgelegt?
Alex Chamberlain
@knibbler: Ich glaube, du musst es nur testen. Ich habe es selbst vor einiger Zeit versucht, und ich habe nichts Unerwartetes in Bezug auf das Ein- und Ausschalten von Objekten gesehen. Ich weiß oder verspreche nicht, dass meine Erfahrung die erwartete ist. Ich würde sagen, Sie sollten einfach ein Multimeter oder Ähnliches auf die Pins werfen, die Sie testen möchten, und dann den Pi mehrmals neu starten oder aus- und wieder einschalten, um ihn zu testen. Was ich sah, war, dass alle Pins ausgeschaltet waren, als ob der Pi überhaupt nicht mit Strom versorgt würde, bis ich jeden Pin selbst aktivierte.
Emmaly Wilson
@DustyWilson, vielleicht sind sie als Eingänge ohne Pull-Ups oder Pull-Downs eingerichtet. Dies bedeutet, dass sie effektiv schweben, wenn sie an einen FET angeschlossen sind, und ein zufälliges Verhalten verursachen würden, wenn dem Gate kein Pull-Up / Down-Widerstand hinzugefügt wird
John La Rooy,
in der Tat ... cat /sys/class/gpio/gpio4/directionsagt "in". Ich habe im Datenblatt gelesen, dass es nicht möglich ist, den Zustand der Pullups / Pulldowns zu lesen. Ich werde versuchen, sie zu messen
Antworten:
Ich habe die Antwort hier dank russellstrong gefunden . Ich zitiere den relevanten Teil unten
quelle
Wenn Sie die empfohlene Debian-Distribution für RPi verwenden, ist GPIO deaktiviert. Sie müssen jeden Pin einzeln aktivieren.
Wenn Sie es über / sys tun, werden Sie "Paths in Sysfs" interessant finden (suchen Sie in http://www.kernel.org/doc/Documentation/gpio.txt ). Insbesondere würden Sie einen Pin aktivieren, indem Sie ihn "exportieren". Alle folgenden Befehle setzen voraus, dass Sie mit Root-Rechten (sudo oder anderweitig) ausgeführt werden oder die Berechtigungen / den Besitz der zu ändernden virtuellen Dateien geändert haben.
Auf diese Weise wird der GPIO-Pin 4 aktiviert, der dann zur Existenz von / sys / class / gpio / gpio4 führt, der mehrere virtuelle Dateien enthält. Diese Dateien enthalten "Richtung", die definiert, ob es sich um einen Eingabe- oder einen Ausgabepin handelt, "Wert", der entweder für die Eingabe schreibgeschützt ist oder für die Ausgabe schreibbar ist und den aktuellen Wert enthält, und andere.
Natürlich werden Sie es wahrscheinlich vorziehen, eine bereits vorhandene Bibliothek zu verwenden, um GPIO zu erstellen, das mit der Sprache Ihrer Wahl geliefert wird oder mit dieser kompatibel ist. Wenn Sie jedoch etwas Einfaches wünschen, können Sie sich direkt mit sysfs verbinden, um ein sehr einfaches GPIO zu erstellen.
quelle
cat /sys/class/gpio/gpio4/direction
sagt "in". Ich habe im Datenblatt gelesen, dass es nicht möglich ist, den Zustand der Pullups / Pulldowns zu lesen. Ich werde versuchen, sie zu messen