Activarea port-urilor seriale suplimentare

De la YO3ITI
Salt la: navigare, căutare

Discuția care urmează privește aproape în exclusivitate Raspberry Pi 4 deoarece astea sunt plăcile pe care le posed. Pentru modelele anterioare, activarea port-urilor seriale suplimentare este un pic mai complicată și o voi descrie cu altă ocazie.

Activarea

Se face adăugând următoarele secvențe în /boot/config.txt:

enable_uart=1
dtoverlay=uart5
dtoverlay=uart4
dtoverlay=uart3
dtoverlay=uart2

Ordinea nu are nici o importanță:

  • enable_uart=1 activează interfața serială; se poate configura prin intermediul raspi-config;
  • Se adaugă linia dtoverlay=uart# pentru fiecare port serial care trebuie activat, unde # este numărul UART.
  • După orice modificare în /boot/config.txt trebuie dat reboot

Comenzi utile

Afișarea funcțiilor pinilor:

$ raspi-gpio funcs

Va afișa:

GPIO, DEFAULT PULL, ALT0, ALT1, ALT2, ALT3, ALT4, ALT5
0, UP, SDA0, SA5, PCLK, SPI3_CE0_N, TXD2, SDA6
1, UP, SCL0, SA4, DE, SPI3_MISO, RXD2, SCL6
2, UP, SDA1, SA3, LCD_VSYNC, SPI3_MOSI, CTS2, SDA3
3, UP, SCL1, SA2, LCD_HSYNC, SPI3_SCLK, RTS2, SCL3
4, UP, GPCLK0, SA1, DPI_D0, SPI4_CE0_N, TXD3, SDA3
5, UP, GPCLK1, SA0, DPI_D1, SPI4_MISO, RXD3, SCL3
6, UP, GPCLK2, SOE_N_SE, DPI_D2, SPI4_MOSI, CTS3, SDA4
7, UP, SPI0_CE1_N, SWE_N_SRW_N, DPI_D3, SPI4_SCLK, RTS3, SCL4
8, UP, SPI0_CE0_N, SD0, DPI_D4, I2CSL_CE_N, TXD4, SDA4
9, DOWN, SPI0_MISO, SD1, DPI_D5, I2CSL_SDI_MISO, RXD4, SCL4
10, DOWN, SPI0_MOSI, SD2, DPI_D6, I2CSL_SDA_MOSI, CTS4, SDA5
11, DOWN, SPI0_SCLK, SD3, DPI_D7, I2CSL_SCL_SCLK, RTS4, SCL5
12, DOWN, PWM0_0, SD4, DPI_D8, SPI5_CE0_N, TXD5, SDA5
13, DOWN, PWM0_1, SD5, DPI_D9, SPI5_MISO, RXD5, SCL5
14, DOWN, TXD0, SD6, DPI_D10, SPI5_MOSI, CTS5, TXD1
15, DOWN, RXD0, SD7, DPI_D11, SPI5_SCLK, RTS5, RXD1
16, DOWN, -, SD8, DPI_D12, CTS0, SPI1_CE2_N, CTS1
17, DOWN, -, SD9, DPI_D13, RTS0, SPI1_CE1_N, RTS1
18, DOWN, PCM_CLK, SD10, DPI_D14, SPI6_CE0_N, SPI1_CE0_N, PWM0_0
19, DOWN, PCM_FS, SD11, DPI_D15, SPI6_MISO, SPI1_MISO, PWM0_1
20, DOWN, PCM_DIN, SD12, DPI_D16, SPI6_MOSI, SPI1_MOSI, GPCLK0
21, DOWN, PCM_DOUT, SD13, DPI_D17, SPI6_SCLK, SPI1_SCLK, GPCLK1
22, DOWN, SD0_CLK, SD14, DPI_D18, SD1_CLK, ARM_TRST, SDA6
23, DOWN, SD0_CMD, SD15, DPI_D19, SD1_CMD, ARM_RTCK, SCL6
24, DOWN, SD0_DAT0, SD16, DPI_D20, SD1_DAT0, ARM_TDO, SPI3_CE1_N
25, DOWN, SD0_DAT1, SD17, DPI_D21, SD1_DAT1, ARM_TCK, SPI4_CE1_N
26, DOWN, SD0_DAT2, -, DPI_D22, SD1_DAT2, ARM_TDI, SPI5_CE1_N
27, DOWN, SD0_DAT3, -, DPI_D23, SD1_DAT3, ARM_TMS, SPI6_CE1_N
28, NONE, SDA0, SA5, PCM_CLK, -, MII_A_RX_ERR, RGMII_MDIO
29, NONE, SCL0, SA4, PCM_FS, -, MII_A_TX_ERR, RGMII_MDC
30, DOWN, -, SA3, PCM_DIN, CTS0, MII_A_CRS, CTS1
31, DOWN, -, SA2, PCM_DOUT, RTS0, MII_A_COL, RTS1
32, DOWN, GPCLK0, SA1, -, TXD0, SD_CARD_PRES, TXD1
33, DOWN, -, SA0, -, RXD0, SD_CARD_WRPROT, RXD1
34, UP, GPCLK0, SOE_N_SE, -, SD1_CLK, SD_CARD_LED, RGMII_IRQ
35, UP, SPI0_CE1_N, SWE_N_SRW_N, -, SD1_CMD, RGMII_START_STOP, -
36, UP, SPI0_CE0_N, SD0, TXD0, SD1_DAT0, RGMII_RX_OK, MII_A_RX_ERR
37, DOWN, SPI0_MISO, SD1, RXD0, SD1_DAT1, RGMII_MDIO, MII_A_TX_ERR
38, DOWN, SPI0_MOSI, SD2, RTS0, SD1_DAT2, RGMII_MDC, MII_A_CRS
39, DOWN, SPI0_SCLK, SD3, CTS0, SD1_DAT3, RGMII_IRQ, MII_A_COL
40, DOWN, PWM1_0, SD4, -, SD1_DAT4, SPI0_MISO, TXD1
41, DOWN, PWM1_1, SD5, -, SD1_DAT5, SPI0_MOSI, RXD1
42, DOWN, GPCLK1, SD6, -, SD1_DAT6, SPI0_SCLK, RTS1
43, DOWN, GPCLK2, SD7, -, SD1_DAT7, SPI0_CE0_N, CTS1
44, NONE, GPCLK1, SDA0, SDA1, -, SPI0_CE1_N, SD_CARD_VOLT
45, NONE, PWM0_1, SCL0, SCL1, -, SPI0_CE2_N, SD_CARD_PWR0
46, UP, SDA0, SDA1, SPI0_CE0_N, -, -, SPI2_CE1_N
47, UP, SCL0, SCL1, SPI0_MISO, -, -, SPI2_CE0_N
48, UP, SD0_CLK, -, SPI0_MOSI, SD1_CLK, ARM_TRST, SPI2_SCLK
49, UP, SD0_CMD, GPCLK0, SPI0_SCLK, SD1_CMD, ARM_RTCK, SPI2_MOSI
50, UP, SD0_DAT0, GPCLK1, PCM_CLK, SD1_DAT0, ARM_TDO, SPI2_MISO
51, UP, SD0_DAT1, GPCLK2, PCM_FS, SD1_DAT1, ARM_TCK, SD_CARD_LED
52, UP, SD0_DAT2, PWM0_0, PCM_DIN, SD1_DAT2, ARM_TDI, -
53, UP, SD0_DAT3, PWM0_1, PCM_DOUT, SD1_DAT3, ARM_TMS, -

