Skip to content

MCU Info Page: Arduino Nano 33 BLE

Jamie Smith edited this page Oct 14, 2022 · 14 revisions

Arduino Nano 33 BLE Overview

The Arduino Nano 33 BLE is a small Mbed-compatible board from Arduino containing a general-purpose microcontroller with Bluetooth capabilities. The Arduino Nano 33 BLE uses a U-Blox NINA-B306 module, which itself contains an nRF52840 MCU. To flash code, Arduino provides a USB bootloader, and Mbed can flash code using this bootloader or an external SWD debugger. This board is a convenient option for projects which need to use bluetooth in an affordable and small form factor!

Nano 33 BLE

Feature Overview

CPU Flash/Code Memory RAM Communication Peripherals Other Features
Cortex-M4F, clocked at up to 64 MHz Without Arduino bootloader
Total: 1MiB
Available to user:* 987 kiB
With Arduino bootloader:
Total: 960kiB
Available to user:* 923kiB
Total: 256kiB
Available to user:* 244kiB
  • 2x I2C/SPI combo
  • 1x additional SPI
  • 1x QSPI (currently not supported)
  • 2x UART
  • 1x USB
  • Bluetooth 5 radio
  • 12-input ADC (AnalogIn)
  • 4x PWM (must share a common frequency)
  • RTC (currently not supported)
  • Hardware RNG
  • DMA (currently not supported)

*"Available to user" subtracts both regions of memory unusable by Mbed OS projects and the baseline memory used by a minimal build of Mbed OS.

Bluetooth Stacks

There are two Bluetooth stacks in existence for this microcontroller: Nordic SoftDevice and Arm Cordio. SoftDevice is closed-source and provided as a precompiled binary from Nordic, complicating the build process significantly. Arm Cordio is an open-source Bluetooth stack produced by Packetcraft and ARM, and is included as part of the Mbed OS source code (in the connectivity/FEATURE_BLE/libraries/cordio_stack folder).

Mbed OS used to support both stacks, but SoftDevice support was removed in Mbed OS 5.11 (perhaps so that ARM could promote its internally developed stack instead?). Currently only Cordio is supported and is used automatically. However, users should be aware that Cordio has issues that prevent nRF MCUs from entering a low-power state (under ~1.5mA) when using Bluetooth. Sadly, development on open-source Cordio appears to be dead as it became a private company, so this is unlikely to be fixed anytime soon.

Instead, the option that seems more promising is resurrecting the old SoftDevice interface, enabling Mbed to use Nordic's maintained stack. Mbed Community Edition is interested in doing this work but there is no concrete plan for this as of yet.

Misc MCU Info

Pin Mapping

Most Mbed boards are limited to using specific peripherals (e.g. I2C, SPI) on specific pins. However, the Nano 33 BLE and its nRF52840 allow using all peripherals, other than the ADC, on absolutely any pin on the device. This means you aren't restricted to the pins labeled as SPI and I2C in the pinout! However, you still must respect the total number of peripherals available, e.g. you can only create a total of 2 UARTs.

There's an additional consideration for SPI and I2C busses: Each I2C instance shares resources with one of the SPIs. So, if you create two I2Cs, you only can make one SPI, and if you create three SPIs you can't use I2C at all.

Datasheets