There are many CircuitPython compatible microcontroller boards, with several different processor chips. Each microcontroller has different qualities that make it good for different types of situations. This page discusses the different microcontrollers to help you understand the differences, and why you might choose one over another.

ATSAMD21 M0

The Microchip ATSAMD21 Cortex M0 is the only Cortex M0+ based chip that CircuitPython supports. It does not have native Bluetooth or WiFi.

  • SPEED: 48 MHz
  • FLASH: 32 to 256 kB
  • RAM: 4 to 32 kB
  • BLE: NO
  • WIFI: NO

The SAMD21 can run CircuitPython, but it has limitations. It is clocked at 48MHz and has no built in floating point functionality, meaning it generally runs slower. There are memory limitations - it caps out at 256KB of flash and 32KB of RAM. Flash is important for multiple reasons, including determining the number of built-in CircuitPython modules supportable in builds for SAMD21 boards. If the board doesn't have a separate SPI flash chip, as in the case of the non-Express boards (e.g. Trinket, Gemma, QT Py, etc.), the flash limitations become even more critical. Flash space impacts how complex your code can be and how many libraries you can import, which determines things like how many sensors you can use at the same time.

The benefit is that it's small and lower cost than many of the other microcontrollers mentioned on this page.

ATSAMD51 M4

The Microchip ATSAMD51 Cortex M4 microcontroller is powerful. It does not have native Bluetooth or WiFi.

  • SPEED: 120 MHz
  • FLASH: 256 to 1024 kB
  • RAM: 128 to 256 kB
  • BLE: NO
  • WIFI: NO

The Cortex M4 means it can do faster floating point math, so all division will be faster. It generally executes faster than the SAMD21, as the SAMD51 is clocked at 120mhz by default. It's a good option in that it has a lot more RAM - up to 256KB RAM - which means you can do more things all at once in your code. Most of the SAMD51 chips have more built in flash as well, meaning less limitations on the built-in CircuitPython modules.

It's a great all around chip, as long as you're not looking for WiFi or Bluetooth connectivity.

nRF52840

The Nordic Semiconductor nRF52840 is not as fast as the ATSAMD51, but it does have native Bluetooth capabilities.

  • SPEED: 64 MHz
  • FLASH: 1024 kB
  • RAM: 256 kB
  • BLE: YES
  • WIFI: NO

An nRF52840 like a SAMD51, is also a Cortex M4 based chip, so it's faster than the SAMD21. However, it's clocked slower than SAMD51, and therefore the nRF52840 is not as speedy as SAMD51. It has 1MB of flash, and 256KB of RAM. It is important to note that both the flash and the RAM are shared with the Bluetooth code - those numbers are the built in flash and RAM, so, the amount available to the user is less because it is sharing with Bluetooth stack. The chip does not do WiFi.

The important feature of this chip is the native Bluetooth capabilities - if you want Bluetooth in CircuitPython, this chip is the way to go.

STM32F405

The ST Microelectronics STM32F405 is an all-around faster microcontroller than many of the other microcontrollers covered here.

  • SPEED: 168 MHz
  • FLASH: 1024 kB
  • RAM: 192 kB
  • BLE: NO
  • WIFI: NO

The STM32F405 is also a Cortex M4 based chip. It does not support native WiFi or Bluetooth. The Adafruit STM32F405 boards do not currently ship with a UF2 bootloader, so installing and updating CircuitPython requires more steps than simply dragging and dropping a UF2 file onto a BOOT drive. It's easier and cheaper to connect a debugger to this board than an ATSAMD board, it can be programmed without an external programmer using DFU, and it is very difficult to brick (render inoperable). However, it isn't as well supported in Arduino.

This microcontroller is great for folks looking to take extra steps with their project or learning process.

ESP32

The Espressif ESP32 has both Bluetooth and WiFi capabilities, but does not run CircuitPython natively. Instead, CircuitPython boards use the ESP32 as a co-processor for WiFi and Bluetooth capabilities. Note that it cannot do WiFi and Bluetooth at the same time.

The ESP32 is not directly supported by CircuitPython because it does not have native USB connectivity.

NOTE: The ESP32 and the ESP32-S2 are different microcontrollers with differing capabilities.

ESP32-S2

The Espressif ESP32-S2 has native WiFi capabilities like the ESP32, but does not have Bluetooth. However, it does have native USB support, and thus is the first all-in-one WiFi chip with CircuitPython support

The ESP32-S2 typically has 4MB of external flash, but only 1MB is available to the user. The way it works is that the flash space is shared between the native CircuitPython core code and the user filesystem. In this way, it is unlike the SAMD21 Express and SAMD51 Express boards, where CircuitPython lives on the chip and the code is separate.

The ESP32-S2 WROVER module has 2MB of external RAM, all of which is allocated to CircuitPython, which means it has more CircuitPython-dedicated RAM than any of the other microprocessors. There are ESP32-S2 modules that do not have the external RAM chip, and in the case of those, memory when using CircuitPython will be limited. It is a relatively low-cost option as well.

iMX RT

The NXP iMX RT family of chips are fast. The minimum clock speed you'll see is around 500MHz. They're a Cortex M7 based microcontroller family, which means they're more efficient at code execution than an M4 as well. In terms of flash, there is always an external flash chip that is shared between the native CircuitPython code and the user filesystem. In most cases, you'll have more RAM than a SAMD51, but not in all cases for this chip line. The low end of the line will have less RAM than the SAMD51, but the code will run faster. It also has native high speed USB connectivity.

Raspberry Pi

The Raspberry Pi does not run CircuitPython natively. It is capable of running CircuitPython libraries using the Blinka CircuitPython library compatibility layer. This means it's compatible with your current CircuitPython code, with no changes needed. However, it is not low power or battery-friendly, as the boards are running a full Linux operating system. But, because it's running CPython (standard Python), you can also use all of the normal Python libraries along side, such as numpy, etc. that are not in CircuitPython.

ATMEGA

ATMEGA boards are not compatible with CircuitPython. This is because CircuitPython is designed for 32- or 64-bit machines, and ATMEGA based chips are 8-bit. For CircuitPython, please consider one of the options above.

This guide was first published on Nov 18, 2020. It was last updated on 2020-11-25 16:41:49 -0500.

This page (Chipsets) was last updated on Nov 23, 2020.