Nastavení výchozího stavu pinů po restartu Raspbianu 12

Nastavení default stavu pinů po restartu Raspbianu 12

Vycházím z komentáře tady.  Je to z roku 2020 tak snad je tato metoda aktuální a doporučená. Je to v dokumentaci tak snad ano.

Výpis stavu

Pro výpis stavu pinů se v dřívějších verzích používali commandy „gpio readall“ (ten už nefunguje) a „raspi-gpio get“ (ten funguje ale je asi deprecated?). Nový command je „pinctrl get“. u mne na nové instalaci Raspbianu 12 vypadal výpis následovně.

pinctrl get
0: ip -- | hi // ID_SDA/GPIO0 = input
1: ip -- | hi // ID_SCL/GPIO1 = input
2: a0 -- | hi // SDA1/GPIO2 = SDA1
3: a0 -- | hi // SCL1/GPIO3 = SCL1
4: ip -- | hi // GPIO_GCLK/GPIO4 = input
5: ip -- | hi // GPIO5 = input
6: ip -- | hi // GPIO6 = input
7: op -- -- | hi // SPI_CE1_N/GPIO7 = output
8: op -- -- | hi // SPI_CE0_N/GPIO8 = output
9: a0 -- | lo // SPI_MISO/GPIO9 = SPI0_MISO
10: a0 -- | lo // SPI_MOSI/GPIO10 = SPI0_MOSI
11: a0 -- | lo // SPI_SCLK/GPIO11 = SPI0_SCLK
12: ip -- | lo // GPIO12 = input
13: ip -- | lo // GPIO13 = input
14: a0 -- | hi // TXD0/GPIO14 = TXD0
15: a0 -- | hi // RXD0/GPIO15 = RXD0
16: ip -- | lo // GPIO16 = input
17: ip -- | hi // GPIO17 = input
18: ip -- | lo // GPIO18 = input
19: ip -- | lo // GPIO19 = input
20: ip -- | lo // GPIO20 = input
21: ip -- | lo // GPIO21 = input
22: ip -- | lo // GPIO22 = input
23: ip -- | lo // GPIO23 = input
24: ip -- | lo // GPIO24 = input
25: ip -- | lo // GPIO25 = input
26: ip -- | lo // GPIO26 = input
27: ip -- | lo // GPIO27 = input
28: ip -- | hi // SDA0/GPIO28 = input
29: ip -- | hi // SCL0/GPIO29 = input
30: ip -- | lo // NC/GPIO30 = input
31: op -- -- | hi // LAN_RUN/GPIO31 = output
32: op -- -- | lo // CAM_GPIO1/GPIO32 = output
33: ip -- | lo // NC/GPIO33 = input
34: ip -- | hi // NC/GPIO34 = input
35: ip -- | hi // PWR_LOW_N/GPIO35 = input
36: ip -- | hi // NC/GPIO36 = input
37: ip -- | lo // NC/GPIO37 = input
38: op -- -- | hi // USB_LIMIT/GPIO38 = output
39: ip -- | lo // NC/GPIO39 = input
40: a0 -- | lo // PWM0_OUT/GPIO40 = PWM0
41: op -- -- | lo // CAM_GPIO0/GPIO41 = output
42: op -- -- | hi // SMPS_SCL/GPIO42 = output
43: ip -- | hi // SMPS_SDA/GPIO43 = input
44: a0 -- | hi // ETH_CLK/GPIO44 = GPCLK1
45: a0 -- | lo // PWM1_OUT/GPIO45 = PWM1
46: ip -- | hi // HDMI_HPD_N/GPIO46 = input
47: op -- -- | lo // STATUS_LED/GPIO47 = output
48: a0 -- | lo // SD_CLK_R/GPIO48 = SD0_CLK
49: a0 -- | hi // SD_CMD_R/GPIO49 = SD0_CMD
50: a0 -- | hi // SD_DATA0_R/GPIO50 = SD0_DAT0
51: a0 -- | hi // SD_DATA1_R/GPIO51 = SD0_DAT1
52: a0 -- | hi // SD_DATA2_R/GPIO52 = SD0_DAT2
53: a0 -- | hi // SD_DATA3_R/GPIO53 = SD0_DAT3

Nastavení default stavů po restartu

Je třeba upravit soubor /boot/firmware/config.txt (v dřívějších verzích /boot/config.txt) a přidat nastavení pro PINy, které chcenme mít po rebootu v definovaném stavu.

sudo mcedit /boot/firmware/config.txt

a přidal jsem nakonec následující

# Set 8module Relay PINS to output
gpio=22,23,24,25,26,5,6,13=op,dh

# TODO - druhy one wire bus?
#dtoverlay=w1-gpio,gpiopin=17

# TODO - Set One Wire bus ports as input?
# most likely not necessary, if so how to set pullup/pulldown

reboot a po restartu vidíme že jsou piny 5,6,13,22-26 v požadovaném stavu

