Astra MCU SDK Referenceο
This document is a comprehensive reference for the Astra MCU SDK. It describes the SDK structure, build and configuration model, project layout, image generation, flashing tools, and common troubleshooting. It is not a quick start guide and focuses on SDK internals and CLI workflows.
Throughout this guide, <sdk-root> refers to the folder where you extracted or cloned the SDK (for example, C:\Users\<YourName>\ASTRA_MCU_SDK_x.x.x\).
Table of Contentsο
Scope and Audienceο
Use this reference if you need to:
Understand how the SDK is organized and built.
Configure SDK or application features.
Build SDK packages and applications with the CLI.
Generate images and flash devices.
Troubleshoot build, image generation, or flashing issues.
Before using this reference, complete the setup and installation steps:
CLI setup: Setup and Install SDK using CLI
Supported Platforms and Boardsο
Boardsο
Astra Machina Micro SR110 (SR110_RDK)
Astra Machina SL2610 (SL2610_RDK)
Platform Differences (at a glance)ο
Feature |
SR110 |
SL2610 |
|---|---|---|
MCU core |
Cortex-M55 |
Cortex-M52 |
NPU |
Ethos-U55 |
None |
Flash media |
External XSPI |
eMMC (via USB boot tool) |
Image generation |
SRSDK image generator |
Image generator + USB boot tool |
Debug |
OpenOCD + probe |
Not supported in this SDK flow |
Toolchains |
GCC, AC6, LLVM (SR110 only) |
GCC |
Platform Guidesο
SR110 platform and hardware: SR110 Platform Guide
SL2610 platform and hardware: SL2610 Platform Guide
Host Requirementsο
Supported Host OSο
Windows (x64)
Linux (Ubuntu 22.04)
macOS (Apple Silicon & Intel)
Required Toolsο
Tool |
Version Guidance |
Notes |
|---|---|---|
CMake |
4.1.2 |
Build system generator |
Ninja |
1.13.1 |
Build executor |
Python |
3.13.x |
Required for configuration tools and image generation |
OpenOCD |
Host package or xPack |
Required for SR110 flashing |
Toolchainsο
GCC 13.2.1 (all platforms)
Arm Compiler 6.19 (AC6)
LLVM Clang 21.x (SR110 only; requires GCC sysroot)
Use only one toolchain per build. Do not mix toolchains across SDK and application builds.
Environment Setupο
Use these for host setup and tool installation:
Build environment guides (OS + toolchain specific guides)
SDK Repository Layoutο
Top-level directories:
arch/CPU architecture supportboard/Board-specific support filesbootloader/Bootloader sourcesconfigs/SDK defconfigs (bootloader, tflite, default package)drivers/Hardware driversexamples/Sample applications and example build systemkconfig/SDK-level configuration entryos/RTOS support (FreeRTOS and related)soc/SoC-specific sourcestools/Build, image, flashing, and utility toolsutilities/Common utilitiesthird_party/External dependencies
Examples Layout (in-tree)ο
examples/
|-- <BOARD>/
| |-- configs/ # Application defconfigs
| |-- kconfig # Example Kconfig
| `-- <example sources>
|-- build/ # Example build artifacts
|-- install/<BOARD>/ # Installed SDK package
|-- out/ # Example output binaries and images
`-- Makefile # Examples build entry
Out-of-tree custom applications are supported. Point SRSDK_DIR to the SDK root and keep your application repo separate.
Example build scope: examples/tools/cmake/subdirectories.cmake lists which example trees are included (for example add_subdirectory(SR110_RDK)). Edit this file if you need to limit or expand the example build scope.
Project Structure and Module Organizationο
The SDK is organized as functional modules. Each module typically contains its own CMakeLists.txt and, when configurable, a Kconfig file. The root CMakeLists.txt includes major subsystems, and each subsystem adds its sources and include paths.
Root-Level Build Entryο
CMakeLists.txtin the SDK root drives inclusion of core subsystems (bootloader, firmware, tflite, drivers, OS).tools/cmake/flags.cmakecentralizes compiler flags and warnings.tools/cmake/contains SDK CMake modules;examples/tools/cmake/contains application-specific CMake modules.
Module-Level Structureο
Each module uses
target_sources()to add sources andtarget_include_directories()to expose headers.Modules can be conditionally included based on Kconfig selections.
Kconfig Hierarchyο
Top-level
kconfigsources module Kconfig files (e.g.,drivers/Kconfig,soc/*/Kconfig).Selecting options in Kconfig controls which modules and features are built.
Where to Look for Specific Piecesο
SoC configuration:
soc/Board configuration:
board/Drivers:
drivers/OS abstraction:
os/Bootloader:
bootloader/TFLite Micro:
AI/andthird_party/Tools and scripts:
tools/App/Example inclusion logic:
examples/<BOARD>/CMakeLists.txt(uses appkconfigsymbols)
Build System Overviewο
The SDK supports two primary build entry points:
SDK root (
<sdk-root>): build the SDK package, bootloader, or TFLite Micro libraries.Examples folder (
<sdk-root>/examples): build applications, either app-only or combined SDK + app.
Out-of-tree builds are supported: keep your custom application in a separate folder and set SRSDK_DIR to the SDK root.
The build system is layered:
Make: orchestration and entry points (
Makefilein SDK root andexamples/).Kconfig: configuration UI and
.configgeneration.CMake: build generation.
Ninja: actual compilation and linking.
Key Build Conceptsο
Defconfig: Minimal config snapshot. Applied to produce
.config..config: Full configuration file, used to generate
config.hand build flags.config.h: Generated header consumed by C/C++ sources.
SDK package: Installed libraries and headers used by application builds.
SDK package installation: Produces a reusable SDK package (headers, libraries, toolchain CMake files, and
config.h) that application builds link against.
CMake Build Detailsο
This section describes the CMake flow at a practical level.
SDK Root CMake (core SDK builds)ο
Reads
build/config.hto loadCONFIG_*settings (generated from Kconfig).Uses those settings to select linker scripts and build flags.
Builds the SDK libraries and packages them for reuse.
Exports a CMake package under
examples/install/<BOARD>/lib/cmake/SynapticsSDK/.
Examples CMake (application builds)ο
Builds app targets named
${CONFIG_PROJECT}_${CONFIG_BUILD_TYPE}(for examplesr110_cm55_fw).BUILD=SRSDKbuilds the SDK package and the app together.BUILD=EXAMPLEuses the installed SDK package.Example apps are included when their
kconfigsymbol is enabled.USE_APP_CACHE=ON(default) uses a small perβapp cache of SDK headers/libs for faster rebuilds.
Configuration Model (Kconfig)ο
Where Configuration Livesο
SDK defconfigs:
configs/<BOARD>/*_defconfigApplication defconfigs:
examples/<BOARD>/configs/*_defconfig
Configuration Flowο
Apply a defconfig to generate
.config.(Optional) Modify using
menuconfig.Build generates
config.hand uses it for compilation.
The Makefiles use Python helpers under tools/scripts/kconfig/:
defconfig.pyapplies defconfigs.menuconfig.pylaunches the interactive menu.genconfig.pygeneratesconfig.h.savedefconfig.pywrites a minimal defconfig.
Key Defconfig Fieldsο
Common fields you will see in defconfigs:
CONFIG_PROJECT: Project family (e.g.,sr110,sl2610).CONFIG_BUILD_TYPE: Target type (e.g.,cm55_fw,cm52_fw,bootloader,tflite_micro).CONFIG_COMPILER: Toolchain selection (gcc,ac6,llvm).CONFIG_BOARD: Board name (e.g.,sr110_rdk,sl2610_rdk).CONFIG_BOARD_REV: Board revision (when applicable).
These values drive the build directory structure and output names.
CONFIG_COMPILER must match the active toolchain environment variables; use the same compiler for SDK and app builds.
Build Modesο
CONFIG_BUILD_MODE controls optimization and output directories:
release: optimized output, minimal logging.debug: debug symbols and extra logging.
Build modes map to output folders: release/ or debug/.
Note: Build types used in defconfigs are cm55_fw, cm52_fw, bootloader, and tflite_micro.
Build Workflowsο
SDK Root Builds (from <sdk-root>)ο
Use SDK root for bootloader, tflite, or SDK package builds.
Apply a defconfig:
make default_config BOARD=<BOARD>
Build SDK package:
make astrasdk BOARD=<BOARD>
Build bootloader or tflite:
make <bootloader_defconfig> BOARD=<BOARD>
make build
make <tflite_defconfig> BOARD=<BOARD>
make build
Application Builds (from <sdk-root>/examples)ο
Use examples to build applications.
Supported boards are defined in the Makefiles: currently SR110_RDK and SL2610_RDK.
Path tips: Use absolute paths for SRSDK_DIR and toolchain variables. On Windows, use escaped backslashes or forward slashes.
Combined SDK + App buildο
export SRSDK_DIR=<sdk-root>
make <app_defconfig> BOARD=<BOARD> BUILD=SRSDK
App-only build (uses installed SDK package)ο
export SRSDK_DIR=<sdk-root>
make build BOARD=<BOARD>
Build only the SDK package from examplesο
make astrasdk BOARD=<BOARD>
If you need to build the SDK package using the default SDK defconfig from the examples tree:
make default_config BOARD=<BOARD>
make astrasdk BOARD=<BOARD>
BUILD Mode (Application only)ο
BUILD=EXAMPLE(default): build the app using the installed SDK package.BUILD=SRSDK: build SDK package and the app in one flow (requiresSRSDK_DIR).BUILD=NONE: apply defconfig only (no build).
When to use:
Use BUILD=SRSDK for the first build, after SDK source changes, or when switching toolchains.
Use BUILD=EXAMPLE for faster iteration when only app code changes and the SDK package is already installed.
Build Multiple Applications with One SDK Packageο
If you want to build several applications against the same installed SDK:
cd <sdk-root>/examples
export SRSDK_DIR=<sdk-root>
make astrasdk BOARD=<BOARD>
make <app1>_defconfig BOARD=<BOARD>
make build BOARD=<BOARD>
make <app2>_defconfig BOARD=<BOARD>
make build BOARD=<BOARD>
Create a Custom Defconfig (Application)ο
Start from an existing defconfig:
make <app>_defconfig BOARD=<BOARD>
Open the configuration UI:
make advanced_menuconfig BOARD=<BOARD>
Save your new defconfig under
<BOARD>/configs/(for examplemy_custom_app_defconfig).make savedefconfig OUT=my_custom_app BOARD=<BOARD>
This writes
examples/<BOARD>/configs/my_custom_app_defconfig.
The new defconfig can then be used like any other:
make my_custom_app_defconfig BOARD=<BOARD> BUILD=SRSDK
Build Outputs and Artifactsο
SDK Root Outputsο
build/contains build artifacts andconfig.h(CMake build tree isbuild/<project>/<compiler>/).out/<target>/<mode>/contains SDK root binaries:GCC/LLVM:
<target>.elfand<target>.binAC6:
<target>.axfand<target>.bin
prebuilt/<PROJECT>/tflite_micro/<mode>/contains TFLM libs when buildingtflite_micro.
Application Outputsο
examples/out/<target>/<mode>/contains application binaries.GCC/LLVM:
<target>.elfand<target>.binAC6:
<target>.axfand<target>.bin
examples/build/<project>/<compiler>/contains the example CMake build tree.examples/build/<project>/<compiler>/srsdk_build/.cache/is the app-local SDK cache (auto-managed; refreshed when SDK content changes). Disable withUSE_APP_CACHE=OFFif needed.examples/install/<BOARD>/contains the installed SDK package:include/SDK headerslib/SDK librariesconfig.htools/cmake/SDK CMake toolchain modules used by the app build
The installed package also provides CMake package files under:
examples/install/<BOARD>/lib/cmake/SynapticsSDK/
Generated Config Headersο
build/config.hin SDK root: generated from SDK.config.examples/build/config.h: example-local config overrides (if generated).examples/build/example_config.h: example-specific header for overrides.
Target naming:
<target>is${CONFIG_PROJECT}_${CONFIG_BUILD_TYPE}(for examplesr110_cm55_fworsl2610_cm52_fw).<mode>isreleaseordebug, based onCONFIG_BUILD_MODE.
Image Generationο
SR110 Image Generation (SRSDK Image Generator)ο
Tool: tools/srsdk_image_generator/srsdk_image_generator.py
Required: Python 3.13 venv active and tools/srsdk_image_generator/requirements.txt installed.
Typical command (from <sdk-root>/tools/srsdk_image_generator):
cd <sdk-root>/tools/srsdk_image_generator
python srsdk_image_generator.py \
-B0 \
-flash_image \
-sdk_secured \
-spk "<sdk-root>/tools/srsdk_image_generator/B0_Input_examples/spk_rc4_1_0_secure_otpk.bin" \
-apbl "<sdk-root>/tools/srsdk_image_generator/B0_Input_examples/sr100_b0_bootloader_ver_0x012F_ASIC.axf" \
-m55_image "<sdk-root>/examples/out/sr110_cm55_fw/release/sr110_cm55_fw.elf" \
-flash_type "GD25LE128" \
-flash_freq "67"
Output (example):
<sdk-root>/tools/srsdk_image_generator/Output/B0_Flash/B0_flash_full_image_GD25LE128_67Mhz_secured.bin
Key flags:
-flash_imageor-host_image: choose flash or host image output.-sdk_secured/-sdk_non_secured: SDK security mode.-model_secured/-model_non_secured: model security mode.-spk,-apbl,-m55_image: required inputs for SR110.-flash_type,-flash_freq: flash configuration (types:GD25LE128,W25Q128,MX25U128; frequencies:34,67,100,134MHz).-m4_image,-npu_c_image,-model: additional payloads for multi-core or model flows.-single_slot: generate a single-slot image layout.-json_attr/-parse_attr: use JSON-based flash attributes.-Q4: flash 4-bit support (1/0).
SL2610 Image Generation (Image Generator)ο
Tool: tools/image_gen/image_generator.py
Required: Python 3.13 venv active.
Note: SL2610 image generation is not supported on native Windows.
Windows users should use WSL for image generation.
In the WSL environment, install required tools such as Python, make, and the Arm GNU toolchain.
You can use the VS Code extensionβs Tools Installer from WSL, or follow
Linux Environment guide for CLI setup.
Recommended entry:
cd <sdk-root>/examples
make imagegen
This runs a two-step pipeline:
tools/image_gen/image_generator.pyto generate raw images usingtools/image_gen/inp.json.tools/scripts/image/build_preboot_mcu.pyto package sub-images for USB boot and eMMC workflows.
Final outputs:
examples/out/image/intermediate/sysmgr.subimgexamples/out/image/eMMCimg/examples/out/image/usb_boot/
Intermediate outputs from image generation:
examples/out/nexus_bin/examples/out/nexus_loadable/
If you need to change inputs, update tools/image_gen/inp.json. Paths in this file are relative to examples/out/.
The preboot packaging step uses signing keys under tools/signingKeys/<soc>/ and SPK assets for USB boot images.
If you see permission errors on Linux/macOS:
cd <sdk-root>/examples
chmod +x tools/scripts/image/bin/gen*
Flashingο
SR110 (OpenOCD Flash Script)ο
Tool: tools/openocd/scripts/flash_xspi_tcl.py
OpenOCD config files live under tools/openocd/configs/. For SR110, sr110_m55.cfg is the standard config.
Example (from <sdk-root>):
cd <sdk-root>
python tools/openocd/scripts/flash_xspi_tcl.py \
--cfg_path tools/openocd/configs/sr110_m55.cfg \
--image tools/srsdk_image_generator/Output/B0_Flash/B0_flash_full_image_GD25LE128_67Mhz_secured.bin \
--erase-all
Key options:
--cfg_path(required): OpenOCD config file--image: Binary image to program--erase-all: Full chip erase--verify-only: Verify contents without programming--probe: Select probe (defaultcmsis-dap, usejlinkfor J-Link)--openocd: Path to OpenOCD binary--flash-offset: Flash offset for programming--file-offset: Offset into image file--erase-only: Erase only, no programming--log-level: DEBUG/INFO/WARN/ERROR--tcl_port,--tcl_host: OpenOCD TCL interface settingsUse
--probe jlink(or--probe cmsis-dap) to select the adapter driver.
SL2610 (USB Boot Tool)ο
Tool: tools/usb_boot_python_tool/USB_BOOT_TOOL/usb_boot_tool.py
Required: Python 3.13 venv active and pyserial installed.
Enter USB boot mode first:
Press and hold USB_BOOT, then press RESET.
Release RESET, then release USB_BOOT.
Run System Manager (from <sdk-root>/tools/usb_boot_python_tool/USB_BOOT_TOOL):
cd <sdk-root>/tools/usb_boot_python_tool/USB_BOOT_TOOL
python usb_boot_tool.py --op run-sm \
--sm <sdk-root>/examples/out/image/intermediate/sysmgr.subimg \
--spk <sdk-root>/examples/out/image/usb_boot/spk.bin \
--keys <sdk-root>/examples/out/image/usb_boot/key.bin \
--m52bl <sdk-root>/examples/out/image/usb_boot/m52bl.bin
Full eMMC flashing:
python usb_boot_tool.py --op emmc --img-dir <path-to-eMMCimg>
Notes:
--op emmcrequires a Yocto-generatedeMMCimgfolder withemmc_part_listandemmc_image_list.If
run-smfails because SM CDC is already running, power-cycle the board and retry.
Where to Run Commandsο
Use the table below to choose the correct working directory.
Command or Task |
Run From |
Notes |
|---|---|---|
|
|
Applies SDK default defconfig |
|
|
SDK bootloader build (follow with |
|
|
SDK TFLite build (follow with |
|
|
Builds and installs SDK package |
|
|
Combined SDK + app build |
|
|
App-only build (requires |
|
|
SL2610 image generation pipeline |
|
|
SR110 image generation |
|
|
SR110 flashing (OpenOCD) |
|
|
SL2610 USB boot flashing |
Applications (Modify or Create)ο
Modify an existing appο
Update sources under
examples/<BOARD>/<app>/.If you change configuration options, re-run the app defconfig and rebuild:
cd <sdk-root>/examples
export SRSDK_DIR=<sdk-root>
make <app>_defconfig BOARD=<BOARD>
make build BOARD=<BOARD>
Create a new app (minimal checklist)ο
Create
examples/<BOARD>/<app>/with your sources undersrc/.Add
examples/<BOARD>/<app>/kconfigwith aconfigsymbol.Add
examples/<BOARD>/configs/<app>_defconfigand enable the app symbol (CONFIG_<APP_SYMBOL>=y).Add
examples/<BOARD>/<app>/CMakeLists.txtto add sources to${TARGET}.Build from
examples/:
cd <sdk-root>/examples
export SRSDK_DIR=<sdk-root>
make <app>_defconfig BOARD=<BOARD> BUILD=SRSDK
make build BOARD=<BOARD>
Minimal kconfig:
config <APP_SYMBOL>
bool "Enable <app>"
default y
Minimal CMakeLists.txt (pattern used by existing examples):
if(CONFIG_<APP_SYMBOL>)
if(${BUILD} STREQUAL "EXAMPLE")
target_sources(${TARGET} PRIVATE
${CMAKE_CURRENT_LIST_DIR}/src/main.c
)
target_include_directories(${TARGET} PUBLIC
${CMAKE_CURRENT_LIST_DIR}
)
else()
target_include_directories(sdk_includes INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
)
endif()
endif()
Notes:
Use
cm55_<app>_defconfig(SR110) orcm52_<app>_defconfig(SL2610).The board-level
examples/<BOARD>/CMakeLists.txtauto-includes apps whosekconfigsymbol is enabled.
Common mistakes:
Defconfig not found: confirm
examples/<BOARD>/configs/andBOARDmatch.App not built: ensure
CONFIG_<APP_SYMBOL>=yis set in the app defconfig.App directory skipped: ensure the app folder has a
kconfigfile with aconfigsymbol.Missing sources: ensure
CMakeLists.txtlists all files undersrc/.Wrong output target: check
CONFIG_PROJECTandCONFIG_BUILD_TYPE.
Command Referenceο
SDK Root (<sdk-root>)ο
Command |
Purpose |
Result |
|---|---|---|
|
Show available targets |
Prints target list |
|
List SDK defconfigs |
Console list |
|
Apply default SDK defconfig |
|
|
Apply specific SDK defconfig |
|
|
Edit SDK config |
|
|
Generate |
|
|
Build current SDK target (bootloader/TFLM/firmware) |
Use when you need the target binary only; outputs in |
|
Build and install SDK package |
Use when you need the SDK package for app builds; updates |
|
Save minimal SDK defconfig |
|
|
Remove build artifacts |
|
|
Run cppcheck |
Console output |
Applications (<sdk-root>/examples)ο
Command |
Purpose |
Result |
|---|---|---|
|
Show available targets |
Prints target list |
|
List valid boards |
Console list |
|
List example defconfigs |
Console list |
|
Apply app defconfig |
|
|
Combined SDK + app build |
SDK installed + app built |
|
Apply defconfig only |
|
|
App-only build |
Use for fast iteration with installed SDK; app binary in |
|
Build SDK for example (combined flow) |
Internal step used by |
|
Build app with advanced config |
Internal step used by |
|
SDK build + app build |
Runs |
|
Edit example-only config |
|
|
SDK + example config |
|
|
Generate SDK + example config headers |
|
|
Generate example config headers |
|
|
Apply default SDK defconfig |
|
|
Build and install SDK package |
|
|
Build and install SDK package using current example config |
Use when you need an app-tailored SDK without building the app |
|
Generate SL2610 images |
Image outputs in |
|
Apply defconfig without building |
|
|
Save minimal defconfig |
|
|
Run cppcheck |
Console output |
|
Remove example build outputs |
|
|
Remove installed SDK package |
|
|
Alias for |
|
Notes:
build_sdkandbuild_advancedare typically invoked by the defconfig flow and requireSRSDK_DIRto be set.BUILD=NONEcan be used to apply defconfig without building.
Python Toolsο
Tool |
Location |
Purpose |
|---|---|---|
|
|
SR110 image generation |
|
|
SL2610 image generation |
|
|
SL2610 sub-image packaging |
|
|
SR110 flashing (OpenOCD) |
|
|
SL2610 USB boot flashing |
|
|
Defconfig/menuconfig/genconfig helpers |
Tools Overview (Non-VS Code)ο
tools/openocd/: OpenOCD configs and flashing scripts for SR110.tools/usb_boot_python_tool/: USB boot flashing tool for SL2610.tools/image_gen/: SL2610 image generator andinp.jsonconfiguration.tools/srsdk_image_generator/: SR110 image generator and input examples.tools/Inference/: Model conversion and inference helpers (see its README).tools/JLink_Scripts/: J-Link scripts for debugging/programming.tools/Debug_IC_FW/: Debug firmware support assets.examples/tools/signingKeys/: Signing keys used by SL2610 preboot packaging.tools/SPK/: SPK assets used by secure image flows.
Note: Some tools have their own dependency requirements (for example tools/Inference/). Follow the tool-specific README when using them.
Troubleshootingο
Build and Configuration Issuesο
SRSDK_DIRnot set (examples + SDK combined build fails)Fix:
export SRSDK_DIR=<sdk-root>beforeBUILD=SRSDKoradvanced_menuconfig.
Build and Deploy button disabled in VS Code
Cause: Examples directory not imported or
SRSDK_DIRnot set.Fix: import the SDK
examples/folder, setSRSDK_DIRvia Import SDK, then refresh the workspace (close and reopen VS Code).
App-only build fails because SDK package is missing
Fix: build and install the SDK first with
make astrasdk BOARD=<BOARD>(from SDK root or examples).
Toolchain not found
Fix: ensure the correct toolchain env variable is set and the toolchain is on PATH.
Example:
GCC_TOOLCHAIN_13_2_1=/opt/gcc-arm-none-eabi/bin.
LLVM build fails due to missing sysroot
Fix: set
GCC_TOOLCHAIN_ROOTto the GCC toolchain root.
menuconfigfails on LinuxFix: install
libncurses5-devand related packages per the Linux build_env guide.
defconfignot foundFix: verify the
BOARDmatches the directory underconfigs/orexamples/<BOARD>/configs/.
config.hmissing or staleFix: run
make genconfig(SDK root) or rebuild from examples to regenerate.
TFLite Micro library not found
Fix: ensure
prebuilt/<PROJECT>/tflite_micro/<mode>/contains the lib, or rebuildtflite_micro.If NPU is enabled, TFLM library is required.
Python / Image Generation Issuesο
Python version mismatch
Fix: activate the SDK virtual environment and verify
python --versionis 3.13.x.
Missing Python packages
Fix:
pip install -r tools/srsdk_image_generator/requirements.txt.
Imagegen permission errors (Linux/macOS)
Fix:
chmod +x tools/scripts/image/bin/gen*.
Flashing Issuesο
OpenOCD not found
Fix: install OpenOCD and ensure it is in PATH.
OpenOCD cannot connect to target
Fix: check cable, power, and probe selection (
--probe cmsis-dapor--probe jlink).
WSL USB device not visible
Fix: follow the Astra MCU SDK - WSL User Guide for USB pass-through.
SL2610 USB boot fails
Fix: re-enter USB boot mode (USB_BOOT + RESET), then retry.
Build Output Issuesο
App builds but image generation fails
Fix: confirm output
.elfexists inexamples/out/and update image generator input paths.
App/Example build does not pick up new SDK headers/libs
Fix: clean the app cache (
rm -rf examples/build/<target>/<compiler>/srsdk_build/.cache) or disable it by configuring withUSE_APP_CACHE=OFF.
Link errors from mixed toolchains
Fix: ensure SDK and app are both built with the same compiler (GCC, AC6, or LLVM).