Oberon RTK

IMAGE_DEF

The two ways to provide an IMAGE_DEF metadata block on RP2350, and the code base address each requires

Overview

Bootable RP2350 binaries must include an IMAGE_DEF metadata block. There are two ways to provide it, and the choice constrains the code base address in your Astrobe configuration:

IMAGE_DEF source Code base Load / debug tooling
Path A: prepended at load time (framework default) 10000100H Run make-uf2 rp2350 to produce a bootable UF2 file; run make-elf --image-def to produce a debug ELF file. The first 256 bytes of flash are reserved for the prepended block.
Path B: module ImageDef (embedded in binary) 10000000H Astrobe-emitted .uf2 boots as-is; for a debug ELF file run make-elf without --image-def.

Both paths are valid and tested. The framework's example and test programs use Path A – the principle being that deployment data should be kept out of the program binary, so the same program binary can serve different load-time configurations. The instructions in the following sections follow that convention. If you prefer Path B, the table above captures the only differences; the rest of the build flow is the same.

Note that either path is a valid and useful approach. There is no right or wrong here.

Path A — Prepended at Load Time (Framework Default)

Do not import ImageDef. Set the .ini Code Range lower bound to 10000100H. The 256-byte gap from 10000000H to 100000FFH will be filled by the IMAGE_DEF block that make-uf2 rp2350 (for UF2 loading) or make-elf --image-def (for a debug ELF file) prepends to the program binary.

Path B — Embedded via ImageDef Module

Import ImageDef in Main immediately after Startup; this ensures that the IMAGE_DEF block appears in the first 4 kB of the binary:

IMPORT
  Startup, ImageDef, MemMap, Memory, Clocks, Console,
  RuntimeErrors, RuntimeErrorsOut, FPU, LED;

Set the .ini Code Range lower bound to 10000000H. Refer to the Astrobe documentation for further detail on the ImageDef module.

Coexistence

Leaving ImageDef in your program while also using make-uf2 or make-elf --image-def is harmless: the RP2350 boot ROM scans the first 4 kB of flash, picks up the prepended IMAGE_DEF, and ignores the one embedded later via ImageDef. The only requirement is that the code base address matches the actual IMAGE_DEF position – ie., the address scheme matches one of the two paths above.

Address-mismatch

If the code base address does not match the IMAGE_DEF source, the chip does not boot the program – unfortunately, no diagnostic is produced: the uploaded UF2 file is formally valid, and the virtual volume RP2350 mounted using BOOTSEL gets unmounted after the file transfer.

Obviously, there could be many other causes for a non-functioning program, but a quick check for the correct setting could be a first step.

If in doubt, build and load one of the simple example programs. If you want to use the Astrobe UF2 file, add module ImageDef to Main, as outlined above.

Last updated: 12 May 2026