Używasz dodatkowych GPIO jako cyfrowych I / O?

11

mam nadzieję, że to pytanie jest dość proste, ale moje szybkie wyszukiwanie w Google nie znalazło odpowiedzi.

Wiem, że RPi ma kilka GPIO, których mogę używać, a także wyspecjalizowane GPIO (SPI, I2C, UART itp.). W moim projekcie faktycznie brakuje mi zwykłych GPIO i chciałbym używać SPI, I2C i innych GPIO jako „zwykłych” GPIO. Wiem, że można to zrobić, ale nie jestem pewien, jak je skonfigurować, aby nie działały w trybach SPI / I2C / etc i działały jak zwykłe GPIO.

Czy muszę coś zrobić, aby odpowiednio je skonfigurować?

Andrew Corsini
źródło

Odpowiedzi:

10

Krótka odpowiedź

Nie, ty (prawie) nie. W rzeczywistości jest na odwrót - musisz skonfigurować je tak, aby nie były GPIO, ale aby spełniały swoje specjalne zadanie. Jedynym wyjątkiem są piny UART. Także i szpilki I²C są w jakiś sposób wyjątkowe.

Piny UART

Piny UART są używane przez jądro konsoli. Będziesz musiał skonfigurować system, aby ich nie używał, jeśli chcesz, aby były dostępne do użytku:

  • edytować /boot/cmdline.txti usuwać console=ttyAMA0,115200oraz kgdboc=ttyAMA0,115200parametry
  • edytuj /etc/inittabi komentuj (wstaw #znak przed nim) wiersz:

    T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    
  • zrestartuj RaspberryPi

Teraz szpilki nie powinny być używane przez system i możesz ich używać

Piny I²C

Piny I²C mają zainstalowane rezystory podciągające 1,8k. Nie można ich wyłączyć. Ogranicza to użycie pinów w niektórych sytuacjach (ale może być przydatne w innych).

Dodatkowe rozwiązania

Jeśli brakuje pinów GPIO, czasem możesz łatwo zwiększyć jego liczbę, używając dodatkowego (ale prostego) sprzętu. Na przykład, możesz użyć shift registerslub I²C I/O expanders(zwanego także ekspanderem magistrali I²C), które można łatwo kupić i użyć. Przykład jego użycia można znaleźć tutaj .

PFC8574(lub podobne z tej rodziny) są tak popularne, że istnieje gotowy do użycia moduł jądra, który obsługuje całą komunikację za Ciebie ( nie jest włączony w oficjalnym jądrze RaspberryPi, musisz skompilować własne jądro, aby z niego korzystać ). Moduł jest wywoływany gpio_pcf857x, pod warunkiem, że załadowałeś go modprobe(wraz ze sterownikami I²C) i że masz układ podłączony do I²Cmagistrali, możesz go aktywować w następujący sposób:

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

gdzie pcf8574jest twoja rzeczywista nazwa układu (ten moduł może obsłużyć kilka różnych układów takich jak pca967xi max732x) i 0x27jego adres jest włączony I²C(możesz skonfigurować adres układu podczas jego okablowania).

Spowoduje to utworzenie wpisów w /sys/class/gpio/katalogu, które umożliwią korzystanie z nich w taki sam sposób, jak innych portów GPIO w RaspberryPi, pod warunkiem, że korzystasz z sysinterfejsu (na przykład wiringPiSetupSys()w wiringPi). Niestety RPi.GPIOmoduł Pythona nie obsługuje tego trybu, więc nie będzie mógł używać tych pinów z tą biblioteką. Piny będą miały pewne wysokie liczby, takie jak 248-255 lub podobne.

Uwaga: PCF8574 jest sinking current- może dać odchylenie napędu (akceptacja w stanie niskim) aż do 20 mA, ale może uzyskać tylko 0,1 mA w stanie wysokim. Oznacza to, że zwykle będziesz używać go w odwrotnej logice, tj +3.3V -> LED -> RESISTOR -> PCF8574_PIN.

Krzysztof Adamski
źródło