Dlaczego niektóre piny GPIO są WYSOKIE po uruchomieniu Raspberry Pi?

18

Mam okablowany łatwy obwód, z diodą LED podłączoną do pinu 18 na tablicy BOARD. Uruchamiam prosty program, aby ustawić pin 18 na WYSOKI, co włącza diodę LED, a następnie kilka sekund później ustawiam pin 18 na NISKI, a na koniec kończę program za pomocą GPIO.cleanup ().

W tym momencie dioda LED jest wyłączona, co oznacza, że ​​pin 18 jest wyłączony (LOW). Teraz ponownie uruchamiam lub ponownie uruchamiam Raspberry Pi, a kiedy uruchamia się ponownie, dioda LED na pinie 18 włącza się ponownie, nawet jeśli pin był wyłączony przed ponownym uruchomieniem Raspberry Pi.

Dlaczego tak się dzieje? Jak skonfigurować konkretny pin, np. Pin 18, aby był wyłączony po uruchomieniu Raspberry Pi? I nie chcę, aby żadne piny GPIO były WYSOKIE, gdy Raspberry Pi się uruchomi.

Martwię się tym problemem, ponieważ powiedzmy, że pin 18 jest podłączony do silnika prądu stałego w robocie, a gdy Raspberry Pi uruchomi się, silnik włączy się, a to nie jest coś, czego chcę, ponieważ to zakłóca cała konstrukcja robota, a niektóre silniki mogą się uruchomić, a inne nie, w zależności od pinów, do których są podłączone. Chcę ręcznie włączyć wszystkie silniki w sposób zsynchronizowany.

Inną rzeczą jest to, że nie wszystkie piny mają ten problem. Niektóre pozostają wyłączone, gdy Raspberry Pi uruchamia się, ale inne nie.

Viktor Raspberry
źródło
Czy ta dioda LED świeci tak jasno, jak wtedy, gdy zostanie ustawiona wysoko, czy może świeci słabo?
złotowłosy
Zastosowano w nim 3,3 wolta.
Viktor Raspberry
Więc jeśli wejdziesz /sys/class/gpioi wyeksportujesz pin 18, w jakim stanie system powie, że jest, jeśli nic nie zmienisz?
złotowłosy
Kiedy piszę „/ sys / class / gpio”, mówi „-bash: / sys / class / gpio: Is a directory”. Nie jestem pewien, jak wyeksportować konkretny kod PIN.
Viktor Raspberry,
Istnieje mnóstwo wyjaśnień na ten temat , więc nie zawracam sobie głowy regurgitacją. Ten przykład jest ciężki dla echo, który pisze, czyli ustawia coś. Po jego wyeksportowaniu chcesz się od tego powstrzymać i po prostu użyj cat, który czyta, aby sprawdzić kierunek i wartość.
złotowłosa

Odpowiedzi:

25

Po włączeniu GPIO są przeciągane albo wysoko, albo nisko przez rezystory wewnętrzne. To, czy przyciąganie jest wysokie czy niskie dla danego GPIO, opisano szczegółowo na stronie 102 BCM2835 ARM Peripherals .

Gdy jądro Linux jest uruchamiane i jeśli drzewo urządzeń jest włączone (prawdopodobnie), wówczas ponownie skonfiguruje GPIO zgodnie z ustawieniami drzewa urządzeń. Załadowane moduły /etc/modulesmogą również aktualizować stan GPIO.

Każde inne oprogramowanie uruchomione podczas uruchamiania może potencjalnie zmienić konfigurację GPIO po ustawieniach drzewa urządzeń i ładowaniu modułów.

Najbezpieczniej jest znaleźć rozwiązanie sprzętowe, jeśli masz sprzęt, który może zostać nieprawidłowo uruchomiony podczas uruchamiania systemu.

joan
źródło
10

Kiedy Raspberry Pi uruchamia się, linie GPIO są resetowane do domyślnego układu, następnie system operacyjny jest ładowany i resetuje je do domyślnego systemu operacyjnego. Nie ma możliwości „zapamiętania” ustawień podczas ponownego uruchamiania. Zobacz także Jaka jest moc w stanie GPIO? i stan GPIO po uruchomieniu .

Hildred
źródło
2

Wiem, że jest dość późno. Odpowiedzieć. Możesz napisać skrypt python lub skrypt bash, który ręcznie ustawia pin na niski i planuje uruchamianie zadania cron przy każdym uruchomieniu. Nie będziesz musiał modyfikować żadnych plików systemowych / krytycznych. Oprócz crona

Sathaye.h
źródło