<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Code relocation to the external flash with Mcuboot</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/125871/code-relocation-to-the-external-flash-with-mcuboot</link><description>Hello, 
 I am using edge impulse library to achieve on-device classification. I now want to put the edge impulse related code to the external flash and use XIP function there rather than placing them inside my internal flash. I have learned something</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Thu, 27 Nov 2025 21:55:09 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/125871/code-relocation-to-the-external-flash-with-mcuboot" /><item><title>RE: Code relocation to the external flash with Mcuboot</title><link>https://devzone.nordicsemi.com/thread/555672?ContentTypeID=1</link><pubDate>Thu, 27 Nov 2025 21:55:09 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4f2995f8-c21a-4b18-aa2f-6bf6f339407b</guid><dc:creator>PjGlasso</dc:creator><description>&lt;p&gt;Hi there,&lt;/p&gt;
&lt;p&gt;Here are the practical ways to do that.&lt;/p&gt;
&lt;h2 id="mcetoc_1jb3khivp2" data-start="440" data-end="494"&gt;1. Factory / dev-time: flash QSPI as a second image&lt;/h2&gt;
&lt;p data-start="496" data-end="704"&gt;&lt;strong data-start="496" data-end="505"&gt;Idea:&lt;/strong&gt;&lt;br data-start="505" data-end="508" /&gt; Keep MCUboot + main app in internal flash only. Put the Edge Impulse model / code that lives in external flash into a &lt;em data-start="626" data-end="636"&gt;separate&lt;/em&gt; .hex/.bin and flash that directly to QSPI at the fixed XIP address.&lt;/p&gt;
&lt;h3 id="mcetoc_1jb3khivp3" data-start="706" data-end="715"&gt;Steps&lt;/h3&gt;
&lt;ol data-start="717" data-end="2447"&gt;
&lt;li data-start="717" data-end="1081"&gt;
&lt;p data-start="720" data-end="785"&gt;&lt;strong data-start="720" data-end="785"&gt;Define the external flash in devicetree and partition manager&lt;/strong&gt;&lt;/p&gt;
&lt;p data-start="790" data-end="873"&gt;In &lt;code data-start="793" data-end="806"&gt;app.overlay&lt;/code&gt;, make sure the QSPI flash is enabled and marked as external flash:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;&amp;amp;mx25r64 {
    status = &amp;quot;okay&amp;quot;;
};

