Nbastavení 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
kvůli použití pinů 9,10,11 jako output je třeba zakomentovat použití SPI, které je na těchto pinech (samozřejmě pokud je zapnuto – odkomentováno).
#dtparam=spi=on
Dále doplním pro přehlednost pin 4 pro první OneWireBus ( je to default pin pro One Wire, takže to není nutné).
dtoverlay=w1-gpio,gpiopin=4
a přidal jsem nakonec následující
#### Bellow eoj # Set first 8module Relay Board (Relay 1-8) PINS to output gpio=22,23,24,25,26,5,6,13=op,dh # Set second 8module Relay Board (Relay 9-16) PINS to output gpio=9,10,11,19,20,21,8,7=op,dh # 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 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 // GPIO7 = output 8: op -- -- | hi // GPIO8 = output 9: op -- -- | hi // GPIO9 = output 10: op -- -- | hi // GPIO10 = output 11: op -- -- | hi // GPIO11 = output 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: op -- -- | hi // GPIO19 = output 20: op -- -- | hi // GPIO20 = output 21: op -- -- | hi // GPIO21 = output 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).