Adafruit QT Py RP2040
The Adafruit QT Py RP2040 is about the smallest RP2040 based microcontroller out there! This tiny board features the RP2040 32-bit Cortex M0+ dual core running at ~125 MHz @ 3.3V logic and power and 264KB RAM. Onboard is 8MB SPI FLASH – plenty of room for your CircuitPython/MicroPython code. For connecting to your peripherals there are 13 multi-function GPIO pins (11 breakout pads and two QT pads). 4 of these GPIO are 12-bit ADCs, there are two I2C interfaces (one on the QT connector, one on the breakout pads), SPI and UART peripherals in standard QT Py locations, and all 11 GPIO are PWM capable. On top of all of that, there is also a STEMMA QT / Qwiic connector for attaching compatible peripherals and a built in RGB NeoPixel LED. A ton of stuff in a tiny package!
Inside the RP2040 is a ‘permanent ROM’ USB UF2 bootloader. What that means is when you want to program new firmware, you can hold down the BOOTSEL button while plugging it into USB (or pulling down the RUN/Reset pin to ground) and it will appear as a USB disk drive you can drag the firmware onto. Folks who have been using Adafruit products will find this very familiar – we use the technique on all our native-USB boards. Just note you don’t double-click reset, instead hold down BOOTSEL during boot to enter the bootloader!
For peripherals, there are two I2C controllers, two SPI controllers, and two UARTs that are multiplexed across the GPIO – check the pinout for what pins can be set to which. There are 16 PWM channels, each pin has a channel it can be set to (ditto on the pinout).
You’ll note there’s no I2S peripheral, or SDIO, or camera, what’s up with that? Well instead of having specific hardware support for serial-data-like peripherals like these, the RP2040 comes with the PIO state machine system which is a unique and powerful way to create custom hardware logic and data processing blocks that run on their own without taking up a CPU. For example, NeoPixels – often we bitbang the timing-specific protocol for these LEDs. For the RP2040, we instead use PIO object that reads in the data buffer and clocks out the right bitstream with perfect accuracy. Same with I2S audio in or out, LED matrix displays, 8-bit or SPI based TFTs, even VGA! In MicroPython and CircuitPython you can create PIO control commands to script the peripheral and load it in at runtime. There are 2 PIO peripherals with 4 state machines each.
- RP2040 32-bit Cortex M0+ dual core running at ~125 MHz
- 8 MB SPI FLASH
- On-board STEMMA QT / Qwiic connector
- USB Type C connector
- 264kB on-chip SRAM
- 13 x Multifunction GPIO (11 breakout pads and two QT pads)
- RGB NeoPixel
- Both Reset button and Bootloader select button for quick restarts
- 3.3V regulator with 600mA peak current output
RP2040 Getting Started Guide: https://learn.adafruit.com/adafruit-qt-py-2040