Come si ripetono le funzioni dei pin dell’RP2040
A differenza dell’ESP32, l’RP2040 non ha una GPIO matrix: ogni segnale di una periferica può stare solo su certi pin. La buona notizia è che la tabella segue uno schema regolare, che si ricostruisce anche senza datasheet.
L’I²C si alterna ogni due pin: GP0 e GP1 sono SDA e SCL di I²C0, GP2 e GP3 di I²C1, GP4 e GP5 di nuovo I²C0, e così via. SDA è sempre su un pin pari e SCL su uno dispari, e i due devono appartenere allo stesso controller: GP4 con GP5 funziona, e anche GP4 con GP9.
L’SPI va a gruppi di quattro pin, nell’ordine RX (MISO), CSn, SCK e TX (MOSI). Da GP0 a GP7 appartengono a SPI0, da GP8 a GP15 a SPI1, da GP16 a GP23 di nuovo a SPI0. La UART segue uno schema simile, con TX sul primo pin di ogni gruppo di quattro e RX sul secondo.
Il PWM ha 8 slice con due uscite ciascuna, A sui pin pari e B sui dispari. GP0 e GP16 sono collegati entrambi all’uscita A della slice 0: se li usi tutti e due portano lo stesso segnale. Due pin della stessa slice, come GP2 e GP3, condividono la frequenza ma possono avere duty cycle diversi.
I pin che la scheda tiene per sé
Quattro GPIO dell’RP2040 non sono sul connettore. GP23 comanda il risparmio energetico del convertitore switching, GP24 rileva l’alimentazione USB, GP25 accende il LED della scheda e GP29 misura VSYS tramite un partitore sull’ADC3. Sul Pico W i pin da GP23 a GP25 sono usati dal chip wireless, GP29 è condiviso tra il suo clock e la misura di VSYS, e il LED si comanda attraverso il chip wireless.
Tabella completa dei GPIO del Raspberry Pi Pico
| GPIO | Pin | I²C | SPI | UART | PWM | ADC |
|---|---|---|---|---|---|---|
| GP0 | 1 | I2C0 SDA | SPI0 RX | UART0 TX | PWM0 A | — |
| GP1 | 2 | I2C0 SCL | SPI0 CSn | UART0 RX | PWM0 B | — |
| GP2 | 4 | I2C1 SDA | SPI0 SCK | UART0 CTS | PWM1 A | — |
| GP3 | 5 | I2C1 SCL | SPI0 TX | UART0 RTS | PWM1 B | — |
| GP4 | 6 | I2C0 SDA | SPI0 RX | UART1 TX | PWM2 A | — |
| GP5 | 7 | I2C0 SCL | SPI0 CSn | UART1 RX | PWM2 B | — |
| GP6 | 9 | I2C1 SDA | SPI0 SCK | UART1 CTS | PWM3 A | — |
| GP7 | 10 | I2C1 SCL | SPI0 TX | UART1 RTS | PWM3 B | — |
| GP8 | 11 | I2C0 SDA | SPI1 RX | UART1 TX | PWM4 A | — |
| GP9 | 12 | I2C0 SCL | SPI1 CSn | UART1 RX | PWM4 B | — |
| GP10 | 14 | I2C1 SDA | SPI1 SCK | UART1 CTS | PWM5 A | — |
| GP11 | 15 | I2C1 SCL | SPI1 TX | UART1 RTS | PWM5 B | — |
| GP12 | 16 | I2C0 SDA | SPI1 RX | UART0 TX | PWM6 A | — |
| GP13 | 17 | I2C0 SCL | SPI1 CSn | UART0 RX | PWM6 B | — |
| GP14 | 19 | I2C1 SDA | SPI1 SCK | UART0 CTS | PWM7 A | — |
| GP15 | 20 | I2C1 SCL | SPI1 TX | UART0 RTS | PWM7 B | — |
| GP16 | 21 | I2C0 SDA | SPI0 RX | UART0 TX | PWM0 A | — |
| GP17 | 22 | I2C0 SCL | SPI0 CSn | UART0 RX | PWM0 B | — |
| GP18 | 24 | I2C1 SDA | SPI0 SCK | UART0 CTS | PWM1 A | — |
| GP19 | 25 | I2C1 SCL | SPI0 TX | UART0 RTS | PWM1 B | — |
| GP20 | 26 | I2C0 SDA | SPI0 RX | UART1 TX | PWM2 A | — |
| GP21 | 27 | I2C0 SCL | SPI0 CSn | UART1 RX | PWM2 B | — |
| GP22 | 29 | I2C1 SDA | SPI0 SCK | UART1 CTS | PWM3 A | — |
| GP26 | 31 | I2C1 SDA | SPI1 SCK | UART1 CTS | PWM5 A | ADC0 |
| GP27 | 32 | I2C1 SCL | SPI1 TX | UART1 RTS | PWM5 B | ADC1 |
| GP28 | 34 | I2C0 SDA | SPI1 RX | UART0 TX | PWM6 A | ADC2 |
Pin predefiniti del Pico SDK: I²C0 su GP4/GP5, SPI0 da GP16 a GP19, UART0 su GP0/GP1. MicroPython e i core Arduino possono usare altri valori predefiniti, quindi controlla la documentazione di quello che usi.
Domande frequenti
Il Raspberry Pi Pico tollera i 5 V?
No. I GPIO dell’RP2040 lavorano a 3,3 V e non tollerano i 5 V. Per i segnali a 5 V usa un traslatore di livello o un partitore resistivo. VSYS accetta fino a 5,5 V, ma è un ingresso di alimentazione, non un pin di segnale.
Quali pin del Pico sono analogici?
GP26, GP27 e GP28, sui pin fisici 31, 32 e 34, sono i tre ingressi ADC del connettore. Un quarto canale, GP29, misura VSYS sulla scheda, e un quinto legge il sensore di temperatura interno.
Posso usare qualsiasi pin per l’I2C sul Pico?
Non qualsiasi, ma molti: le funzioni I²C si alternano ogni due pin tra I²C0 e I²C1. Scegli SDA su un pin pari e SCL su un pin dispari dello stesso controller, per esempio GP4 e GP5 per I²C0, GP6 e GP7 per I²C1, oppure GP4 e GP9, entrambi su I²C0.
Perché due pin PWM cambiano insieme?
I pin il cui numero differisce di 16, come GP0 e GP16, sono collegati alla stessa slice e alla stessa uscita PWM. Impostarne uno cambia anche l’altro. Scegli pin di slice diverse, oppure le uscite A e B della stessa slice se la stessa frequenza va bene.
Questo pinout vale anche per Pico W e Pico 2?
Il Pico W ha lo stesso connettore; cambiano ruolo solo i pin interni da GP23 a GP25 e GP29, collegati al chip wireless. Anche il Pico 2 mantiene lo stesso connettore, ma il suo chip RP2350 aggiunge funzioni, quindi per i dettagli controlla il suo datasheet.