Raspberry Pi Pico Frequently Asked Questions (FAQ)

We've recently launched the new Discovery Kit for Raspberry Pi Pico board. As the board is relatively new most of us are still getting up to speed as to what the board can and can't do. We've included this FAQ to help to shed some light on the sorts of things you might want to know.

The FAQ has come from the Raspberry Pi Forums and has been repackaged slightly for this resource. The most up to date version will always be on the forum, which can be found here.

No. RP2040 microcontrollers use 3.3V for GPIO.

It depends; often RP2040 will survive, but it is not recommended, and can reduce the life of the microcontroller.

Not yet; we hope to make the RP2040 broadly available in the second quarter of 2021.

For the RP2040 itself, yes; it’s not easy, and you will need magnification of some sort and a very good soldering iron to go with a very steady hand, but it can be hand soldered. The Raspberry Pi Pico board on the other hand has been designed so that it can be easily soldered down to another PCB, it's why it has castellated contacts on each edge.

Like other microcontrollers, it doesn't run an OS by default, but we supply a SDK which provides a rich library of functions for using the hardware/features of the chip, along with higher-level functionality often found in an OS. You can use this to write “bare metal” C/C++ applications easily, or you can use MicroPython, which is even simpler for beginners.

16 MiB of flash (2^24 bytes)

The Raspberry Pi Pico board design files are open-source, along with all the provided software, examples, and documentation. The internal design of the RP2040 microcontroller itself is not open-source

These are two very different devices, a microcontroller and a microcomputer, intended for different purposes. Pico is a great device for dedicating to a very specific task, whereas Zero is a multipurpose device. Raspberry Pi Zero has HDMI out, a camera interface, etc; Raspberry Pi Pico does not. However, Pico has an on-board ADC as well as other peripherals not present on Raspberry Pi Zero, and consumes considerably less power; it is therefore much more suited to embedded applications than Raspberry Pi Zero.

The maximum clk_sys clock speed is 133MHz at normal core voltage (1.1V ±10%), but it can be overclocked. However, this requires more power and a higher core voltage, and may affect the life expectancy of your device. No warranties are given when running outside of the limits specified in the datasheet.

No, but we do expect third parties to port their own development systems to RP2040/Pico over time. For launch, alongside the very comprehensive C/C++ SDK, there is an official port of MicroPython. Adafruit has also ported CircuitPython to RP2040.

There is no specific low-power mode, but you can do various things to reduce power consumption: slow the system clock, power down some of the memories, gate the clock to peripherals, reduce the core supply voltage, etc.

There are two specific modes for turning off parts of the device when not being used:

  • SLEEP mode is when processors are in wfi/wfe and DMA is inactive, so you can shut off most system clocks, including things like bus fabric.
  • DORMANT mode is when you shut down all oscillators, and so is lower power still, but then you have fewer options for waking.

At the moment you need to use the command window in VSCode to set a gdb breakpoint.

Our development work has been using the more common versions of GCC as supplied with various distributions. We have checked builds using major gcc versions from 6.3.1 to 10.2, so all of those should work.

We are currently working on characterising this, and will update the datasheet.

For help on the Pico C/C++ SDK, RP2040, and MicroPython, you can use our forums. For all other things, for example CircuitPython or Arduino, please contact the appropriate vendors.

Yes. TensorFlow Lite for Microcontrollers has been ported to Raspberry Pi Pico by Google, and is available in our repos. It is an early version so there is lots of optimisation still to do.

Of course; check out the SDK which has some library functions written in assembler.

The processor (Twin core M0+) implements the ARMv6-M Thumb instruction set, including a number of 32-bit instructions that use Thumb-2 technology. The ARMv6-M instruction set comprises all of the 16-bit Thumb instructions from ARMv7-M excluding CBZ, CBNZ and IT and the 32-bit Thumb instructions BL, DMB, DSB, ISB, MRS and MSR.

Yes, we will be working on porting an RTOS soon.


It's a file format for flashing microcontrollers, developed by Microsoft.

There are inbuilt HW blocks to support UART, SPI and I2C, but there is also a unique and very specialised HW block call the PIO which can be programmed to implement all sorts of different digital protocol, both input and output. For example you can program it to be a UART, (in fact, with 8 channels, it can implement another 4 TX/RX UARTS, or 8 RX or 8 TX's , or combinations thereof!), RS485, and almost any other protocol you can think of. See the databook for more information on the PIO, and pico-examples for some examples of the PIO in action.

Cost! USB-C connectors are still more expensive than uUSB, and when you are making millions of devices, even a few cents more per connector really adds up. We also believe that, especially in the educational arena, that uUSB is still much more common than USB-C. If you must have it, RP2040 boards with USB-C are available from our partners.

Cost is the main reason, adding an extra button can make a big difference. But we also expect that if you are making a lot of changes during development, you will have set up the SWD (Single Wire Debug) system, which allows you to download code the board via the debugger. This means you don't need to power off or use the BOOTSEL button at all. There are other options as well.

Of course. Although any model of Pi would be able to communicate with the Pico, we recommended more recent models for development, especially if using the VSCode IDE as that requires a strong CPU and at least 2GB of RAM. So the Pi4 and Pi400 are best when using an IDE, but if you are using the command line, the Raspberry Pi3 or even 2B should be OK. Compile times will be a bit longer though, and we do recommend a 16GB card to ensure you have enough space for all the code trees.

If you are moving between MicroPython and C programs, you might find you have problems with certain applications, and need to clear the Flash completely to start again. We provide a special uf2 program that can do this for you called nuke.uf2. It can be found here and the source code for it can be found here.

Every now and then we will update the SDK or any of the other Pico repositories. You can easily be informed when this happens using github. Login in to you github account, and subscribe to the repro - Watch (top right) -> Custom -> Releases. You can also Star a repository if you like it!

These GPIO's are used on the Pico board for the following purposes.

GPIO23 goes to the PS pin of the voltage regulator, to adjust it between PFM and PWM mode. GPIO24 is the centre of a 5k6/10k voltage divider off the VBUS from USB, on the USB side of a diode, so it detects if USB is supplying voltage GPIO 25 is the on board LED GPIO29/ADC3 is another voltage divider to measure VSYS, but with an extra FET in place so the divider cant leak into the ADC and 3.3v rail, when the 3.3v rail is off

In total (adding up all the individual GPIO demands), the current for the IOVDD must be >=50mA.

No, you need to use a UART based console when debugging using SWD. This is because the USB stack will be paused when the RP2040 cores are stopped during debugging, which will cause any attached devices to disconnect.

There is just one, an execute in place (XIP) cache on the flash (because flash memory is quite slow). There are otherwise no instruction or data caches.

Yes, the Kitronik Discovery Kit for Raspberry Pi Pico. and its 7 fun experiments to introduce you to key features of the Raspberry Pi Pico.

Yes, you can. Add the following line to CMakeLists.txt and it will force the program to be loaded in to RAM instead of flash when you download it. This means your program will be gone if you power cycle, but it does reduce the number of rewrite cycles on the flash, so is useful during development.

pico_set_binary_type(<yourprojectname> no_flash)

Head over to the Raspberry Pi forum here.

Leave a comment

All comments are moderated before being published