Developing for Nordic’s nRF52 series (like the nRF52832 and nRF52840) requires a powerful yet efficient toolchain. With multiple IDEs officially supported, developers often face decision fatigue. Let’s explore why Segger Embedded Studio (SES) stands out as the smartest choice for your BLE and IoT projects.

Overview: Official nRF52 Development Environments

Nordic Semiconductor officially supports four primary development environments:

  1. ARM Keil MDK: Industry-standard ARM IDE ($$$ license required)
  2. IAR Embedded Workbench: Commercial-grade toolchain ($$$ license required)
  3. ARM GNU Toolchain + Makefiles: Free but command-line heavy
  4. Segger Embedded Studio (SES): Free for Nordic users with full IDE experience

While all options have merits, Keil and IAR carry significant licensing costs and complex dependency chains. The GNU solution requires deep toolchain expertise. This leaves SES as the goldilocks solution – powerful yet accessible.

🚀 Why Segger Embedded Studio is Your Best Choice

1. Zero-Cost Licensing for Nordic Developers

Unlike Keil/IAR (which require $2K+/seat licenses), SES is completely free when used with Nordic chips. No feature restrictions or trial limitations.

2. All-in-One Installation

SES bundles everything in a single 300MB installer:

  • ✅ ARM compiler (GCC-based)
  • ✅ J-Link debug probe integration
  • ✅ Nordic SDK templates
  • ✅ Real-time terminal

No hunting for toolchain components or managing PATH variables!

3. Unmatched Debugging Capabilities

SES integrates J-Link debugging tools natively:

  • Live variable tracking during runtime
  • Real-time memory inspection
  • RTT (Real-Time Transfer) console
  • Power profiling for energy optimization

4. Nordic-Specific Optimizations

SES understands nRF52 architecture intimately:

  • Automatic SoftDevice (BLE stack) configuration
  • Pre-configured flash & RAM partitioning
  • Built-in support for Nordic’s DFU (OTA updates)

5. Cross-Platform Compatibility

Runs natively on Windows, macOS, and Linux – unlike Keil (Windows-only).

💻 Getting Started with Segger Embedded Studio

Step 1: Download SES (Select “Nordic Edition”)
Step 2: Install with default settings
Step 3: Launch SES → Create New Project → Select “nRF5 SDK Project”
Step 4: Choose your board (e.g., nRF52840 DK) and example (e.g., BLE UART)
Step 5: Build (F7) → Debug (F5) → Run (F5)
Pro Tip: Use the “Terminal I/O” tab for real-time debug logs without extra hardware!

Below you will find two sections:

  1. Step-by-step guide (with screenshots hints) showing how an .emProject file is used in SEGGER Embedded Studio (SES) to
    • pull in source code,
    • set compiler / pre-processor switches, and
    • describe the complete memory layout (flash + RAM) for the nRF52840.
  2. Reference table that lists every SoftDevice revision that runs on nRF52840 together with its official flash / RAM footprint and the corresponding linker-script values you must place in the .emProject (or in the SES “Memory Map” dialog).

1. Using the .emProject file in SES to control sources, switches & memory

The instructions below assume SDK 17.1.0, SES ≥ 6.20a, and the nRF52840-DK (PCA10056).
The same concepts apply to the Dongle (PCA10059) or custom boards; only the base addresses change.

1.1 Open or create the project

  • Open SES → File → Open Solution… and pick
    …/examples/ble_peripheral/ble_app_uart/pca10056/s140/ses/ble_app_uart_pca10056_s140.emProject.

1.2 Tell SES which source files belong to the build

Tree view → right click “Application”Add → Add Existing Files…
or edit the .emProject XML directly:

xml

<folder Name="Source">
    <file Name="../main.c"/>
    <file Name="../../../../components/libraries/util/app_error.c"/>
    <file Name="../../../../components/libraries/util/sdk_common.h"/>
</folder>

Every path is relative to the .emProject file.
Wildcards <file Name="../../../../components/drivers_nrf/**/*.c"/> are also supported.

1.3 Global pre-processor symbols / compiler switches

Two ways:

A) GUI
Project → Options → Preprocessor → Preprocessor Definitions
Add one symbol per line, e.g.

BOARD_PCA10056
NRF52840_XXAA
S140
NRF_SD_BLE_API_VERSION=7
DEBUG

B) XML in .emProject

xml

<configuration Name="Common">
    <settings Name="Preprocessor">
        <option Name="Defines" value="BOARD_PCA10056;NRF52840_XXAA;S140;NRF_SD_BLE_API_VERSION=7"/>
    </settings>
</configuration>

1.4 Memory layout (flash and RAM)

SES does not use a GNU linker script but a SES memory map (*.map) plus an optional placement file (flash_placement.xml).
The values must match the SoftDevice you selected.

GUI method
Project → Options → Linker → Memory Map
Fill in the two regions:Table

RegionStartLength
FLASH0x000260000x000DA000 (872 KiB)
RAM0x200200000x00020000 (128 KiB)

