Jaka jest moc w stanie GPIO?

35

Jaki jest stan GPIO po podłączeniu zasilania? np. High, Low, Hi-Z?

Czy jakikolwiek system operacyjny zmienia stan dowolnych GPIO podczas ładowania? Mam nadzieję, że nie.

John La Rooy
źródło
O ile nie ma go w arkuszu danych, prawdopodobnie będziesz musiał go zmierzyć, aby się upewnić. Linux nie „wie” o GPIO, więc nie zmieniłby ich podczas rozruchu (chyba że zrobiłeś skrypt startowy, który to zrobił), ale zawsze istnieje szansa, że ​​ROM może.
Malvineous
@Malvineous, jesteś w błędzie. Linux wie o GPIO, a obsługa jest wbudowana w jądro. Oto dokumentacja: kernel.org/doc/Documentation/gpio.txt
Emmaly Wilson
2
@DustyWilson: Przepraszam, jeśli nie byłem pewien, miałem na myśli, że jądro Linuksa nie korzysta z GPIO podczas uruchamiania. Udostępnia je tylko dla przestrzeni użytkownika i określonych sterowników. Jądro podstawowe nie powinno zmieniać stanu pinów GPIO podczas uruchamiania.
Malvineous
@Malvineous: Ach, gotcha.
Emmaly Wilson

Odpowiedzi:

11

Tutaj znalazłem odpowiedź dzięki Russellstrongowi . Cytuję odpowiednią część poniżej

Doszedłem do wniosków na temat moich rezystorów podciągających / wrażliwości mojego obwodu na rezystory podciągające. RPi nie ustawia wyjścia GPIO przy pierwszym uruchomieniu. Włącza rezystor obniżający na 740 milisekund.

Użyłem dwóch rezystorów 18K (3v3 -> GPIO -> GND), aby przyjrzeć się dokładnie, co się dzieje z pinami. Oto ślad. Niebieska linia to moc 3 na 3, żółta linia to linia GPIO.

wprowadź opis zdjęcia tutaj

John La Rooy
źródło
Czy możesz to lekko wyjaśnić? Kiedy Raspberry Pi uruchamia się, GPIO jest ustawione na stan impedancji wejściowej?
Alex Chamberlain,
1
@AlexChamberlain, wygląda na chipie Broadcom uruchamia się z pulldowns, ale ładowarka czyści pulldowns więc będą wysokiej impedancji (wejścia)
John La Rooy
9

Gdy zaczniesz używać zalecanej dystrybucji Debiana dla RPi, GPIO jest wyłączone. Musisz włączyć każdy pin osobno.

Jeśli robisz to przez / sys, interesujące Cię będą „Ścieżki w Sysfs” (szukaj w http://www.kernel.org/doc/Documentation/gpio.txt ). W szczególności można włączyć pin, „eksportując” go. Wszelkie poniższe polecenia zakładają, że korzystasz z uprawnień roota (sudo lub w inny sposób) lub zmieniłeś uprawnienia / własność modyfikowanych plików wirtualnych.

echo 4 > /sys/class/gpio/export

Umożliwia to GPIO pin nr 4, który następnie powoduje istnienie / sys / class / gpio / gpio4, który zawiera kilka plików wirtualnych. Pliki te obejmują „kierunek”, który określa, czy jest to pin wejściowy, czy wyjściowy, „wartość”, która jest albo tylko do odczytu dla danych wejściowych, albo do zapisu dla danych wyjściowych i zawiera bieżącą wartość, i inne.

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

Oczywiście prawdopodobnie wolisz użyć istniejącej biblioteki, aby wykonać GPIO dostarczone lub zgodne z wybranym językiem. Ale jeśli chcesz czegoś prostego, możesz po prostu połączyć się bezpośrednio z sysfs, aby zrobić bardzo proste GPIO.

Emmaly Wilson
źródło
To jest pomocne. Spojrzałem na arkusz danych, ale nie mogłem znaleźć domyślnego stanu pinów. Jest to istotne, jeśli kontrolujesz rzeczy za pomocą pinów i nie chcesz, aby urządzenia peryferyjne włączały się podczas ładowania systemu operacyjnego.
John La Rooy,
3
To świetna odpowiedź, ale nie jestem pewien, czy naprawdę odpowiada na pytanie. Jaki jest stan GPIO zaraz po jego włączeniu? i ustawiony kierunek?
Alex Chamberlain,
@gnibbler: Wierzę, że będziesz musiał to przetestować. Spróbowałem trochę wcześniej i nie widziałem nic nieoczekiwanego w odniesieniu do włączania i wyłączania. Nie wiem ani nie obiecuję, że moje doświadczenie jest oczekiwane. Powiedziałbym, że powinieneś po prostu rzucić multimetr lub styki na szpilki, które chcesz przetestować, a następnie ponownie uruchomić lub zrestartować Pi wiele razy, aby przetestować. Widziałem, że wszystkie piny były wyłączone, jakby Pi nie miał żadnej mocy, dopóki sam nie włączyłem każdego pinu.
Emmaly Wilson,
@DustyWilson, być może są one ustawione jako wejścia bez podciągania lub opuszczania. Oznacza to, że są one skutecznie unoszone, jeśli są podłączone do FET, i powodują losowe zachowanie, jeśli do bramki nie zostanie dodany rezystor podnoszący / opuszczający
John La Rooy,
rzeczywiście… cat /sys/class/gpio/gpio4/directionmówi „w”. Przeczytałem w arkuszu danych, że nie można odczytać stanu pullups / pulldowns. Spróbuję je zmierzyć
John La Rooy,