Afișarea selectivă a funcțiilor pinilor

Dacă vreau să văd care este alocarea funcțiilor pentru primele 15 GPIO-uri:

$ sudo raspi-gpio get 0-15

Care va afișa:

GPIO 0: level=1 fsel=0 func=INPUT pull=UP
GPIO 1: level=1 fsel=0 func=INPUT pull=UP
GPIO 2: level=1 fsel=4 alt=0 func=SDA1 pull=UP
GPIO 3: level=1 fsel=4 alt=0 func=SCL1 pull=UP
GPIO 4: level=1 fsel=0 func=INPUT pull=UP
GPIO 5: level=1 fsel=0 func=INPUT pull=UP
GPIO 6: level=1 fsel=0 func=INPUT pull=UP
GPIO 7: level=1 fsel=1 func=OUTPUT pull=UP
GPIO 8: level=1 fsel=1 func=OUTPUT pull=UP
GPIO 9: level=0 fsel=4 alt=0 func=SPI0_MISO pull=DOWN
GPIO 10: level=0 fsel=4 alt=0 func=SPI0_MOSI pull=DOWN
GPIO 11: level=0 fsel=4 alt=0 func=SPI0_SCLK pull=DOWN
GPIO 12: level=1 fsel=3 alt=4 func=TXD5 pull=NONE
GPIO 13: level=1 fsel=3 alt=4 func=RXD5 pull=UP
GPIO 14: level=1 fsel=2 alt=5 func=TXD1 pull=NONE
GPIO 15: level=1 fsel=2 alt=5 func=RXD1 pull=UP

Atenție ! Numărul GPIO-ului nu are nici o legătură cu poziția fizică a pin-ului pe header !

  • Pentru UART0 GPIO14->pin8 (TXD1) iar GPIO15->pin10 (RXD1);
  • Pentru UART5 GPIO12->pin32 (TXD5) iar GPIO13->pin33 (RXD5); vezi imaginea de mai jos:

RPi4 pinout

Link-uri externe