<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/getting-started-with-zephyr-ota-updates-with-spotflow-2sifo4pkm" -->

---
title: Getting Started With Zephyr: OTA Updates with Spotflow
description: This walkthrough shows how to set up over-the-air firmware updates on a Zephyr-based nRF7002-DK using Spotflow. The author hits a Kconfig warning about MBEDTLS...
canonical: https://daily.dev/posts/getting-started-with-zephyr-ota-updates-with-spotflow-2sifo4pkm
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Getting Started With Zephyr: OTA Updates with Spotflow | daily.dev
og:description: This walkthrough shows how to set up over-the-air firmware updates on a Zephyr-based nRF7002-DK using Spotflow. The author hits a Kconfig warning about MBEDTLS...
og:url: https://daily.dev/posts/getting-started-with-zephyr-ota-updates-with-spotflow-2sifo4pkm
og:image: https://api.daily.dev/og/posts/2Sifo4pKm.png
og:image:alt: Getting Started With Zephyr: OTA Updates with Spotflow
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Getting Started With Zephyr: OTA Updates with Spotflow

**[EmbeddedRelated](https://daily.dev/sources/embeddedrelated)** · 12 min read · 0 upvotes · 0 comments

## Summary

This walkthrough shows how to set up over-the-air firmware updates on a Zephyr-based nRF7002-DK using Spotflow. The author hits a Kconfig warning about MBEDTLS dependencies, then a FLASH overflow of 249,244 bytes once WiFi and OTA support are enabled. The fix moves the candidate update image to external flash via Kconfig.sysbuild, sysbuild.cmake, and devicetree overlay changes for the mx25r64 flash chip. After uploading a new firmware version to Spotflow and starting a deployment, MCUboot swaps in the new image and the device reboots running v1.0, confirmed successful in the Spotflow dashboard.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.embeddedrelated.com/showarticle/1818.php>

## Questions this post answers

### How do I fix a 'region FLASH overflowed' error when enabling OTA and WiFi on a Zephyr nRF7002DK build?

Move the OTA candidate image to external flash instead of internal flash. Add CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=y in Kconfig.sysbuild, create a sysbuild.cmake enabling SPI_NOR and MCUboot's external driver check, and add a devicetree overlay setting the mx25r64 chip as the nordic,pm-ext-flash chosen node.

_Developers wiring up OTA on flash-constrained boards can track these Zephyr memory tricks on daily.dev._

### Why does my Zephyr build fail with MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG_ALLOW_NON_CSPRNG dependency errors on the nRF7002DK?

This Kconfig warning appears when building Spotflow's OTA sample on the nRF7002DK because the WiFi driver's required Kconfig (WIFI_NRF70) isn't set for the board. Creating a Kconfig.sysbuild file with 'config WIFI_NRF70 default y if BOARD_NRF7002DK || BOARD_THINGY53' alongside sourcing Zephyr's sysbuild Kconfig resolves the dependency chain.

_Anyone debugging Zephyr Kconfig dependency errors on Nordic boards can find fixes like this on daily.dev._

### How does MCUBoot confirm a firmware swap succeeded after an OTA update on Zephyr?

MCUBoot logs the swap type and image state during boot, showing 'Secondary image: magic=good, swap_type=0x2' before performing a 'move algorithm' swap. After reboot, the new firmware runs with an updated log message, and the boot log shows 'Swap type: revert', confirming the test-then-confirm update flow completed.

_Teams validating OTA rollback safety with MCUBoot can keep up with these implementation details on daily.dev._

## Similar posts on daily.dev

- [Can Spotflow Solve Remote Debugging for Embedded Systems?](https://daily.dev/posts/can-spotflow-solve-remote-debugging-for-embedded-systems--qupvhq2mj) · EmbeddedRelated · 0 upvotes · 0 comments
- [Simplifying Embedded System Design with a Modern Software Ecosystem](https://daily.dev/posts/simplifying-embedded-system-design-with-a-modern-software-ecosystem-jr0ummxbk) · Embedded.com · 0 upvotes · 0 comments
- [My device crashed in the field. How do I figure out why?](https://daily.dev/posts/my-device-crashed-in-the-field-how-do-i-figure-out-why--kaigqs2zu) · EmbeddedRelated · 0 upvotes · 0 comments
- [Agentic Zephyr Development: Build, Flash, Fix with AI](https://daily.dev/posts/agentic-zephyr-development-build-flash-fix-with-ai-rrg7hkhg8) · Beningo Embedded Group · 1 upvotes · 0 comments

---

Tags: [#embedded](https://daily.dev/tags/embedded)

[View this post on daily.dev](https://daily.dev/posts/getting-started-with-zephyr-ota-updates-with-spotflow-2sifo4pkm)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Getting Started With Zephyr: OTA Updates with Spotflow","url":"https://daily.dev/posts/getting-started-with-zephyr-ota-updates-with-spotflow-2sifo4pkm","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/getting-started-with-zephyr-ota-updates-with-spotflow-2sifo4pkm"},"datePublished":"2026-10-28T22:29:48.364Z","dateModified":"2026-10-28T23:16:11.943Z","description":"This walkthrough shows how to set up over-the-air firmware updates on a Zephyr-based nRF7002-DK using Spotflow. The author hits a Kconfig warning about MBEDTLS...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/1da0d7e3f42e7edfc714fd43318a1b67?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/1da0d7e3f42e7edfc714fd43318a1b67?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"EmbeddedRelated","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"EmbeddedRelated","logo":"https://media.daily.dev/image/upload/s--OVGOU0Ec--/f_auto,q_auto/v1780213554/logos/embeddedrelated?_a=BAMAMiWQ0","url":"https://daily.dev/sources/embeddedrelated"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/getting-started-with-zephyr-ota-updates-with-spotflow-2sifo4pkm","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"embedded","timeRequired":"PT12M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"EmbeddedRelated","item":"https://daily.dev/sources/embeddedrelated"},{"@type":"ListItem","position":3,"name":"Getting Started With Zephyr: OTA Updates with Spotflow"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/getting-started-with-zephyr-ota-updates-with-spotflow-2sifo4pkm#faq","mainEntity":[{"@type":"Question","name":"How do I fix a 'region FLASH overflowed' error when enabling OTA and WiFi on a Zephyr nRF7002DK build?","acceptedAnswer":{"@type":"Answer","text":"Move the OTA candidate image to external flash instead of internal flash. Add CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=y in Kconfig.sysbuild, create a sysbuild.cmake enabling SPI_NOR and MCUboot's external driver check, and add a devicetree overlay setting the mx25r64 chip as the nordic,pm-ext-flash chosen node. Developers wiring up OTA on flash-constrained boards can track these Zephyr memory tricks on daily.dev."}},{"@type":"Question","name":"Why does my Zephyr build fail with MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG_ALLOW_NON_CSPRNG dependency errors on the nRF7002DK?","acceptedAnswer":{"@type":"Answer","text":"This Kconfig warning appears when building Spotflow's OTA sample on the nRF7002DK because the WiFi driver's required Kconfig (WIFI_NRF70) isn't set for the board. Creating a Kconfig.sysbuild file with 'config WIFI_NRF70 default y if BOARD_NRF7002DK || BOARD_THINGY53' alongside sourcing Zephyr's sysbuild Kconfig resolves the dependency chain. Anyone debugging Zephyr Kconfig dependency errors on Nordic boards can find fixes like this on daily.dev."}},{"@type":"Question","name":"How does MCUBoot confirm a firmware swap succeeded after an OTA update on Zephyr?","acceptedAnswer":{"@type":"Answer","text":"MCUBoot logs the swap type and image state during boot, showing 'Secondary image: magic=good, swap_type=0x2' before performing a 'move algorithm' swap. After reboot, the new firmware runs with an updated log message, and the boot log shows 'Swap type: revert', confirming the test-then-confirm update flow completed. Teams validating OTA rollback safety with MCUBoot can keep up with these implementation details on daily.dev."}}]}
```