pinctrl get
0: ip -- | hi // ID_SDA/GPIO0 = input
1: ip -- | hi // ID_SCL/GPIO1 = input
2: a0 -- | hi // SDA1/GPIO2 = SDA1
3: a0 -- | hi // SCL1/GPIO3 = SCL1
4: ip -- | hi // GPIO_GCLK/GPIO4 = input
5: op -- -- | hi // GPIO5 = output
6: op -- -- | hi // GPIO6 = output
7: op -- -- | hi // SPI_CE1_N/GPIO7 = output
8: op -- -- | hi // SPI_CE0_N/GPIO8 = output
9: a0 -- | lo // SPI_MISO/GPIO9 = SPI0_MISO
10: a0 -- | lo // SPI_MOSI/GPIO10 = SPI0_MOSI
11: a0 -- | lo // SPI_SCLK/GPIO11 = SPI0_SCLK
12: ip -- | lo // GPIO12 = input
13: op -- -- | hi // GPIO13 = output
14: a0 -- | hi // TXD0/GPIO14 = TXD0
15: a0 -- | hi // RXD0/GPIO15 = RXD0
16: ip -- | lo // GPIO16 = input
17: ip -- | hi // GPIO17 = input
18: ip -- | lo // GPIO18 = input
19: ip -- | lo // GPIO19 = input
20: ip -- | lo // GPIO20 = input
21: ip -- | lo // GPIO21 = input
22: op -- -- | hi // GPIO22 = output
23: op -- -- | hi // GPIO23 = output
24: op -- -- | hi // GPIO24 = output
25: op -- -- | hi // GPIO25 = output
26: op -- -- | hi // GPIO26 = output
27: ip -- | lo // GPIO27 = input
28: ip -- | hi // SDA0/GPIO28 = input
29: ip -- | hi // SCL0/GPIO29 = input
30: ip -- | lo // NC/GPIO30 = input
31: op -- -- | hi // LAN_RUN/GPIO31 = output
32: op -- -- | lo // CAM_GPIO1/GPIO32 = output
33: ip -- | lo // NC/GPIO33 = input
34: ip -- | hi // NC/GPIO34 = input
35: ip -- | hi // PWR_LOW_N/GPIO35 = input
36: ip -- | hi // NC/GPIO36 = input
37: ip -- | lo // NC/GPIO37 = input
38: op -- -- | hi // USB_LIMIT/GPIO38 = output
39: ip -- | lo // NC/GPIO39 = input
40: a0 -- | lo // PWM0_OUT/GPIO40 = PWM0
41: op -- -- | lo // CAM_GPIO0/GPIO41 = output
42: op -- -- | hi // SMPS_SCL/GPIO42 = output
43: ip -- | hi // SMPS_SDA/GPIO43 = input
44: a0 -- | lo // ETH_CLK/GPIO44 = GPCLK1
45: a0 -- | lo // PWM1_OUT/GPIO45 = PWM1
46: ip -- | hi // HDMI_HPD_N/GPIO46 = input
47: op -- -- | lo // STATUS_LED/GPIO47 = output
48: a0 -- | lo // SD_CLK_R/GPIO48 = SD0_CLK
49: a0 -- | hi // SD_CMD_R/GPIO49 = SD0_CMD
50: a0 -- | hi // SD_DATA0_R/GPIO50 = SD0_DAT0
51: a0 -- | hi // SD_DATA1_R/GPIO51 = SD0_DAT1
52: a0 -- | hi // SD_DATA2_R/GPIO52 = SD0_DAT2
53: a0 -- | hi // SD_DATA3_R/GPIO53 = SD0_DAT3

Pullup / pulldown

Tady je pěkný článek ohledně pullup / pulldown obecně.

Ve zkratce:

Lepší je většinou používat externí pullup / pulldown ~ 10kOHM.

Při rozhodování zda používat pullup nebo pulldown preferovat pullup – viz článek, konkrétní sekce zde.

Interní pullup / pulldown rezistory jsou 50-65 kOHM. Nějaké obrázky k zapojení zde.

Načtení stavu pullup / pulldown není možné – viz zde. Pokud si chceme být jisti stavem pull-x, je třeba nastavit a někam si uložit stav sami.

Pokud je pin nastaven jako output nemá nastavení pullup / pulldown smysl – viz zde. Nicméně vnitřní nastavení zůstává aktivní i po přepnutí pinu do output módu. Vliv na obvod je nicméně zanedbatelný – viz zde.

TODO

Onewire bus

Je vhodné mít nějaké default nastavení pro PIN přiřazený onewire bus? Nebo se vše nastaví díky následujícímu řádku v config.txt „dtoverlay=w1-gpio,gpiopin=4“ (normálně tam to gpiopin=4 není, protože PIN4 je default hodnota, ale je to volitelný parametr a já si ho tam pro přehlednost přidávám).

Zveřejnit odpověď

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

*