dotbot fw - firmware artifacts#
Build, fetch, and inventory firmware without touching hardware. Flashing
lives elsewhere: one cabled board → dotbot device, the fleet
over the air → dotbot swarm.
You get bare apps by default. Add --sandbox for the TrustZone
non-secure (NS) flavor that runs inside the swarm sandbox host.
Setup#
dotbot fw builds from a local DotBot-firmware checkout via SEGGER Embedded
Studio (SES), so it needs to find both. The checkout defaults to
./DotBot-firmware/; SES is auto-detected only on macOS (a standard
/Applications/SEGGER/ install), so on Linux/Windows builds fail with
“SEGGER Embedded Studio … wasn’t found” until you point at it.
Your firmware checkout is per-project, so set it in the project’s ./dotbot.toml
(or export DOTBOT_FIRMWARE_REPO):
# ./dotbot.toml (per project)
[fw]
firmware_repo = "/path/to/DotBot-firmware"
Your SES install rarely changes, so set it once per machine in
~/.dotbot/config.toml:
# ~/.dotbot/config.toml (once per machine)
[fw]
segger_dir = "/path/to/SEGGER Embedded Studio X.YY"
First SES build needs the nRF + CMSIS_5 packages. A fresh SES install has no chip headers, so the build fails with
fatal error: 'nrf.h' file not found. In SES, open Tools → Package Manager and install the nRF and CMSIS_5 packages (nrf.hships in the nRF one). One-time per SES install.
Which command do I want?#
Goal |
Command |
|---|---|
Compile an app, leave it in the SES |
|
Compile and collect a flat |
|
Download a published release into |
|
List targets you can build |
|
List what’s cached locally |
|
A Makefile knob the CLI doesn’t model |
|
build vs artifacts: both compile via SES. build stops once SES is
done (output stays buried in the per-target Output/ tree). artifacts goes
one step further and copies a flat, predictably-named <app>-<board>.hex into
./artifacts/ - which is exactly where dotbot device flash <app> and the
swarm tools look. Reach for artifacts when you intend to flash; build when
you only want to know it compiles.
build / artifacts flags#
Both share the same build options:
Flag |
Meaning |
|---|---|
|
Build one app (default: every app for the target) |
|
Board/target (default: |
|
Build configuration (default: |
|
TrustZone NS flavor → |
|
Force a full rebuild (default: incremental) |
|
Full SES output |
artifacts adds --out <dir> (default ./artifacts/) and --print-path
(report where the artifact would land without building). See
dotbot fw <cmd> --help for the full list.
Flag mismatch to remember:
fwselects a board with--target/-t, butdevice flashuses--board/-b.
Targets × apps#
What builds where (verified 2026-05-30). Run dotbot fw targets to list
bare targets, dotbot fw targets --sandbox for the sandbox set.
Bare targets:
Target |
Chip |
Apps available |
|---|---|---|
|
DotBot board (v3 = nRF5340) |
|
|
nRF52833 / nRF52840 DK |
|
|
nRF5340 app core |
|
|
nRF5340 net core |
|
|
SailBot |
|
|
FreeBot |
|
|
LH2 mini-mote |
|
|
XGO |
|
Sandbox targets (--sandbox → sandbox-dotbot-v2, sandbox-dotbot-v3,
sandbox-nrf5340dk): apps dotbot, dotbot-simple, motors, move,
rgbled, spin, timer. These run over the air via
dotbot swarm.
Notes:
The gateway (
dotbot_gateway) builds for the DK targets, not the DotBot boards - it runs on a DK plugged into your computer.The nRF5340 radio lives on the net core, so a gateway needs two images:
dotbot_gatewayonnrf5340dk-appandnrf5340_netonnrf5340dk-net.
Examples#
export DOTBOT_FIRMWARE_REPO=/path/to/DotBot-firmware
# Bare DotBot app for a DotBot v3 → ./artifacts/dotbot-dotbot-v3.hex
dotbot fw artifacts --app dotbot
# Just confirm an app compiles (no collection)
dotbot fw build --app sailbot -t nrf52840dk
# Gateway for an nRF5340-DK - both cores
dotbot fw artifacts --app dotbot_gateway -t nrf5340dk-app
dotbot fw artifacts --app nrf5340_net -t nrf5340dk-net
# Sandbox (NS) "spin" app for a DotBot v3 → .bin, for OTA via swarm
dotbot fw artifacts --app spin -t dotbot-v3 --sandbox
# Pull a published release instead of building → ./artifacts/<version>/
dotbot fw fetch -f v1.0.0
# See what's cached
dotbot fw list
make - the escape hatch#
dotbot fw make runs make inside your DotBot-firmware checkout with the
workspace-resolved SEGGER_DIR, forwarding every argument verbatim. Use it
only when build/artifacts don’t model the Makefile knob you need.
dotbot fw make list-projects
Do not run make docker - that’s the CI path and crawls under emulation on
this machine.
See also#
dotbot device- flash an artifact onto one cabled board.dotbot swarm- push a sandbox app to the fleet over the air.LH2 calibration - the
lh2_calibrationapp workflow.