Those numbers are for S140 v7.2.0 (see table in section 2).
SES will auto-generate the *.map file.

XML method (edit or replace the files that ship with the SDK):

flash_placement.xml

xml

<MemorySegment name="FLASH" start="0x00026000" size="0x000DA000"/>
<MemorySegment name="RAM"   start="0x20020000" size="0x00020000"/>

Then reference it in .emProject:

xml

<configuration Name="Release">
    <settings Name="Linker">
        <option Name="MemoryMapFile" value="flash_placement.xml"/>
    </settings>
</configuration>

2. Memory layout lookup for every SoftDevice on nRF52840

SoftDeviceVersionMBR sizeSoftDevice FlashSoftDevice RAMApp Flash startApp Flash sizeApp RAM startApp RAM sizeTypical file name
S1127.2.04 KiB0x1000 – 0x1BFFF (108 KiB)8 KiB0x1C0001008 KiB0x20002000248 KiBs112_nrf52_7.2.0_softdevice.hex
S1327.2.04 KiB0x1000 – 0x25FFF (148 KiB)12 KiB0x26000868 KiB0x20003000244 KiBs132_nrf52_7.2.0_softdevice.hex
S1407.2.04 KiB0x1000 – 0x25FFF (148 KiB)12 KiB0x26000868 KiB0x20003000244 KiBs140_nrf52_7.2.0_softdevice.hex
S2126.1.1 (ANT)4 KiB0x1000 – 0x1BFFF (108 KiB)8 KiB0x1C0001008 KiB0x20002000248 KiBs212_nrf52_6.1.1_softdevice.hex
S3326.1.1 (BLE+ANT)4 KiB0x1000 – 0x25FFF (148 KiB)12 KiB0x26000868 KiB0x20003000244 KiBs332_nrf52_6.1.1_softdevice.hex
S3406.1.1 (BLE+ANT long range)4 KiB0x1000 – 0x25FFF (148 KiB)12 KiB0x26000868 KiB0x20003000244 KiBs340_nrf52_6.1.1_softdevice.hex

All sizes are decimal KiB (1024 B).
MBR always lives in the first 4 KiB (0x00000000–0x00000FFF).
If you use a bootloader, subtract its size from the “App Flash size” above.

Quick copy-paste block for SES Memory Map dialog

For S140 v7.2.0 (most common):

FLASH : 0x00026000  0x000DA000
RAM   : 0x20003000  0x0003D000

For S132 v7.2.0 (identical numbers):

FLASH : 0x00026000  0x000DA000
RAM   : 0x20003000  0x0003D000

For S112 v7.2.0 (single-peripheral):

FLASH : 0x0001C000  0x000F4000
RAM   : 0x20002000  0x0003E000

TL;DR workflow checklist

  1. Open the .emProject shipped with the example.
  2. Verify the SoftDevice subdirectory in the project name matches the hex you will flash.
  3. Update Preprocessor Definitions to the exact SoftDevice macro (S112, S132, S140, …).
  4. Update Memory Map with the start & length rows from the table above.
  5. Re-build (F7) and download (Ctrl-D).

All paths, macros, and addresses are now in sync and the application will link and run correctly on nRF52840.

Here is the release note of the NRF5 SDK 17.1.0

⚠️ Critical Compatibility Note: nRF5 SDK 17.1 + SES 5.42a

For projects using nRF5 SDK 17.1, stick with SES v5.42a. Newer SES versions introduced changes that break compatibility with this SDK release. You can download archived versions directly from Segger.

Known Issues – Segger Embedded Studio + nRF5 SDK 17.1.0

  1. Project does not build on SES ≥ 6.20a

    Fix: set Library I/O → RTT. DevZone #86414
  2. Linker errors: “undefined reference to `stdout`”

    Fix: add retarget layer or switch I/O to RTT. DevZone #88123
  3. Missing __vfprintf.h build error

    Fix: remove SEGGER_RTT_Syscalls_SES.c from project. DevZone cross-ref
  4. J-Link firmware mismatch → hard-fault

    Fix: upgrade J-Link to ≥ V7.50. DevZone #86414
  5. “Erase All” fails on early PCA10056

    Fix: use nrfjprog --recover. DevZone #86414
  6. SoftDevice 7.2.0 alignment warnings
    Fix: patch generated linker script or use Nordic scripts. DevZone #87332
  7. DFU preprocessor macros dropped after import

    Fix: re-add defines manually. DevZone #85984

Conclusion: Streamline Your nRF52 Workflow

Segger Embedded Studio eliminates the friction of traditional embedded toolchains while delivering professional-grade features. With its Nordic-specific optimizations, cross-platform flexibility, and cost-free licensing, SES isn’t just an alternative – it’s the optimal development environment for nRF52 projects. Ditch the dependency hell and licensing headaches, and let SES accelerate your path from prototype to production.

Ready to try? Grab the installer and build your first BLE application in under 10 minutes!