Warum sind einige GPIO-Pins HIGH, wenn der Raspberry Pi hochfährt?

18

Ich habe eine einfache Schaltung verkabelt, wobei eine LED an Pin 18 der BOARD-Referenz angeschlossen ist. Ich führe ein einfaches Programm aus, um Pin 18 auf HIGH zu setzen, wodurch die LED aufleuchtet. Einige Sekunden später setze ich Pin 18 auf LOW und beende mein Programm schließlich mit GPIO.cleanup ().

Zu diesem Zeitpunkt ist die LED aus, was bedeutet, dass Pin 18 aus ist (LOW). Jetzt starte ich meinen Raspberry Pi neu oder starte ihn neu, und wenn er wieder hochfährt, leuchtet die LED an Pin 18 wieder, obwohl der Pin vor dem Neustart des Raspberry Pi ausgeschaltet war.

Warum kann das passieren? Wie kann ich einen bestimmten Pin wie Pin 18 so konfigurieren, dass er ausgeschaltet ist, wenn der Raspberry Pi hochfährt? Und ich möchte nicht, dass GPIO-Pins auf HIGH stehen, wenn der Raspberry Pi hochfährt.

Ich mache mir Sorgen wegen dieses Problems, weil wir annehmen, dass Pin 18 mit einem Gleichstrommotor eines Roboters verbunden ist, und wenn der Raspberry Pi hochfährt, schaltet sich der Motor ein, und das ist nichts, was ich will, weil das stört Die gesamte Struktur des Roboters und einige Motoren werden möglicherweise gestartet, andere nicht. Dies hängt von den Stiften ab, mit denen sie verbunden sind. Ich möchte alle Motoren manuell synchronisiert einschalten.

Eine andere Sache ist, dass nicht alle Stifte dieses Problem haben. Einige bleiben aus, wenn der Raspberry Pi startet, andere nicht.

Viktor Himbeere
quelle
Leuchtet diese LED so hell wie bei einer hohen Einstellung oder leuchtet sie nur schwach?
Goldlöckchen
Es werden 3,3 Volt angelegt.
Viktor Himbeere
Wenn Sie /sys/class/gpioPin 18 aufrufen und exportieren, in welchem ​​Zustand befindet sich das System dann, wenn Sie nichts ändern?
Goldlöckchen
Wenn ich "/ sys / class / gpio" schreibe, heißt es "-bash: / sys / class / gpio: Ist ein Verzeichnis". Ich bin mir nicht sicher, wie ich einen bestimmten Pin exportieren soll.
Viktor Himbeere
Es gibt Unmengen von Erklärungen dafür , so dass ich nicht die Mühe habe, nachzuschlagen. Dieses Beispiel ist etwas schwerfällig für das echo, was etwas schreibt, dh setzt. Nachdem Sie es exportiert haben, möchten Sie davon Abstand nehmen und nur catdas Lesen verwenden, um die Richtung und den Wert zu überprüfen.
Goldlöckchen

Antworten:

25

Beim Einschalten werden die GPIOs durch die internen Widerstände entweder hoch oder niedrig gezogen. Ob der Pull für ein bestimmtes GPIO hoch oder niedrig ist, wird auf Seite 102 von BCM2835 ARM-Peripheriegeräte beschrieben .

Wenn der Linux-Kernel gestartet wird und der Gerätebaum aktiviert ist (wahrscheinlich), werden die GPIOs entsprechend den Gerätebaumeinstellungen neu konfiguriert. Von geladenen Modulen kann /etc/modulesauch der GPIO-Status aktualisiert werden.

Jede andere Software, die Sie beim Start ausführen, kann die GPIOs möglicherweise nach den Einstellungen in der Gerätestruktur und dem Laden des Moduls neu konfigurieren.

Es ist am sichersten, eine Hardwarelösung zu finden, wenn Sie über Hardware verfügen, die beim Systemstart falsch ausgelöst werden könnte.

joan
quelle
10

Wenn der Raspberry Pi bootet, werden die GPIO-Leitungen auf die Standardeinstellungen des Chips zurückgesetzt, und das Betriebssystem wird geladen und setzt sie auf die Standardeinstellungen des Betriebssystems zurück. Es gibt keine Möglichkeit, die Einstellungen während eines Neustarts zu "merken". Siehe auch Wie ist der Einschaltstatus der GPIOs? und GPIO-Status nach dem Start .

hildred
quelle
2

Ich weiß, dass es ziemlich spät ist. Antworten. Sie können ein Python- oder Bash-Skript schreiben, das den Pin manuell auf niedrig setzt, und einen Cron-Job planen, der bei jedem Start ausgeführt wird. Sie müssen keine systemkritischen Dateien ändern. Abgesehen von Cron

Sathaye.h
quelle