Cómo se repiten las funciones de los pines del RP2040
A diferencia del ESP32, el RP2040 no tiene GPIO matrix: cada señal de un periférico solo puede aparecer en ciertos pines. La buena noticia es que la tabla sigue un patrón regular, así que se puede deducir sin hoja de datos.
El I²C se alterna cada dos pines: GP0 y GP1 son SDA y SCL de I²C0, GP2 y GP3 de I²C1, GP4 y GP5 otra vez de I²C0, y así sucesivamente. SDA siempre está en un pin par y SCL en uno impar, y los dos deben pertenecer al mismo controlador: GP4 con GP5 funciona, y también GP4 con GP9.
El SPI va en grupos de cuatro pines, en el orden RX (MISO), CSn, SCK y TX (MOSI). De GP0 a GP7 pertenecen a SPI0, de GP8 a GP15 a SPI1 y de GP16 a GP23 otra vez a SPI0. La UART sigue un patrón parecido, con TX en el primer pin de cada grupo de cuatro y RX en el segundo.
El PWM tiene 8 slices con dos salidas cada uno, A en los pines pares y B en los impares. GP0 y GP16 se conectan los dos a la salida A del slice 0: si usas ambos, llevan la misma señal. Dos pines del mismo slice, como GP2 y GP3, comparten la frecuencia pero pueden tener ciclos de trabajo distintos.
Los pines que la placa se reserva
Cuatro GPIO del RP2040 no están en el conector. GP23 controla el modo de ahorro del convertidor conmutado, GP24 detecta la alimentación USB, GP25 enciende el LED de la placa y GP29 mide VSYS a través de un divisor en el ADC3. En la Pico W, los pines GP23 a GP25 los usa el chip inalámbrico, GP29 se comparte entre su reloj y la medida de VSYS, y el LED se controla a través del chip inalámbrico.
Tabla completa de GPIO de la 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 |
Pines por defecto del Pico SDK: I²C0 en GP4/GP5, SPI0 de GP16 a GP19 y UART0 en GP0/GP1. MicroPython y los cores de Arduino pueden usar otros valores por defecto, así que consulta la documentación del que uses.
Preguntas frecuentes
¿La Raspberry Pi Pico tolera 5 V?
No. Los GPIO del RP2040 trabajan a 3,3 V y no toleran 5 V. Para señales de 5 V usa un conversor de niveles lógicos o un divisor resistivo. VSYS acepta hasta 5,5 V, pero es una entrada de alimentación, no un pin de señal.
¿Qué pines de la Pico son analógicos?
GP26, GP27 y GP28, en los pines físicos 31, 32 y 34, son las tres entradas ADC del conector. Un cuarto canal, GP29, mide VSYS en la placa, y un quinto lee el sensor de temperatura interno.
¿Puedo usar cualquier pin para I2C en la Pico?
No cualquiera, pero sí muchos: las funciones I²C se alternan cada dos pines entre I²C0 e I²C1. Elige SDA en un pin par y SCL en un pin impar del mismo controlador, por ejemplo GP4 y GP5 para I²C0, GP6 y GP7 para I²C1, o GP4 y GP9, ambos en I²C0.
¿Por qué dos pines PWM cambian a la vez?
Los pines cuyo número se diferencia en 16, como GP0 y GP16, se conectan al mismo slice y a la misma salida PWM. Cambiar uno cambia también el otro. Elige pines de slices distintos, o las salidas A y B del mismo slice si te vale la misma frecuencia.
¿Este pinout sirve para la Pico W y la Pico 2?
La Pico W tiene el mismo conector; solo cambian de función los pines internos GP23 a GP25 y GP29, porque se conectan al chip inalámbrico. La Pico 2 también mantiene el mismo conector, pero su chip RP2350 añade funciones, así que consulta su hoja de datos para los detalles.