Skip to content

Supported boards

upstratus generates code for these six boards and no others. The table says which kinds of data each board can run a model on; the sections below give its specifications and what you must do on your own computer before you can program it.

Specifications are from datasheets

The memory and core figures are datasheet values, not measurements from our bench. The setup notes are measured on a Linux computer unless a note says otherwise.

What each board can sense

Board Motion Sound Camera Sensor values
ESP32-S3-DevKitC-1 (N8R8) Supported (module) Supported Supported (only tier-1 board that can) Supported
Arduino Nano 33 BLE Sense Rev2 Supported (onboard) Supported (onboard mic) Not supported (256 KB RAM cannot hold a 96×96 MobileNetV2 arena) Supported
Raspberry Pi Pico 2 W Supported (module) Limited (module + tight RAM) Not supported (no camera interface, no PSRAM) Supported
Nordic nRF52840 DK Supported (module) Limited (module) Not supported Supported
ST Nucleo-H753ZI Supported (module) Supported Supported (parallel camera + 1 MB RAM) Supported
ST Nucleo-F446RE Supported (module) Limited (module + 128 KB is tighter than nano33ble/nrf52840dk's 256 KB) Not supported (no camera interface, 128 KB too small for a vision arena) Supported

The boards

ESP32-S3-DevKitC-1 (N8R8)

Board id esp32s3 · tier 1 · the flagship: the most capable tier-1 board.

Core Xtensa LX7 dual @240 MHz
RAM 512 KB + 8 MB PSRAM
Flash 8 MB QSPI
Sensors on the board none (needs a module)
Connectivity Wi-Fi + BLE
USB native USB-Serial-JTAG
The board's usual toolchain ESP-IDF 5.x (CMake)
Kernels in the generated classifier code portable C99 (optimised kernels for this board are not built yet)

Before you choose it: No admin needed. Plug in the native USB port, the one labelled USB rather than UART.

  • Build with USB CDC On Boot enabled (Arduino IDE: Tools > USB CDC On Boot > Enabled; arduino-cli: esp32:esp32:esp32s3:CDCOnBoot=cdc). Without it Serial is the hardware UART0, nothing reaches the USB port and the board looks dead.

Arduino Nano 33 BLE Sense Rev2

Board id nano33ble · tier 1 · the classroom board: sensors onboard, zero wiring.

Core Cortex-M4F @64 MHz (nRF52840)
RAM 256 KB
Flash 1 MB internal
Sensors on the board BMI270 IMU + BMM150 mag + MP34DT06 PDM mic + baro/temp/light
Connectivity BLE only — no Wi-Fi
USB USB CDC (nRF52840 USBD)
The board's usual toolchain arduino-cli + ArduinoCore-mbed
Kernels in the generated classifier code CMSIS-NN (Arm)

Before you choose it: No admin needed. Uploading resets the board into its bootloader automatically.

Raspberry Pi Pico 2 W

Board id pico2w · tier 1 · the cheap board: best price, needs a sensor module.

Core Cortex-M33 dual @150 MHz (RP2350)
RAM 520 KB
Flash 4 MB QSPI
Sensors on the board none (needs a module)
Connectivity Wi-Fi + BLE (CYW43439)
USB USB CDC (RP2350)
The board's usual toolchain Pico SDK 2.x (CMake)
Kernels in the generated classifier code CMSIS-NN (Arm)

Before you choose it: No admin needed, but the first flash needs the BOOTSEL button held while you plug the board in.

Needs a step by hand: Hold the BOOTSEL button while plugging in USB, the first time only.

  • In BOOTSEL the board appears as a USB drive named RP2350 (USB ID 2e8a:000f). Copy the .uf2 file onto it.
  • Our firmware then runs as a USB serial device (2e8a:0009), so you can reflash without the button: opening that serial port at 1200 baud reboots the board back into BOOTSEL.
  • A board that has only ever run a program with no USB (such as the blink example) is invisible to the computer, so it needs the button again.

Nordic nRF52840 DK

Board id nrf52840dk · tier 2 · Zephyr needs a west workspace; browser flashing needs J-Link drivers.

Core Cortex-M4F @64 MHz
RAM 256 KB
Flash 1 MB
Sensors on the board none onboard (Arduino headers)
Connectivity None
USB None
The board's usual toolchain nRF Connect SDK (Zephyr, west)
Kernels in the generated classifier code CMSIS-NN (Arm)

Before you choose it: Needs one-time admin setup on Linux (a udev rule for the onboard J-Link); see details for other systems.

Needs a one-time administrator (root) step on at least one operating system.

  • Linux: install SEGGER's udev rule once with sudo. Without it flashing fails with 'No J-Link device found' because an ordinary user cannot open the J-Link.
  • If your kit shows a JLINK drive, copying a .hex file onto it flashes the board with no admin step. The unit tested here had that drive disabled, and re-enabling it needs the same J-Link access.
  • The chip's debug lock comes back after every power cycle, so flashing always starts with a mass erase.
  • Windows needs SEGGER's driver (admin) and macOS needs none, per SEGGER's documentation; only Linux was tested on this bench.

ST Nucleo-H753ZI

Board id nucleoh743 · tier 2 · Not a hobbyist board; the value is headroom for an engineer evaluating larger models.

Core Cortex-M7 @480 MHz
RAM 1 MB total (128 KB DTCM + 512 KB AXI + D2/D3 domains)
Flash 2 MB
Sensors on the board none onboard
Connectivity None
USB None
The board's usual toolchain CMake + arm-none-eabi-gcc, CubeMX-compatible
Kernels in the generated classifier code CMSIS-NN (Arm)

Before you choose it: No admin needed: copy the firmware file onto the board's USB drive (NOD_H753ZI).

  • Copying a .bin onto the NOD_H753ZI USB drive flashes the board with no driver, udev rule or root (verified 2026-10-01).
  • The command-line st-flash route is faster but needs the stlink udev rules on Linux, which the stlink-tools package installs.

ST Nucleo-F446RE

Board id nucleof446re · tier 2 · the compact Cortex-M4 board: a quarter of the H753's RAM -- useful for testing tier-2 minimums, not the flagship capacity story.

Core Cortex-M4F @180 MHz
RAM 128 KB
Flash 512 KB
Sensors on the board none onboard
Connectivity None
USB None
The board's usual toolchain CMake + arm-none-eabi-gcc, CubeMX-compatible
Kernels in the generated classifier code CMSIS-NN (Arm)

Before you choose it: No admin needed: copy the firmware file onto the board's USB drive (NOD_F446RE).

  • Copying a .bin onto the NOD_F446RE USB drive flashes the board with no driver, udev rule or root (verified 2026-10-01).
  • The command-line st-flash route is faster but needs the stlink udev rules on Linux, which the stlink-tools package installs.

Flashing

upstratus does not flash boards for you yet: the browser flashing path is not built. You download a package of C source for the board you chose and build and flash it with that board's own tools (the toolchain row above). See Get started.

Anomaly detectors, value predictors and the recurrent (GRU) classifier are packaged as portable C on every board; the kernels row applies to the other classifiers.