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.