The Raspberry Pi Pico: $4, dual M0+, 264kb RAM

Impressive specs.

  • 21 mm × 51 mm form factor
  • RP2040 microcontroller chip designed by Raspberry Pi in the UK
  • Dual-core Arm Cortex-M0+ processor, flexible clock running up to 133 MHz
  • 264KB on-chip SRAM
  • 2MB on-board QSPI Flash
  • 26 multifunction GPIO pins, including 3 analogue inputs
  • 2 × UART, 2 × SPI controllers, 2 × I2C controllers, 16 × PWM channels
  • 1 × USB 1.1 controller and PHY, with host and device support
  • 8 × Programmable I/O (PIO) state machines for custom peripheral support
  • Supported input power 1.8–5.5V DC
  • Operating temperature -20°C to +85°C
  • Castellated module allows soldering direct to carrier boards
  • Drag-and-drop programming using mass storage over USB
  • Low-power sleep and dormant modes
  • Accurate on-chip clock
  • Temperature sensor
  • Accelerated integer and floating-point libraries on-chip

And looks like it can run straight off a lithium cell - VSYS range is 1.8V to 5.5V, so no need for bucks or boosts…

Interestink!

cool! Maybe I’ll finally get into something with a bit more ram and horsepower than the atmegas.

Being a new raspberry pi product I assume it’ll be unobtanium for a while :confused:

6 banks, 264KB. 264/6=44. Is that as odd a “not a power of two” amount as it sounds?

It’s quite normal. Usually these have ~4kB of a battery-backed SRAM region for pseudo-NVRAM scratch space, and an assortment of 16, 32, 64, 96, or 128kB ranges scattered elsewhere. The sum of these isn’t always an even power of two or anything.

Here’s the uC datasheet: https://datasheets.raspberrypi.org/rp2040/rp2040_datasheet.pdf

2.6.2 has the details, but in summary:

As @Vertiginous mentions, microcontrollers are often very weird looking memory systems. GPUs are similarly bizarre at times. But this sort of “Well, you can use it all as one block, but if you need something special, here’s how it’s physically laid out…” thing is quite common to find.

Wowzers.

I spent a bit of time with the datasheet, and a few things worth pointing out:

  • There are 12 DMA engines on this thing that can run! No wonder they’re striping memory by default - you can shove a ton of data around.
  • The “PIO” state machines? Those are arbitrary output drivers. You program them with how to emit a data stream, with cycle-specific delays based on the input clock, and then it does it. So if you want I2C, or UART, or WS2812 LED, or DMX, or… whatever you want, you can program it. Properly impressive.

In general, this is a massive uC with a ton of features. It’ll do just about anything you ask, near as I can tell.

Yeah they’ve been making a big deal out of the PIO peripherals… they can drive VGA for instance! And apparently do DSD audio through a simple RC LPF to fairly high levels of precision (ok, jitter is going to be your worst enemy here, but it’s probably going to end up as good quality as a consumer grade dedicated DAC or ADC will).

12 DMA engines, or 12 DMA channels?? Not sure what you mean by “engine”… my experience with ARM DMA is that it is usually coordinated by one mux unit with the ability to stream several connections simultaneously in channels… if you have a BIG.little arch you might have two DMA units, but I can’t see how 12 would be useful for a symmetric dual core setup…

I suppose it’s 12 channels.

Interesting. Wonder if it could do octoprint.

I’m not sure how printers really interface. It would likely work fine (very well, even) for an on-printer microcontroller, but it wouldn’t handle the full 3d files and such.

Could be quite a full featured GRBL style controller though. Just feed it g-code from Cura or Slic3r and it’s got more than enough power to handle that.

I’m sure the raspi-cam is out but it would probably interface well with an OV2640.

A bit more detail on the programmable IO: