Migrating from neuralSPOT¶
This page describes the high-level migration path from legacy neuralSPOT to
NSX.
The immediate goal is not one-to-one package parity. The immediate goal is a clean, modular replacement for the core bring-up, build, profiling, and device integration layers that matter for current Ambiq bare-metal workflows.
After that baseline is solid, useful legacy capabilities can move over as optional NSX modules with cleaner boundaries and fewer baked-in assumptions.
Migration Strategy¶
The current migration strategy is:
- Migrate core platform capabilities first.
- Preserve important capabilities rather than preserving every legacy package boundary.
- Split large opinionated legacy modules into smaller first-class NSX modules when that improves reuse.
- Keep starter profiles narrow and predictable.
- Move app-specific or optional stacks into optional modules rather than the baseline.
In practice this means NSX is intentionally starting with:
- board and SoC wiring
- runtime init and harness support
- bus wrappers and peripheral helpers
- performance and PMU instrumentation
- a small, inspectable app workflow
It does not yet aim to carry every legacy application stack into the default NSX experience.
What "Migrate Core" Means¶
For NSX, the current "core" migration target is the baseline required to:
- create an app
- configure and build it reproducibly
- flash and inspect it on hardware
- bring up common board peripherals
- run profiling and instrumentation workflows
That is why the first migration wave emphasizes modules such as:
nsx-corensx-harnessnsx-utilsnsx-perfnsx-pmu-armv8mnsx-peripheralsnsx-powernsx-i2cnsx-spinsx-uartnsx-soc-halnsx-cmsis-startupnsx-ambiq-hal-r*nsx-ambiq-bsp-r*
Refactoring Direction¶
Legacy neuralSPOT modules were useful, but several carried extra assumptions
about examples, transport choices, power behavior, or application structure.
The NSX direction is to keep the useful parts while making modules less opinionated:
- split mixed-purpose utility bundles into focused modules
- prefer explicit metadata and dependency closure over implicit coupling
- keep board and SDK specifics in wrapper modules
- keep optional connectivity, sensor, and ML stacks out of the baseline unless they are broadly useful
- favor small stable APIs that can be reused across smoke tests, examples, and product code
Examples already visible in the current module set:
- legacy PMU and perf helpers were separated from
ns-utilsintonsx-pmu-armv8mandnsx-perf - legacy power functionality now has a first-class home in
nsx-power - platform SDK consumption is split across provider, HAL, BSP, startup, and SoC integration modules instead of being buried inside app code
Migration Matrix¶
The table below maps the major legacy neuralSPOT module areas to their
current NSX status.
Status definitions:
Migrated: a clear first-class NSX replacement exists.Split: the legacy capability exists, but is intentionally distributed across multiple NSX modules.Partial: some capability exists, but there is not yet a complete first-class replacement.Future: no first-class NSX replacement exists yet.
| Legacy module | NSX status | Current NSX home | Notes |
|---|---|---|---|
ns-core |
Migrated | nsx-core |
Core runtime and bring-up surface are present. |
ns-harness |
Migrated | nsx-harness |
Print, debug, and profiling-adjacent harness support are present. |
ns-i2c |
Migrated | nsx-i2c |
Bus wrapper and register-driver helpers are available. |
ns-spi |
Migrated | nsx-spi |
SPI wrapper support is available. |
ns-uart |
Migrated | nsx-uart |
UART wrapper support is available. |
ns-features |
Partial | ns-features |
The legacy features area has a module directory but has not been fully migrated to the NSX module system. |
ns-peripherals |
Split | nsx-peripherals, nsx-power |
Generic peripherals and power policy were separated into clearer modules. |
ns-utils |
Split | nsx-utils, nsx-perf, nsx-pmu-armv8m, nsx-power |
Legacy utilities bundled several concerns that are now being separated. |
ns-ble |
Partial | no first-class nsx-ble yet |
BLE-related code exists in add-on areas, but not as a clean first-class NSX module. |
ns-usb |
Migrated | nsx-usb |
USB CDC serial driver using TinyUSB with proper error handling. |
ns-imu |
Partial | sensor and physiokit modules | Pieces exist, but there is not yet a broad migration-equivalent IMU module. |
ns-audio |
Migrated | nsx-audio |
PDM audio capture driver with DMA-backed sampling and callback delivery. |
ns-camera |
Future | none yet | Candidate optional camera or sensor module. |
ns-ipc |
Future | none yet | Candidate utility module if ring-buffer or IPC patterns remain broadly useful. |
ns-model |
Future | none yet | Candidate model/runtime integration module once the baseline is stable. |
ns-nnsp |
Future | none yet | Candidate optional signal or speech-processing module rather than baseline. |
ns-rpc |
Future | none yet | Candidate optional transport or RPC module. |
Recommended Migration Order¶
The recommended migration order is:
- finish hardening the core baseline
- finish module vendoring, registration, and update workflows
- migrate broadly useful optional modules next
- migrate more specialized application stacks only when they provide clear reusable value
More concretely, the next module waves should look like this.
Wave 1: Core Baseline¶
Focus here first.
- core runtime and harness behavior
- profiling and PMU support
- board, BSP, HAL, startup, and SoC packaging
- utility cleanup and power behavior
- clean module management through the NSX CLI
Wave 2: Useful Optional Modules¶
These are good follow-on targets once the baseline is stable.
- USB
- BLE
- RPC or transport helpers
- IMU or sensor abstraction
- audio capture
- model/runtime integration
These should generally land as optional first-class modules rather than as part of the starter baseline.
Wave 3: Specialized Legacy Stacks¶
These are useful only if they still support real downstream products or demos.
- camera
- NNSP-specific stacks
- narrowly targeted legacy wrappers
The bar here should be higher. If a legacy module is too application-specific or too tightly coupled to old assumptions, it may be better to redesign it than to migrate it directly.
Decision Rules for Future Migrations¶
Before migrating a legacy module, ask:
- does it help lightweight bare-metal NSX apps?
- is it generic enough to serve more than one app or demo?
- can it be expressed with a smaller and less opinionated API surface?
- is it better as an optional module than as a baseline dependency?
- does it fit the NSX module model cleanly?
If the answer is mostly yes, it is a good migration candidate.
Current Recommendation¶
NSX is already far enough along to replace the legacy neuralSPOT core for:
- board bring-up
- smoke tests
- build, flash, and view workflows
- common peripheral access
- profiling and PMU instrumentation
The next phase should not chase broad legacy parity for its own sake.
The next phase should:
- keep tightening the core replacement
- migrate the most useful optional modules next
- use migration as an opportunity to simplify and reduce assumptions in old module boundaries
For a lower-level module-by-module tracking view, see the internal coverage page in Internal Module Coverage.