---
This document explains the three boot modes supported by Nimphea and how to choose the right one for your project.
Nimphea applications can be deployed in three different ways, each with different trade-offs:
| Mode | Flash Location | Bootloader | Max Size | Best For |
|---|---|---|---|---|
| BOOT_NONE | Internal (0x08000000) | None | ~124KB | Development, simple projects |
| BOOT_SRAM | SRAM (0x20000000) | DFU required | ~512KB | Rapid iteration with bootloader |
| BOOT_QSPI | External (0x90040000) | DFU required | 128MB | Large applications, libraries |
Is your application < 120KB? ├─ Yes: Can you install a bootloader? │ ├─ No → Use BOOT_NONE (simple, fast) │ └─ Yes: Do you need fast iteration? │ ├─ Yes → Use BOOT_SRAM (fast reload, no reflash) │ └─ No → Use BOOT_NONE (simpler) └─ No: Must use bootloader + QSPI └─ Use BOOT_QSPI (only option for large apps) Special case: Using CMSIS-DSP? → Always BOOT_QSPI (library is 1MB)
What it is: Application flashes directly to the Daisy's internal flash. No bootloader involved.
Memory layout:
Advantages:
Disadvantages:
When to use:
Flashing:
nimble make nimble stlink # Via ST-Link (fastest) # OR nimble flash # Via USB DFU (no hardware required)
Configuration in project.nimble:
const customDefines = "" # or omit entirely
---
What it is: Application runs from SRAM, loaded via DFU bootloader. Once the bootloader is flashed, you can reload the application over USB without hardware.
Memory layout:
Advantages:
Disadvantages:
When to use:
Setup (one-time):
Flashing:
nimble make nimble flash # USB DFU only (bootloader required)
Configuration in project.nimble:
const customDefines = "bootSram"
---
What it is: Application stored in external QSPI flash, loaded via DFU bootloader. Provides massive storage for large or feature-rich applications.
Memory layout:
Advantages:
Disadvantages:
When to use:
Setup (one-time):
Flashing:
nimble make nimble flash # USB DFU only (bootloader required)
Configuration in project.nimble:
const customDefines = "bootQspi"
Example: CMSIS-DSP (always BOOT_QSPI):
const customDefines = "bootQspi useCMSIS"
---
Goal: Get something working on Daisy
Steps:
Example:
# Create from template git clone https://github.com/Brokezawa/nimphea-template-basic myproject cd myproject # Build and flash nimble make nimble stlink # or: nimble flash
Goal: Application is hitting size limit in BOOT_NONE
Steps:
Decision:
Goal: Fast Fourier Transform for spectral analysis
Requirements:
Configuration:
# project.nimble const customDefines = "bootQspi useCMSIS"
Build and flash:
nimble make # Will link CMSIS-DSP library nimble flash # Over USB with bootloader (2-3 seconds)
Goal: New developer joining project that already has bootloader
Setup (one-time):
Daily workflow:
nimble make nimble flash # Fast USB update, no hardware required
---
# project.nimble - Change this line: const customDefines = "" # was: BOOT_NONE # to: const customDefines = "bootSram"
Then:
nimble make nimble flash # Must have bootloader installed
# project.nimble const customDefines = "bootQspi" # was: "bootSram"
Then:
nimble make nimble flash
Requires ST-Link (bootloader can't reflash itself)
# Remove boot mode defines const customDefines = "" nimble make nimble stlink # Via ST-Link only
---
Problem: Tried nimble stlink with bootloaded application
Solution:
Fix:
# If bootloader installed, use DFU nimble flash # If no bootloader, revert to BOOT_NONE nimble stlink
Problem: "Binary too large for internal flash"
Solutions:
Problem: Device won't enter bootloader (Hold BOOT + press RESET)
Possible causes:
Solution:
---
BOOT_NONE:
0x08000000 ┌─────────────────────┐
│ Application Code │ ~124KB available
│ (direct flash) │
0x0801F000 └─────────────────────┘
0x20000000 ┌─────────────────────┐
│ Stack + Heap │ ~512KB SRAM
0x20080000 └─────────────────────┘
BOOT_SRAM:
0x08000000 ┌─────────────────────┐
│ DFU Bootloader │ 64KB (pre-installed)
0x08010000 └─────────────────────┘
0x20000000 ┌─────────────────────┐
│ Application Code │ ~512KB (runs here)
0x20080000 └─────────────────────┘ Stack/Heap above app
BOOT_QSPI:
0x08000000 ┌─────────────────────┐
│ DFU Bootloader │ 64KB (pre-installed)
0x08010000 └─────────────────────┘
0x90040000 ┌─────────────────────┐
│ Application Code │ 128MB available
0x98000000 └─────────────────────┘ (QSPI external flash)
0x20000000 ┌─────────────────────┐
│ Stack + Heap │ Full SRAM available
0x20080000 └─────────────────────┘ (not counted toward app size)
---