Como as funções dos pinos do RP2040 se repetem
Ao contrário do ESP32, o RP2040 não tem matriz GPIO: cada sinal de um periférico só pode aparecer em certos pinos. A boa notícia é que a tabela segue um padrão regular, então dá para deduzi-la sem datasheet.
O I²C se alterna a cada dois pinos: GP0 e GP1 são SDA e SCL do I²C0, GP2 e GP3 do I²C1, GP4 e GP5 de novo do I²C0, e assim por diante. O SDA fica sempre em um pino par e o SCL em um ímpar, e os dois precisam pertencer ao mesmo controlador: GP4 com GP5 funciona, e GP4 com GP9 também.
O SPI vem em grupos de quatro pinos, na ordem RX (MISO), CSn, SCK e TX (MOSI). GP0 a GP7 pertencem ao SPI0, GP8 a GP15 ao SPI1 e GP16 a GP23 de novo ao SPI0. A UART segue um padrão parecido, com TX no primeiro pino de cada grupo de quatro e RX no segundo.
O PWM tem 8 slices com duas saídas cada, A nos pinos pares e B nos ímpares. GP0 e GP16 estão ligados à saída A do slice 0: se você usar os dois, eles levam o mesmo sinal. Dois pinos do mesmo slice, como GP2 e GP3, compartilham a frequência, mas podem ter duty cycles diferentes.
Os pinos que a placa reserva para si
Quatro GPIOs do RP2040 não estão no conector. O GP23 controla o modo de economia de energia do conversor chaveado, o GP24 detecta a alimentação USB, o GP25 aciona o LED da placa e o GP29 mede o VSYS por meio de um divisor no ADC3. No Pico W, os pinos GP23 a GP25 são usados pelo chip sem fio, o GP29 é compartilhado entre o clock desse chip e a medição do VSYS, e o LED é controlado pelo chip sem fio.
Tabela completa de GPIOs do Raspberry Pi Pico
| GPIO | Pino | 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 |
Pinos padrão do Pico SDK: I²C0 em GP4/GP5, SPI0 de GP16 a GP19 e UART0 em GP0/GP1. O MicroPython e os cores Arduino podem usar outros padrões, então confira a documentação do que você usa.
Perguntas frequentes
O Raspberry Pi Pico tolera 5 V?
Não. Os GPIOs do RP2040 trabalham com 3,3 V e não toleram 5 V. Para sinais de 5 V, use um conversor de nível lógico ou um divisor resistivo. O VSYS aceita até 5,5 V, mas é uma entrada de alimentação, não um pino de sinal.
Quais pinos do Pico são analógicos?
GP26, GP27 e GP28, nos pinos físicos 31, 32 e 34, são as três entradas ADC do conector. Um quarto canal, GP29, mede o VSYS na placa, e um quinto lê o sensor de temperatura interno.
Posso usar qualquer pino para I2C no Pico?
Qualquer um não, mas muitos: as funções I²C se alternam a cada dois pinos entre I²C0 e I²C1. Escolha o SDA em um pino par e o SCL em um pino ímpar do mesmo controlador, por exemplo GP4 e GP5 para I²C0, GP6 e GP7 para I²C1, ou GP4 e GP9, ambos no I²C0.
Por que dois pinos PWM mudam juntos?
Pinos cujos números diferem em 16, como GP0 e GP16, estão ligados ao mesmo slice e à mesma saída PWM. Ajustar um muda o outro. Escolha pinos em slices diferentes, ou as saídas A e B do mesmo slice se a mesma frequência servir.
Esta pinagem vale para o Pico W e o Pico 2?
O Pico W tem o mesmo layout de conector; só os pinos internos GP23 a GP25 e GP29 mudam de função, porque estão ligados ao chip sem fio. O Pico 2 também mantém o mesmo layout de conector, mas o chip RP2350 adiciona funções, então confira o datasheet dele para os detalhes.