/ {
    chosen {
        nordic,pm-ext-flash = &amp;amp;mx25r64;
    };
};
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;(Use the actual node name for the chip on their board.)&lt;/p&gt;
&lt;p&gt;2.&amp;nbsp;&lt;strong data-start="1086" data-end="1126"&gt;Use Zephyr&amp;rsquo;s code relocation for XIP&lt;/strong&gt;&lt;br data-start="1126" data-end="1129" /&gt; What you already have is basically right:&lt;/p&gt;
&lt;div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"&gt;
&lt;div class="sticky top-9"&gt;
&lt;div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"&gt;
&lt;div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"&gt;&lt;pre class="ui-code" data-mode="text"&gt;zephyr_code_relocate(FILES src/feature/gait_analysis.c LOCATION EXTFLASH_TEXT NOCOPY)
zephyr_code_relocate(FILES src/feature/gait_analysis.c LOCATION EXTFLASH_RODATA NOCOPY)
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"&gt;And a custom linker script that puts &lt;code data-start="1416" data-end="1431"&gt;EXTFLASH_TEXT&lt;/code&gt; / &lt;code data-start="1434" data-end="1451"&gt;EXTFLASH_RODATA&lt;/code&gt; at the QSPI address.&lt;/div&gt;
&lt;div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"&gt;&lt;/div&gt;
&lt;div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"&gt;3.&lt;strong data-start="1477" data-end="1527"&gt;Generate a separate image for the QSPI content&lt;/strong&gt;
&lt;p data-start="1532" data-end="1676"&gt;After building, use &lt;code data-start="1552" data-end="1575"&gt;arm-none-eabi-objcopy&lt;/code&gt; (or &lt;code data-start="1580" data-end="1592"&gt;west build&lt;/code&gt; artifacts) to extract &lt;strong data-start="1615" data-end="1623"&gt;only&lt;/strong&gt; the external-flash sections into a second .hex/.bin:&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="overflow-y-auto p-4" dir="ltr"&gt;&lt;pre class="ui-code" data-mode="text"&gt;# Example: create a secondary hex for QSPI contents
arm-none-eabi-objcopy \
    -O ihex build/zephyr/zephyr.elf \
    --only-section=.extflash_text \
    --only-section=.extflash_rodata \
    extflash_model.hex
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="overflow-y-auto p-4" dir="ltr"&gt;(Section names depend on how &lt;code data-start="1958" data-end="1973"&gt;EXTFLASH_TEXT&lt;/code&gt;/&lt;code data-start="1974" data-end="1991"&gt;EXTFLASH_RODATA&lt;/code&gt; are defined.)&lt;/div&gt;
&lt;div class="overflow-y-auto p-4" dir="ltr"&gt;&lt;/div&gt;
&lt;div class="overflow-y-auto p-4" dir="ltr"&gt;4.&lt;strong data-start="2010" data-end="2044"&gt;Program both images separately&lt;/strong&gt;
&lt;ul data-start="2049" data-end="2339"&gt;
&lt;li data-start="2049" data-end="2174"&gt;
&lt;p data-start="2051" data-end="2082"&gt;Internal flash (MCUboot + app):&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;west flash  # or nrfjprog --program app_mcuboot.hex --chiperase
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;External QSPI contents (at correct ORIGIN, e.g. &lt;code data-start="2229" data-end="2241"&gt;0x10120000&lt;/code&gt;):&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;nrfjprog --program extflash_model.hex --verify --sectorerase --qspi
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Or configure a custom &lt;code data-start="2366" data-end="2408"&gt;west flash --hex-file extflash_model.hex&lt;/code&gt; runner that knows how to talk to QSPI.&lt;/p&gt;
&lt;p&gt;RESULT:&lt;/p&gt;
&lt;p&gt;MCUboot image stays within its partition size, and QSPI holds the model/code at a fixed address. No more &lt;code data-start="2568" data-end="2630"&gt;Image size (0x10110be8) + trailer ... exceeds requested size&lt;/code&gt; because those XIP sections are &lt;em data-start="2662" data-end="2667"&gt;not&lt;/em&gt; counted inside the MCUboot image anymore.&lt;/p&gt;
&lt;p&gt;Use a proper SPLIT image to update via DFU the Image Model , Nordic has QSPI XIP split-image feature. &lt;span class="emoticon" data-url="https://devzone.nordicsemi.com/cfs-file/__key/system/emoji/270c.svg" title="V"&gt;&amp;#x270c;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;HTH&lt;/p&gt;
&lt;p&gt;GL :-) PJ :v:&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Code relocation to the external flash with Mcuboot</title><link>https://devzone.nordicsemi.com/thread/555671?ContentTypeID=1</link><pubDate>Thu, 27 Nov 2025 21:40:56 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c4ca9bff-b163-4802-960e-e06f722ae9b7</guid><dc:creator>PjGlasso</dc:creator><description>&lt;p&gt;Hi there,&lt;/p&gt;
&lt;p data-start="4792" data-end="4816"&gt;The error you&amp;rsquo;re seeing:&lt;/p&gt;
&lt;p data-start="4821" data-end="4895"&gt;&lt;code data-start="4821" data-end="4895"&gt;Image size (0x10110be8) + trailer (0x630) exceeds requested size 0xe0000&lt;/code&gt;&lt;/p&gt;
&lt;p data-start="4900" data-end="5058"&gt;comes from the way MCUboot calculates the image size. It uses the lowest and highest load addresses in the linked image (&lt;code data-start="5021" data-end="5036"&gt;__rom_start__&lt;/code&gt; and &lt;code data-start="5041" data-end="5054"&gt;__rom_end__&lt;/code&gt;).&lt;/p&gt;
&lt;p data-start="5065" data-end="5331"&gt;Because your XIP sections are linked into external flash at &lt;code data-start="5125" data-end="5137"&gt;0x10120000&lt;/code&gt;, the linker now thinks your application image runs from internal flash up to &lt;code data-start="5215" data-end="5227"&gt;0x1012xxxx&lt;/code&gt;, so the &amp;ldquo;image size&amp;rdquo; becomes enormous. That&amp;rsquo;s why it no longer fits into the configured slot (0xE0000).&lt;/p&gt;
&lt;p data-start="5336" data-end="5474"&gt;MCUboot doesn&amp;rsquo;t support a single signed image that spans both internal flash and an external XIP region like that. The usual patterns are:&lt;/p&gt;
&lt;ol data-start="5479" data-end="5813"&gt;
&lt;li data-start="5479" data-end="5629"&gt;
&lt;p data-start="5482" data-end="5629"&gt;Keep the MCUboot-managed image entirely in internal flash, and treat the QSPI/XIP region as a separate asset that you program/update independently.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="5632" data-end="5811"&gt;
&lt;p data-start="5635" data-end="5811"&gt;Use NCS Partition Manager to define an external-flash partition and build the XIP code as another image or artifact, updated via a second DFU alt-setting or a custom mechanism.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-start="5816" data-end="6088"&gt;If you must keep MCUboot + dfu-util, the simplest fix is to move your XIP code out of the MCUboot image: don&amp;rsquo;t let the external flash &lt;code data-start="5950" data-end="5958"&gt;MEMORY&lt;/code&gt; and sections extend &lt;code data-start="5979" data-end="5992"&gt;__rom_end__&lt;/code&gt;. Keep the MCUboot app confined to internal flash, and handle the model/QSPI content separately.&lt;/p&gt;
&lt;p data-start="5816" data-end="6088"&gt;&lt;/p&gt;
&lt;p data-start="5816" data-end="6088"&gt;HTH&lt;/p&gt;
&lt;p data-start="5816" data-end="6088"&gt;GL :-) PJ :v:&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Code relocation to the external flash with Mcuboot</title><link>https://devzone.nordicsemi.com/thread/555670?ContentTypeID=1</link><pubDate>Thu, 27 Nov 2025 21:39:39 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b3777ac9-df1b-4a8b-8cc0-53e490d73866</guid><dc:creator>Shuhao Dong</dc:creator><description>&lt;p&gt;Hi, yes that bit I can understand now. I am following your option 2 now, which is to create another image but to save data. This works quite well for my self defined source code like gait_analysis.c. But when I try to move edge impulse library, this won&amp;#39;t work. There is no error, but the edge impulse code is still there in the internal flash.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;However as I said earlier, I can see moving edge impulse library to the external flash is mentioned in nordic official page. So I was wondering how can I actually achieve that.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Code relocation to the external flash with Mcuboot</title><link>https://devzone.nordicsemi.com/thread/555669?ContentTypeID=1</link><pubDate>Thu, 27 Nov 2025 21:35:00 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:26890ed0-f6da-4596-b301-86c24dc8cac7</guid><dc:creator>PjGlasso</dc:creator><description>&lt;p&gt;Hi there,&lt;/p&gt;
&lt;p&gt;SO ,&lt;/p&gt;
&lt;p data-start="875" data-end="1060"&gt;Key point: &lt;strong data-start="886" data-end="962"&gt;MCUboot assumes the application image is one contiguous region of flash.&lt;/strong&gt;&lt;br data-start="962" data-end="965" /&gt; It uses &lt;code data-start="973" data-end="988"&gt;__rom_start__&lt;/code&gt; and &lt;code data-start="993" data-end="1006"&gt;__rom_end__&lt;/code&gt; from the linker to compute &amp;ldquo;image size&amp;rdquo;. That&amp;rsquo;s just:&lt;/p&gt;
&lt;blockquote data-start="1062" data-end="1106"&gt;
&lt;p data-start="1064" data-end="1106"&gt;&lt;code data-start="1064" data-end="1106"&gt;image_size = __rom_end__ - __rom_start__&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="1108" data-end="1489"&gt;If any section is placed at &lt;code data-start="1136" data-end="1149"&gt;0x1012_0000&lt;/code&gt; (external QSPI region), &lt;code data-start="1174" data-end="1187"&gt;__rom_end__&lt;/code&gt; becomes ~0x1012xxxx. So from the point of view of imgtool/MCUboot, your &amp;ldquo;image&amp;rdquo; appears to span from address &lt;code data-start="1297" data-end="1309"&gt;0x0000xxxx&lt;/code&gt; all the way up to &lt;code data-start="1328" data-end="1340"&gt;0x1012xxxx&lt;/code&gt;. That&amp;rsquo;s why the &amp;ldquo;image size&amp;rdquo; looks like &lt;code data-start="1381" data-end="1393"&gt;0x10110be8&lt;/code&gt; &amp;ndash; it&amp;rsquo;s not the &lt;em data-start="1409" data-end="1425"&gt;amount of code&lt;/em&gt;, it&amp;rsquo;s the distance between the lowest and highest load address.&lt;/p&gt;
&lt;p data-start="1491" data-end="1494"&gt;So:&lt;/p&gt;
&lt;ul data-start="1496" data-end="1781"&gt;
&lt;li data-start="1496" data-end="1648"&gt;
&lt;p data-start="1498" data-end="1648"&gt;&lt;strong data-start="1528" data-end="1592"&gt;the relocated XIP section is still part of the MCUboot image&lt;/strong&gt;, and it completely blows up the image size calculation.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="1649" data-end="1781"&gt;Stock MCUboot does &lt;em data-start="1670" data-end="1675"&gt;not&lt;/em&gt; understand &amp;ldquo;one image spread over disjoint flash ranges (internal + QSPI XIP)&amp;rdquo; as a single signed binary.
&lt;p data-start="1651" data-end="1781"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="font-family:inherit;" data-start="1651" data-end="1781"&gt;&amp;nbsp; &amp;nbsp;Short version:&lt;/p&gt;
&lt;p style="font-family:inherit;" data-start="1838" data-end="1997"&gt;You &lt;strong data-start="1842" data-end="1851"&gt;can&amp;rsquo;t&lt;/strong&gt; just drop XIP sections into external flash and still expect a normal, single MCUboot image (with DFU, signatures, trailers, etc.) to &amp;ldquo;just work&amp;rdquo;.&lt;/p&gt;
&lt;p style="font-family:inherit;" data-start="1999" data-end="2047"&gt;You have to choose one of these design patterns:&lt;/p&gt;
&lt;h2 id="mcetoc_1jb3joaig0" data-start="2054" data-end="2129"&gt;Option 1 &amp;ndash; Keep MCUboot simple, treat external flash as a separate asset&lt;/h2&gt;
&lt;p data-start="2131" data-end="2143"&gt;&lt;strong data-start="2131" data-end="2143"&gt;Concept:&lt;/strong&gt;&lt;/p&gt;
&lt;ul data-start="2145" data-end="2444"&gt;
&lt;li data-start="2145" data-end="2200"&gt;
&lt;p data-start="2147" data-end="2200"&gt;The &amp;ldquo;MCUboot image&amp;rdquo; lives entirely in internal flash.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="2201" data-end="2303"&gt;
&lt;p data-start="2203" data-end="2303"&gt;External QSPI flash holds model / feature code or data, but &lt;strong data-start="2263" data-end="2302"&gt;it is not part of the MCUboot image&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="2304" data-end="2444"&gt;
&lt;p data-start="2306" data-end="2444"&gt;You program/update external flash via some other mechanism (second DFU alt-setting, custom mcumgr command, dedicated updater image, etc.).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="2446" data-end="2477"&gt;&lt;strong data-start="2446" data-end="2477"&gt;What to change technically:&lt;/strong&gt;&lt;/p&gt;
&lt;ol data-start="2479" data-end="2903"&gt;
&lt;li data-start="2479" data-end="2590"&gt;
&lt;p data-start="2482" data-end="2590"&gt;&lt;strong data-start="2482" data-end="2492"&gt;Do not&lt;/strong&gt; add &lt;code data-start="2497" data-end="2507"&gt;EXTFLASH&lt;/code&gt; to &lt;code data-start="2511" data-end="2519"&gt;MEMORY&lt;/code&gt; in your &lt;em data-start="2528" data-end="2541"&gt;application&lt;/em&gt; linker script in a way that moves &lt;code data-start="2576" data-end="2589"&gt;__rom_end__&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="2591" data-end="2656"&gt;
&lt;p data-start="2594" data-end="2656"&gt;Keep the normal Zephyr/MCUboot linker flow for internal flash.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="2657" data-end="2903"&gt;
&lt;p data-start="2660" data-end="2690"&gt;For QSPI XIP sections, either:&lt;/p&gt;
&lt;ul data-start="2694" data-end="2903"&gt;
&lt;li data-start="2694" data-end="2788"&gt;
&lt;p data-start="2696" data-end="2788"&gt;Build a &lt;strong data-start="2704" data-end="2720"&gt;second image&lt;/strong&gt; or raw binary linked at &lt;code data-start="2745" data-end="2757"&gt;0x10120000&lt;/code&gt;, and flash it separately, or&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="2792" data-end="2903"&gt;
&lt;p data-start="2794" data-end="2903"&gt;Keep the model as data and explicitly read/execute from it (e.g., copy critical parts to RAM before running).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-start="2905" data-end="3007"&gt;This is the least fragile route if you &amp;ldquo;must keep MCUboot + dfu-util&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="mcetoc_1jb3joaih1" data-start="3014" data-end="3081"&gt;Option 2 &amp;ndash; Multi-image / external-flash partition managed by NCS&lt;/h2&gt;
&lt;p data-start="3083" data-end="3133"&gt;If&amp;nbsp;you really want a &amp;ldquo;single update story&amp;rdquo;, then:&lt;/p&gt;
&lt;ul data-start="3135" data-end="3375"&gt;
&lt;li data-start="3135" data-end="3375"&gt;
&lt;p data-start="3137" data-end="3195"&gt;Use NCS &lt;strong data-start="3145" data-end="3166"&gt;Partition Manager&lt;/strong&gt; (&lt;code data-start="3168" data-end="3183"&gt;pm_static.yml&lt;/code&gt;) to define:&lt;/p&gt;
&lt;ul data-start="3198" data-end="3375"&gt;
&lt;li data-start="3198" data-end="3273"&gt;
&lt;p data-start="3200" data-end="3273"&gt;&lt;code data-start="3200" data-end="3209"&gt;mcuboot&lt;/code&gt;, &lt;code data-start="3211" data-end="3220"&gt;image_0&lt;/code&gt; (primary), &lt;code data-start="3232" data-end="3241"&gt;image_1&lt;/code&gt; or &lt;code data-start="3245" data-end="3254"&gt;scratch&lt;/code&gt; in internal flash.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-start="3198" data-end="3273"&gt;
&lt;p data-start="3200" data-end="3273"&gt;&lt;span style="font-family:inherit;"&gt;A separate &lt;/span&gt;&lt;code data-start="3289" data-end="3303"&gt;extflash_app&lt;/code&gt;&lt;span style="font-family:inherit;"&gt; (or &lt;/span&gt;&lt;code data-start="3308" data-end="3318"&gt;ei_model&lt;/code&gt;&lt;span style="font-family:inherit;"&gt;) partition in &lt;/span&gt;&lt;strong style="font-family:inherit;" data-start="3333" data-end="3351"&gt;external flash&lt;/strong&gt;&lt;span style="font-family:inherit;"&gt;, not part of &lt;/span&gt;&lt;code data-start="3365" data-end="3374"&gt;image_0&lt;/code&gt;&lt;span style="font-family:inherit;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family:inherit;"&gt;HTH&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:inherit;"&gt;GL :-) PJ :v:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:inherit;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:inherit;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Code relocation to the external flash with Mcuboot</title><link>https://devzone.nordicsemi.com/thread/555668?ContentTypeID=1</link><pubDate>Thu, 27 Nov 2025 18:21:35 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:df220ef1-1637-4685-aa07-c4d5741b9c11</guid><dc:creator>Shuhao Dong</dc:creator><description>&lt;p&gt;OK so this can be solved by following this guidance:&amp;nbsp;&lt;a href="https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/app_dev/device_guides/nrf53/qspi_xip_guide_nrf5340.html#indication_of_xip_performance"&gt;https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/app_dev/device_guides/nrf53/qspi_xip_guide_nrf5340.html#indication_of_xip_performance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;My question now is how to actually place the edge impulse large machine learning model to the external flash. In the above page, it is clearly stated that the XIP performance is done by&lt;span&gt;&amp;nbsp;&amp;quot;move the Edge Impulse library to external memory.&amp;quot; What LIBRARY name should be passed here in the CMakeLists file to make it work? I have tried:&amp;nbsp;&lt;/span&gt;zephyr_code_relocate(LIBRARY edge_impulse LOCATION EXTFLASH_TEXT NOCOPY) but not working. Any help please.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>