<?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>nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/129050/npm1300-loadsw1-ldo1-quiescent-current-issue-xiao-nrf54lm20a-sense</link><description>nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense 
 Status: unresolved as of 2026-08-27. Written to summarize the investigation for external reference (e.g. Nordic DevZone) and to keep the exact configuration used in one place. 
 ##</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 14 Sep 2026 08:27:13 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/129050/npm1300-loadsw1-ldo1-quiescent-current-issue-xiao-nrf54lm20a-sense" /><item><title>RE: nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/thread/571180?ContentTypeID=1</link><pubDate>Mon, 14 Sep 2026 08:27:13 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:bf47b297-ddb0-4d9e-bed6-eec156b2eb61</guid><dc:creator>Simonr</dc:creator><description>&lt;p&gt;Hi Thiery&lt;/p&gt;
&lt;p&gt;1. We refer to the Zephyr board file for the XIAO nRF54LM20A sense board here, where the default voltage is 1.8V.&amp;nbsp;&lt;a href="https://github.com/zephyrproject-rtos/zephyr/blob/main/boards/seeed/xiao_nrf54lm20a/xiao_nrf54lm20a_nrf54lm20a-common.dtsi#L83-L86"&gt;https://github.com/zephyrproject-rtos/zephyr/blob/main/boards/seeed/xiao_nrf54lm20a/xiao_nrf54lm20a_nrf54lm20a-common.dtsi#L83-L86&lt;/a&gt;&amp;nbsp;But if you have set that manually to 3.3V and confirmed that&amp;#39;s the case I assume it&amp;#39;s overwritten in your project.&lt;/p&gt;
&lt;p&gt;2. Understandable.&lt;/p&gt;
&lt;p&gt;3. Thank you. This has been forwarded internally, and we&amp;#39;ll review it on our end before getting back to you.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Simon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/thread/571174?ContentTypeID=1</link><pubDate>Mon, 14 Sep 2026 06:18:53 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:1469d67a-f3a0-407f-bd16-0e1520d1c3c7</guid><dc:creator>Thiery</dc:creator><description>&lt;p&gt;Hi Simon,&lt;/p&gt;
&lt;p&gt;Thank you for the follow-up. Two things to address, plus new isolation data from today.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. LDO1 / VOUT2 voltage.&lt;/strong&gt; We re-verified LDO1&amp;#39;s actual configured voltage by reading it back directly from the PMIC hardware register at runtime (not just re-reading our devicetree source): &lt;code&gt;regulator_get_voltage()&lt;/code&gt; on the &lt;code&gt;imu_vdd&lt;/code&gt;/LDO1 device returns &lt;code&gt;3,300,000 &amp;micro;V&lt;/code&gt; (3.3 V) with a success return code, matching our devicetree&amp;#39;s &lt;code&gt;regulator-min/max-microvolt = &amp;lt;3300000&amp;gt;&lt;/code&gt; exactly. So LDO1 is confirmed at 3.3 V on real hardware, not 1.8 V &amp;mdash; we don&amp;#39;t have an explanation for where the 1.8 V figure came from on your side; could you point us to the specific file/line you were looking at, in case it&amp;#39;s an older revision we shared earlier in this thread?&lt;/p&gt;
&lt;p&gt;For VOUT2: we don&amp;#39;t have a devicetree consumer for the nPM1300&amp;#39;s BUCK2 output anywhere in our firmware &amp;mdash; it&amp;#39;s not used by any driver in our design, so we don&amp;#39;t have an equivalent runtime readback for it. If you have visibility into what R28/R29 physically connect to on the schematic (LDO1&amp;#39;s output specifically, vs. VOUT2, vs. something else), that would help us target further testing without guessing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Ferrite bead removal.&lt;/strong&gt; We&amp;#39;d prefer not to do this at this stage &amp;mdash; it means modifying the board in a way that isn&amp;#39;t easily reversible, and we don&amp;#39;t have a spare unit we&amp;#39;re willing to risk for exploratory rework right now. If there&amp;#39;s a non-destructive way to get equivalent information, we&amp;#39;re glad to try that instead.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. New isolation data since our last message.&lt;/strong&gt; Two further single-variable tests, same PPK2 protocol as before:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LDO2 in isolation&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; no measurable increase over baseline (~5.9 vs ~6.0 &amp;micro;A), against LDO1&amp;#39;s ~218 &amp;micro;A excess in the same session. Points at the anomaly being specific to LDO1&amp;#39;s net, not the LOADSW/LDO block generically.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PDM microphone wake sequence, revisited&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; tried the datasheet&amp;#39;s documented Sleep-Mode entry sequence (brief clock burst then static low, instead of static low from power-up). No change measured. Doesn&amp;#39;t hold up as tested, though our clock generation wasn&amp;#39;t scope-verified.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Best regards, Thiery&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/thread/571002?ContentTypeID=1</link><pubDate>Tue, 08 Sep 2026 06:24:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:db5f0589-ad50-4ba3-b174-a0dad9a8eadd</guid><dc:creator>Simonr</dc:creator><description>&lt;p&gt;Hi Thiery&lt;/p&gt;
&lt;p&gt;If all else fails, there are ferrite beads on the IMU and MIC supplies. Can you try to remove them to try to isolate where the current is going? The LDO quiescent current should be &amp;lt;1µA.&lt;/p&gt;
&lt;p&gt;Can you also confirm which voltages you&amp;#39;re using for the VOUT2 and LDO1 rails? In the schematic both are labelled as 3.3V, and the VSET2 resistor corresponds to 3.3V on VOUT2, but in your Zephyr board .dts file, the LDO1 is set to 1.8V. If VOUT2 and LDO1 has different voltages there are other chances for leaks. For example, if the nRF54LM20 has a bias-pull-up set on the I2C pins, ther will be a voltage difference over R28 and R29.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Simon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/thread/570988?ContentTypeID=1</link><pubDate>Mon, 07 Sep 2026 13:09:52 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:81b78ae0-1c2c-44c9-a8ed-b5a0b14404a2</guid><dc:creator>Thiery</dc:creator><description>&lt;p&gt;&lt;em&gt;Hi Simon,&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tested exactly as you suggested &amp;mdash; same isolated methodology (single continuous PPK2 capture, imu_vdd held on throughout, only the CTRL3_C value changed mid-capture), now with a third segment adding PP_OD=1 on top of H_LACTIVE=1:&lt;/em&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Segment&lt;/th&gt;
&lt;th&gt;CTRL3_C&lt;/th&gt;
&lt;th&gt;Measured&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;H_LACTIVE=0, PP_OD=0 (original default)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;272.078 &amp;micro;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H_LACTIVE=1, PP_OD=0 (already shipped)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;239.009 &amp;micro;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H_LACTIVE=1, PP_OD=1 (your suggestion)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;239.082 &amp;micro;A&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;H_LACTIVE alone accounts for the full 33.07 &amp;micro;A (matches the 3.3V/100k&amp;Omega; calculation almost exactly). Adding PP_OD on top changes nothing &amp;mdash; 239.082 vs 239.009 &amp;micro;A is within measurement noise. Makes sense in hindsight: once H_LACTIVE=1 makes the idle state HIGH, the push-pull driver is already sourcing close enough to VDDIO that there&amp;#39;s no meaningful current left through R38 for open-drain to save.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;So with that confirmed, and pin configuration/initial chip state already verified for all four pins (SDA, SCL, INT1, CS) &amp;mdash; we&amp;#39;re back to the same open question: ~239&amp;micro;A on LOADSW1/LDO1 alone, zero load, zero I2C traffic, still unaccounted for. Is there anything further on your side to check, or should we consider this an inherent characteristic of the block that isn&amp;#39;t in the current datasheet?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Best,&lt;/em&gt; &lt;em&gt;Thiery&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/thread/570975?ContentTypeID=1</link><pubDate>Mon, 07 Sep 2026 09:06:03 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:51022cd6-4c0f-4d38-ba52-abc422eef107</guid><dc:creator>Simonr</dc:creator><description>&lt;p&gt;Hi Thiery&lt;/p&gt;
&lt;p&gt;Okay, so you measure INT1 (P0.06) to be low while the LDO is powered, correct? If that&amp;#39;s the case, there would be 3.3V across R38, so could that be the culprit here?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1788771875602v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;The polarity here would need to be updated in a control register, as well as setting the PP_OD bit to 1. This changes the pin behavior from push-pull to open-drain.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1788771922569v2.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;Can you try that and see if it makes a difference?&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Simon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/thread/570921?ContentTypeID=1</link><pubDate>Fri, 04 Sep 2026 09:57:38 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9b7781e0-d004-4fa3-8134-447d7fbbb609</guid><dc:creator>Thiery</dc:creator><description>&lt;p&gt;&lt;em&gt;Hi Simon,&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;To answer directly: yes, H_LACTIVE gives a real, measured improvement (265.33&amp;micro;A &amp;rarr; 232.61&amp;micro;A, isolated, LDO1 held on continuously, zero I2C traffic &amp;mdash; a 32.7&amp;micro;A delta matching the 3.3V/100k&amp;Omega; calculation within 1%). All four relevant pins are now accounted for (SDA, SCL, INT1, and CS &amp;mdash; the last one only found via your schematic). And yes, we still see ~232&amp;micro;A with LDO1/imu_vdd enabled alone, no load, no I2C traffic &amp;mdash; that&amp;#39;s the number left after the H_LACTIVE fix, and it only appears when the LDO is enabled (our disabled baseline is consistently ~3.3-3.9&amp;micro;A).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;On backpowering &amp;mdash; we tested this exact scenario already, for all four pins, and it doesn&amp;#39;t match what we see. Method: each pin configured as a plain floating input (no SoC-side pull), imu_vdd held disabled, then enabled, then disabled again:&lt;/em&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pin&lt;/th&gt;
&lt;th&gt;LDO1 never enabled since boot&lt;/th&gt;
&lt;th&gt;LDO1 enabled&lt;/th&gt;
&lt;th&gt;LDO1 disabled again&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SDA&lt;/td&gt;
&lt;td&gt;stable LOW&lt;/td&gt;
&lt;td&gt;stable HIGH&lt;/td&gt;
&lt;td&gt;HIGH ~100ms, then stable LOW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SCL&lt;/td&gt;
&lt;td&gt;stable LOW&lt;/td&gt;
&lt;td&gt;stable HIGH&lt;/td&gt;
&lt;td&gt;HIGH ~100ms, then stable LOW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CS&lt;/td&gt;
&lt;td&gt;stable LOW&lt;/td&gt;
&lt;td&gt;stable HIGH&lt;/td&gt;
&lt;td&gt;HIGH ~100ms, then stable LOW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INT1&lt;/td&gt;
&lt;td&gt;stable LOW&lt;/td&gt;
&lt;td&gt;stable LOW&lt;/td&gt;
&lt;td&gt;stable LOW&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;If an external pull-up on a still-powered rail were backpowering the net, we&amp;#39;d expect these pins to read HIGH with the LDO off &amp;mdash; none do, in either the &amp;quot;never touched since boot&amp;quot; case or after being on. SDA/SCL/CS only rise once imu_vdd is enabled and decay within ~100ms of it being disabled (consistent with the pull-up sitting on imu_vdd itself, not an external rail). INT1 stays low throughout, which is the H_LACTIVE mechanism we already described &amp;mdash; not backpowering.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;So with backpowering ruled out on all four pins, and pin configuration otherwise confirmed correct, the ~232&amp;micro;A on LOADSW1/LDO1 with zero load and zero I2C traffic still stands unexplained. Is there anything else on our side worth checking, or does this point back to something internal to the block?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Best regards,&lt;/em&gt; &lt;em&gt;Thiery&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/thread/570872?ContentTypeID=1</link><pubDate>Thu, 03 Sep 2026 08:43:26 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8be3f6f9-397f-4e9f-bc82-87943df6d379</guid><dc:creator>Simonr</dc:creator><description>&lt;p&gt;Hi Thiery&lt;/p&gt;
&lt;p&gt;I&amp;#39;m not sure I understand what you explain in point 4 here. Does setting one of the IMU pins to H_LACTIVE improve the current consumption somewhat. Are all pins accounted for and you now still see a ~230µA current consumption, and only when LDO1 is enabled?&lt;/p&gt;
&lt;p&gt;Can you check the state of the GPIOs when the LDO is off? If they are high, there might be due to the LDO backpowering the net you see this issue. These should be high impedance or pulled low to make sure you avoid backpowering scenarios.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Simon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/thread/570772?ContentTypeID=1</link><pubDate>Tue, 01 Sep 2026 10:37:08 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9505ca77-2dbb-4f3f-a29b-ba60d4547f91</guid><dc:creator>Thiery</dc:creator><description>&lt;p&gt;&lt;em&gt;Thank you for the follow-up questions on pin configuration and IMU power state. We tested both directly on hardware rather than re-deriving them from the datasheet.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;1) Microphone clock/data: already covered in our original report &amp;mdash; tested twice, no change (253&amp;micro;A) either time.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;2) IMU pins (SDA/SCL/INT1) high-Z with imu_vdd off: the one part we hadn&amp;#39;t actually tested. All three float correctly &amp;mdash; no external pull-up bias, rules out leakage into the unpowered IMU.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;3) IMU initial low-power state: confirmed empirically &amp;mdash; CTRL1_XL and CTRL2_G both read 0x00 (power-down) at every delay tested, 5/5 reads.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;4) A fourth pin we&amp;#39;d missed: after your reply we obtained Seeed&amp;#39;s official schematic, which revealed IMU_CS (P3.12, 100k&amp;Omega; pull-up, never tested before). It behaves correctly &amp;mdash; not the cause. But INT1 did not: it sat permanently low even with imu_vdd on, fighting its own 100k&amp;Omega; pull-up. Root cause: H_LACTIVE defaults to 0 in CTRL3_C, and with no interrupt source routed, the pad&amp;#39;s &amp;quot;inactive&amp;quot; state is actively driven low by the chip itself. Isolated measurement: 265.33&amp;micro;A &amp;rarr; 232.61&amp;micro;A after setting H_LACTIVE=1, a 32.7&amp;micro;A improvement matching the 3.3V/100k&amp;Omega; calculation within 1%. Now shipped in production, confirmed no regression (~22-23&amp;micro;A system-level).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;With pin configuration and initial chip state fully verified, and this independent fix shipped, the dominant LOADSW1/LDO1 steady-state current (~250-275&amp;micro;A, zero load, zero I2C traffic) still accounts for the large majority of the figure and remains unexplained on our side. Any guidance on a known internal quiescent/ground current for this block in LDO mode would be very welcome &amp;mdash; it&amp;#39;s the last item between our ~20-22&amp;micro;A and the 5-6&amp;micro;A target. Thanks&amp;#39; Thiery&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/thread/570762?ContentTypeID=1</link><pubDate>Tue, 01 Sep 2026 07:53:54 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b875ab38-beb7-4067-a7a8-705eafd198e2</guid><dc:creator>Simonr</dc:creator><description>&lt;p&gt;Hi Thiery&lt;/p&gt;
&lt;p&gt;What pins are you using on the nRF54LM20A in your application? The LDO powers a few things that have initial states that is connected further in the system. For example, there are two 100k pull-up resistors connected to that rail for IMU signals. If the nRF54LM20A drives P3.12 or P0.06 low for example, you will get power from those right away. That would account for ~660µA.&lt;br /&gt;&lt;br /&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1788249229400v2.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Simon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/thread/570751?ContentTypeID=1</link><pubDate>Mon, 31 Aug 2026 16:39:23 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c94e05ab-284e-4574-a2ee-14a5e4c29d85</guid><dc:creator>Thiery</dc:creator><description>&lt;div&gt;
&lt;div&gt;&lt;span&gt;Thank you for the follow-up questions on pin configuration and IMU power&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;state. We tested both directly on hardware rather than re-deriving them&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;from the datasheet, using a dedicated read-only diagnostic build on unit&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;#02 (SWD/memory-trace readback, no UART/console involved).&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;**1. Microphone clock/data (&lt;/span&gt;&lt;span&gt;`PDM_CLK`&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;`PDM_DIN`&lt;/span&gt;&lt;span&gt;).**&lt;/span&gt;&lt;span&gt; Already covered in&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;our original report, &amp;sect;8, &amp;quot;Further checks performed&amp;quot;: &lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt; and the&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;on-board PDM microphone&amp;#39;s &lt;/span&gt;&lt;span&gt;`dmic_vdd`&lt;/span&gt;&lt;span&gt; are the same physical LDO1 node&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`imu_vdd: dmic_vdd: LDO1`&lt;/span&gt;&lt;span&gt; in our devicetree). Driving the otherwise-&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;floating &lt;/span&gt;&lt;span&gt;`PDM_CLK`&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;`PDM_DIN`&lt;/span&gt;&lt;span&gt; pins to a defined low level was tested twice&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;mdash; once in isolation, once again in the diagnostic build behind our &amp;sect;8.1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;trace &amp;mdash; with &lt;/span&gt;&lt;span&gt;**no change (253 &amp;micro;A) either time**&lt;/span&gt;&lt;span&gt;. We have not re-tested a&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;third time; the result already stands and we don&amp;#39;t believe it needs&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;revisiting.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;**2. IMU pins (SDA/SCL/INT1) high-Z with &lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt; off.**&lt;/span&gt;&lt;span&gt; This was the&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;one part of your question we had not actually tested &amp;mdash; every prior test&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;in our isolation matrix (&amp;sect;8) measured &lt;/span&gt;&lt;span&gt;*current*&lt;/span&gt;&lt;span&gt;, none had read the&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;*voltage/logic level*&lt;/span&gt;&lt;span&gt; on these three pins with &lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt; confirmed at&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;0 V. New test: &lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt; held disabled from boot (confirmed via&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;`regulator_is_enabled()`&lt;/span&gt;&lt;span&gt;), SDA (P0.08), SCL (P0.07), and INT1 (P0.06)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;each configured as a plain floating input (no SoC-side pull), sampled&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;every 100 ms across three phases:&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;| Phase | &lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt; state | INT1 | SCL | SDA |&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;|---|---|---|---|---|&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;| Never enabled since boot (3 s, 30 samples) | confirmed off | stable low | stable low | stable low |&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;| Enabled (3 s, 30 samples) | confirmed on | stable low | stable &lt;/span&gt;&lt;span&gt;**high**&lt;/span&gt;&lt;span&gt; from the first sample | stable &lt;/span&gt;&lt;span&gt;**high**&lt;/span&gt;&lt;span&gt; from the first sample |&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;| Disabled again (3 s, 30 samples) | confirmed off | stable low | high for one 100 ms sample, then stable low | same |&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;SDA/SCL only rise once &lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt; is enabled, and decay back to low within&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;~100 ms of it being disabled. Had an external pull-up on a rail other&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;than &lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt; been biasing these pins, they would already have read high&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;in the first phase, before &lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt; was ever touched &amp;mdash; none did. This&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;rules out our working hypothesis (leakage into the unpowered IMU through&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;its own ESD/protection diodes from a pull-up on a still-powered rail):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;the SDA/SCL pull-up is on &lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt; itself, and INT1 shows no pull in any&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;phase. We&amp;#39;re confident this is not a contributor to the &amp;sect;8 anomaly.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;**3. IMU initial low-power state.**&lt;/span&gt;&lt;span&gt; The LSM6DS3TR-C&amp;#39;s &lt;/span&gt;&lt;span&gt;`CTRL1_XL`&lt;/span&gt;&lt;span&gt; and&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;`CTRL2_G`&lt;/span&gt;&lt;span&gt; registers (accelerometer/gyroscope output-data-rate control)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;have a documented reset value of &lt;/span&gt;&lt;span&gt;`0x00`&lt;/span&gt;&lt;span&gt; (power-down, ODR = 0000) for&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;both. We confirmed this empirically rather than by datasheet citation&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;alone: read via direct I2C immediately after a fresh&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;`regulator_enable()`&lt;/span&gt;&lt;span&gt; on &lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt; &amp;mdash; at 5 ms (matching our production&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;soft-start wait) and again at 15/25/35/45 ms, before any configuration&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;write reaches the chip. Result: &lt;/span&gt;&lt;span&gt;`CTRL1_XL = 0x00`&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;`CTRL2_G = 0x00`&lt;/span&gt;&lt;span&gt; on&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;5/5 reads at every delay tested. The chip is already at its lowest-power&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;state the instant it receives power; there is no firmware action&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;available to improve on this.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;**Where this leaves us.**&lt;/span&gt;&lt;span&gt; With pin configuration and initial chip state&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;both verified correct &amp;mdash; and the microphone-rail hypothesis independently&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;ruled out twice &amp;mdash; the &lt;/span&gt;&lt;span&gt;`LOADSW1`&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;`LDO1`&lt;/span&gt;&lt;span&gt; steady-state current of&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;~250&amp;ndash;275 &amp;micro;A with zero load and zero I2C traffic (&amp;sect;8) remains unexplained&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;on our side. We&amp;#39;d still welcome any guidance on a known internal&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;quiescent/ground current for this block in LDO mode that isn&amp;#39;t captured&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;in the datasheet&amp;#39;s electrical-specification tables &amp;mdash; this is now the only&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;open item standing between our current ~20&amp;ndash;22 &amp;micro;A and the 5&amp;ndash;6 &amp;micro;A target.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;Happy to share the diagnostic firmware, the raw memory-trace dumps, or a&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;fresh PPK2 capture if any of that would help narrow it down further.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;## 9. Secondary observation (not yet confirmed as a recurring cost)&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;The build links in the full NCS security stack &amp;mdash; &lt;/span&gt;&lt;span&gt;`mbedtls`&lt;/span&gt;&lt;span&gt;, PSA Crypto,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;and the CRACEN hardware crypto accelerator/KMU (&lt;/span&gt;&lt;span&gt;`CONFIG_NRF_SECURITY=y`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;`CONFIG_PSA_CRYPTO_DRIVER_CRACEN=y`&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;`CONFIG_CRACEN_IKG_SEED_LOAD=y`&lt;/span&gt;&lt;span&gt;, etc.)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;mdash; for a BLE &lt;/span&gt;&lt;span&gt;**broadcaster-only**&lt;/span&gt;&lt;span&gt; application with no pairing, no&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;connections, and no application-level cryptography. This appears to be&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;pulled in transitively through the Bluetooth host/controller&amp;#39;s own&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;randomness requirements on this SoC family, not something our application&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;code requests. Because &lt;/span&gt;&lt;span&gt;`bt_enable()`&lt;/span&gt;&lt;span&gt; is now called only once (at true cold&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;boot, not every cycle), any associated CRACEN/KMU provisioning cost would&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;be a one-time boot cost rather than a recurring one &amp;mdash; it does not appear in&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;our 10 s steady-state measurements, and we have &lt;/span&gt;&lt;span&gt;**not**&lt;/span&gt;&lt;span&gt; identified evidence&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;of it holding any power domain active in the background afterward. Flagged&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;here for completeness in case Nordic support recognizes a known interaction&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;between this and the idle current figures above.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;## 10. Key source files (current, significant configuration only)&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;### 10.1 &lt;/span&gt;&lt;span&gt;`boards/xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay`&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;```dts&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;amp;power_en {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; /delete-property/ regulator-boot-on;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;#include &amp;lt;zephyr/dt-bindings/regulator/npm13xx.h&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;&amp;amp;pmic {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; regulators {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; imu_vdd: LDO1 {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; regulator-min-microvolt = &amp;lt;3300000&amp;gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; regulator-max-microvolt = &amp;lt;3300000&amp;gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; };&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;/* Deferred-init: SYS_INIT would otherwise run before main() powers imu_vdd. */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;amp;lsm6ds3tr_c {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; zephyr,deferred-init;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;/* Deferred-init: charger init() writes ~12-15 I2C transactions at every&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp;* boot even without a battery read; only needed when a reading is due. */&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;amp;pmic_charger {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; zephyr,deferred-init;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;/ {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; cpuapp_sram@2007ec00 {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; compatible = &amp;quot;zephyr,memory-region&amp;quot;, &amp;quot;mmio-sram&amp;quot;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; reg = &amp;lt;0x2007ec00 DT_SIZE_K(4)&amp;gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; zephyr,memory-region = &amp;quot;RetainedMem&amp;quot;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; status = &amp;quot;okay&amp;quot;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; retainedmem0: retainedmem {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; compatible = &amp;quot;zephyr,retained-ram&amp;quot;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; status = &amp;quot;okay&amp;quot;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; };&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; aliases {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; retainedmemdevice = &amp;amp;retainedmem0;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; };&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;&amp;amp;cpuapp_sram {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; reg = &amp;lt;0x20000000 DT_SIZE_K(507)&amp;gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; ranges = &amp;lt;0x0 0x20000000 0x7ec00&amp;gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;&amp;amp;pmic_leds {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; status = &amp;quot;disabled&amp;quot;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;&amp;amp;py25q64 {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; status = &amp;quot;okay&amp;quot;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;&amp;amp;usbhs {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; status = &amp;quot;disabled&amp;quot;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;&amp;amp;usbhs_wrapper {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; status = &amp;quot;disabled&amp;quot;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;```&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;### 10.2 &lt;/span&gt;&lt;span&gt;`prj.conf`&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;```ini&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_SERIAL&lt;/span&gt;&lt;span&gt;=n&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_CONSOLE&lt;/span&gt;&lt;span&gt;=n&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_UART_CONSOLE&lt;/span&gt;&lt;span&gt;=n&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_PRINTK&lt;/span&gt;&lt;span&gt;=n&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_BOOT_BANNER&lt;/span&gt;&lt;span&gt;=n&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_NCS_BOOT_BANNER&lt;/span&gt;&lt;span&gt;=n&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_GPIO&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_SPI&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_FLASH&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_SPI_NOR&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;# Tickless idle -- required for k_sleep() to be a real WFI sleep between&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;# ~1 s poll cycles, not a busy/software wait.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_PM&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_PM_DEVICE&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_PM_DEVICE_RUNTIME&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_HWINFO&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;# Official NCS library, explicitly supported for CONFIG_SOC_NRF54LM20A_CPUAPP&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;# (nrf/lib/ram_pwrdn) -- powers down RAM sections beyond the linked image&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;# end (~23.5 KB used out of 507 KB retained by the overlay).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_RAM_POWER_DOWN_LIBRARY&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;CONFIG_BT&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_BT_BROADCASTER&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_BT_DEVICE_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;XIAO-DOOR&amp;quot;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;CONFIG_RETAINED_MEM&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_CRC&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;CONFIG_SENSOR&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_NPM13XX_CHARGER&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_MFD&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;CONFIG_REGULATOR&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;CONFIG_MAIN_STACK_SIZE&lt;/span&gt;&lt;span&gt;=4096&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE&lt;/span&gt;&lt;span&gt;=2048&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;CONFIG_REBOOT&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;```&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;### 10.3 &lt;/span&gt;&lt;span&gt;`src/main.c`&lt;/span&gt;&lt;span&gt; &amp;mdash; structure&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`sample_motion()`&lt;/span&gt;&lt;span&gt; &amp;mdash; enables &lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt;, re-asserts &lt;/span&gt;&lt;span&gt;`CTRL3_C`&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;`CTRL6_C`&lt;/span&gt;&lt;span&gt; by&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; direct I2C write every cycle (see &amp;sect;4.3), sets ODR (208 Hz), reads&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; X/Y/Z in one burst I2C transaction, disables &lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`main()`&lt;/span&gt;&lt;span&gt; &amp;mdash; one-time init (LED GPIOs released, external-flash pins forced&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; to a defined low-leakage state, fixed BLE identity, &lt;/span&gt;&lt;span&gt;`bt_enable()`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;`power_down_unused_ram()`&lt;/span&gt;&lt;span&gt;), then an infinite loop:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;`sample_motion()`&lt;/span&gt;&lt;span&gt; &amp;rarr; send BTHome health frame if due (15 min cadence) &amp;rarr;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;`k_sleep(K_MSEC(1000))`&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; No &lt;/span&gt;&lt;span&gt;`sys_poweroff()`&lt;/span&gt;&lt;span&gt; / &lt;/span&gt;&lt;span&gt;`z_nrf_grtc_wakeup_prepare()`&lt;/span&gt;&lt;span&gt; anywhere &amp;mdash; the SoC is&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; never rebooted during normal operation.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;Full source available on request; this report includes only the&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;sections materially relevant to the power-consumption question in &amp;sect;8.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;## 11. Summary for Nordic&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;| | |&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;|---|---|&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;| Current measured (steady state, no motion) | ~20&amp;ndash;22 &amp;micro;A |&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;| Target | 5&amp;ndash;6 &amp;micro;A |&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;| Sibling reference (nRF52840, same function) | ~10 &amp;micro;A |&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;| Dominant remaining cost | &lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt;/LDO1 rail: ~250&amp;ndash;300 &amp;micro;A whenever enabled, cause not yet identified (&amp;sect;8) |&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;| Everything else checked against the datasheet | Already at documented/optimal defaults (&amp;sect;7.1) |&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span&gt;We would welcome any guidance on the &lt;/span&gt;&lt;span&gt;`LOADSW1`&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;`LDO1`&lt;/span&gt;&lt;span&gt; idle-current question&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;in &amp;sect;8 &amp;mdash; it is, by a wide margin, the single highest-leverage item standing&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;between the current measured result and the project&amp;#39;s target.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;Thanks again for your help,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Best regards&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Thiery&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/thread/570741?ContentTypeID=1</link><pubDate>Mon, 31 Aug 2026 13:37:17 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4e64e43d-82a9-466f-80ee-60d61ac35eab</guid><dc:creator>Simonr</dc:creator><description>&lt;p&gt;Hi Thiery&lt;/p&gt;
&lt;p&gt;Thank you for the input Thiery. It&amp;#39;s a bit hard to determine where the current is going without knowing exactly how the IMU and microphone is operating.&lt;/p&gt;
&lt;p&gt;Can you confirm whether the nRF54LM20A pins that goes to the IMU or microphone are configured correctly? Are all IMU pins set to high-z (these have external pull resistors), and do you drive the microphone clock and data low?&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Please also confirm that the IMU is in an initial low power state.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Simon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/thread/570698?ContentTypeID=1</link><pubDate>Fri, 28 Aug 2026 14:12:09 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a4bf754f-f0f0-4be1-90eb-391b6d28262b</guid><dc:creator>Thiery</dc:creator><description>&lt;p&gt;&lt;strong&gt;Hi,&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Thank you for pointing us to the Rev2 errata index &amp;mdash; we&amp;#39;ve reviewed [38], [40], and [41] in full there.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Workaround status:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;[38]&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(&amp;quot;trigger any TWI command after enabling the LDO&amp;quot;): already applied on our side via the Zephyr NCS regulator driver (&lt;code&gt;regulator_npm13xx_enable()&lt;/code&gt;, PR #83790) &amp;mdash; it performs a 2 ms delay followed by an&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;LDSWSTATUS&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;read automatically after enable. We also tested extending this to 20 reads over 100 ms in case a single read wasn&amp;#39;t enough: no change in the elevated current.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[40]&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;[41]&lt;/strong&gt;: don&amp;#39;t apply to our setup &amp;mdash; we power LOADSW1/LDO1 directly from VSYS (no BUCK in forced PFM feeding it), only ever start one LDO at a time (never two within 200 &amp;micro;s of each other), and our battery has stayed at a healthy ~4.2 V throughout testing (well clear of any VSYSPOF margin issue) &amp;mdash; we&amp;#39;ve never observed a reset.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Current trace, with and without LDO1 enabled:&lt;/strong&gt; Single continuous PPK2 capture (60 s), unit under test powered from BAT+/BAT&amp;minus; only (USB disconnected), dedicated diagnostic firmware that calls &lt;code&gt;regulator_enable()&lt;/code&gt; on LOADSW1/LDO1 once and leaves it on indefinitely &amp;mdash; no I2C traffic to any device on the rail, no sensor reads, isolating the regulator itself.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Segment&lt;/th&gt;
&lt;th&gt;Duration&lt;/th&gt;
&lt;th&gt;Average current&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Baseline, LDO1 disabled&lt;/td&gt;
&lt;td&gt;0&amp;ndash;13.86 s&lt;/td&gt;
&lt;td&gt;3.90 &amp;micro;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enable transition&lt;/td&gt;
&lt;td&gt;~0.4 s&lt;/td&gt;
&lt;td&gt;brief burst up to ~32 mA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LDO1 enabled, steady state&lt;/td&gt;
&lt;td&gt;remainder of capture&lt;/td&gt;
&lt;td&gt;~254 &amp;micro;A (stable)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The steady-state figure reproduces an earlier isolation test on the same unit (different firmware build, same methodology): 253 &amp;micro;A &amp;mdash; independent reproduction, same result. CSV export of the full capture and PPK2 screenshots attached.&lt;/p&gt;
&lt;p&gt;Given this jump (3.9 &amp;micro;A &amp;rarr; 254 &amp;micro;A) happens with zero load and zero I2C traffic on the rail, and the datasheet&amp;#39;s LOADSW/LDO electrical specification tables (Table 23/24) don&amp;#39;t list a quiescent current figure for either mode &amp;mdash; is there a known ground/quiescent current for this block that simply isn&amp;#39;t captured in those tables?&lt;/p&gt;
&lt;p&gt;Best regards Thiery&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/thread/570695?ContentTypeID=1</link><pubDate>Fri, 28 Aug 2026 13:15:05 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c71c8a6a-c744-4f8f-a878-3f54d5607c02</guid><dc:creator>Simonr</dc:creator><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;There are a few errata around the LDO on the nPM1300 listed here:&amp;nbsp;&lt;a href="https://docs.nordicsemi.com/r/bundle/errata_npm1300_rev2/page/err/npm1300/rev2/latest/err_300_new.html"&gt;https://docs.nordicsemi.com/r/bundle/errata_npm1300_rev2/page/err/npm1300/rev2/latest/err_300_new.html&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.nordicsemi.com/r/bundle/errata_npm1300_rev2/page/err/npm1300/rev2/latest/anomaly_300_38.html"&gt;38&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.nordicsemi.com/r/bundle/errata_npm1300_rev2/page/err/npm1300/rev2/latest/anomaly_300_40.html"&gt;40&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.nordicsemi.com/r/bundle/errata_npm1300_rev2/page/err/npm1300/rev2/latest/anomaly_300_41.html"&gt;41&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please make sure the proper workarounds for those are in place on your end. I have not found any mention of an internal LDO leakage on our end. Do you have a trace of the current consumption on your end so we can take a look at how it looks like, both with and without LDO enabled on nPM1300 should be helpful.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Simon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nPM1300 LOADSW1/LDO1 quiescent current issue — XIAO nRF54LM20A Sense</title><link>https://devzone.nordicsemi.com/thread/570693?ContentTypeID=1</link><pubDate>Fri, 28 Aug 2026 11:56:55 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f6a2525d-519a-424d-ad71-5aee03bde644</guid><dc:creator>Thiery</dc:creator><description>&lt;p&gt;Latest tests:&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span&gt; XIAO nRF54LM20A Ultra-Low-Power BLE/IMU Sensor &amp;mdash; Current State Report&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;**Prepared for:**&lt;/span&gt; Nordic Semiconductor support / DevZone&lt;/div&gt;
&lt;div&gt;&lt;span&gt;**Project:**&lt;/span&gt; Battery-powered BLE door/motion sensor (BTHome v2 over Home Assistant)&lt;/div&gt;
&lt;div&gt;&lt;span&gt;**Date:**&lt;/span&gt; 2026-08-28&lt;/div&gt;
&lt;div&gt;&lt;span&gt;**Board:**&lt;/span&gt; Seeed Studio XIAO nRF54LM20A Sense (nRF54LM20A SoC + nPM1300 PMIC + LSM6DS3TR-C IMU)&lt;/div&gt;
&lt;div&gt;&lt;span&gt;**SDK:**&lt;/span&gt; nRF Connect SDK v3.4.0 (Zephyr base), GNU ARM toolchain (NCS toolchain manager, bundle &lt;span&gt;`dcbdc366a1`&lt;/span&gt;)&lt;/div&gt;
&lt;div&gt;&lt;span&gt;**Reference design:**&lt;/span&gt; sibling project on nRF52840 (Seeed XIAO nRF52840 Sense) achieves ~10 &amp;micro;A with equivalent BLE + motion-detection functionality &amp;mdash; used throughout as the practical target.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;## 1. Executive summary&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;We are porting a battery-powered BLE motion/door sensor from an nRF52840-based&lt;/div&gt;
&lt;div&gt;design to the XIAO nRF54LM20A Sense. The application: periodic accelerometer&lt;/div&gt;
&lt;div&gt;polling (~1 s reactivity), BTHome v2 health telemetry over BLE advertising&lt;/div&gt;
&lt;div&gt;every 15 minutes, all running from a single-cell LiPo through the on-board&lt;/div&gt;
&lt;div&gt;nPM1300 PMIC.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;An initial architecture (System OFF + full SoC reboot on every ~1 s poll&lt;/div&gt;
&lt;div&gt;cycle) plateaued at &lt;span&gt;**70&amp;ndash;144 &amp;micro;A**&lt;/span&gt; average current &amp;mdash; well above target and&lt;/div&gt;
&lt;div&gt;found to be structurally limited by fixed re-initialization costs paid on&lt;/div&gt;
&lt;div&gt;every reboot. Pivoting to a &lt;span&gt;**System ON IDLE**&lt;/span&gt; architecture (no reboot; the&lt;/div&gt;
&lt;div&gt;SoC sleeps via &lt;span&gt;`CONFIG_PM`&lt;/span&gt; tickless idle and wakes on a GRTC-backed&lt;/div&gt;
&lt;div&gt;&lt;span&gt;`k_sleep()`&lt;/span&gt;) removed that structural floor. A sequence of single-variable&lt;/div&gt;
&lt;div&gt;tests &amp;mdash; architecture pivot, driver-delay tuning against documented specs,&lt;/div&gt;
&lt;div&gt;Nordic&amp;#39;s official RAM power-down library, and IMU output-data-rate tuning &amp;mdash;&lt;/div&gt;
&lt;div&gt;has brought measured current down to &lt;span&gt;**~20&amp;ndash;22 &amp;micro;A**&lt;/span&gt;, a 3.4&amp;ndash;7&amp;times; reduction from&lt;/div&gt;
&lt;div&gt;the legacy architecture.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;**One unresolved item is now the main blocker to reaching the 5&amp;ndash;6 &amp;micro;A target**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;and is the subject of the support request in &amp;sect;8: the nPM1300 &lt;span&gt;`LOADSW1/LDO1`&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;rail (used to power the IMU) draws &lt;span&gt;**~250&amp;ndash;300 &amp;micro;A**&lt;/span&gt; whenever enabled, with **no&lt;/div&gt;
&lt;div&gt;load and no I2C traffic**, independent of LDO vs. Load Switch mode and&lt;/div&gt;
&lt;div&gt;independent of firmware &amp;mdash; this figure represents ~70&amp;ndash;80% of the current&lt;/div&gt;
&lt;div&gt;per-cycle cost and has resisted 13+ independent isolation tests.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;## 2. Hardware configuration&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;| Item | Detail |&lt;/div&gt;
&lt;div&gt;|---|---|&lt;/div&gt;
&lt;div&gt;| Board | Seeed Studio XIAO nRF54LM20A Sense |&lt;/div&gt;
&lt;div&gt;| SoC | nRF54LM20A (Cortex-M33, nRF54L series peripheral set) |&lt;/div&gt;
&lt;div&gt;| PMIC | nPM1300 (I2C-controlled, battery charger + 2&amp;times; LDO/LOADSW + bucks) |&lt;/div&gt;
&lt;div&gt;| IMU | ST LSM6DS3TR-C (accelerometer + gyroscope, I2C, on &lt;span&gt;`imu_vdd`&lt;/span&gt;/LDO1 rail &amp;mdash; shared with the on-board PDM microphone) |&lt;/div&gt;
&lt;div&gt;| External flash | PY25Q64 (SPI NOR, kept in deep power-down / deterministic pin state) |&lt;/div&gt;
&lt;div&gt;| Power source | Single-cell LiPo via nPM1300, no USB connected during measurement |&lt;/div&gt;
&lt;div&gt;| Debug/flash interface | On-board SAMD11 USB&lt;span class="emoticon" data-url="https://devzone.nordicsemi.com/cfs-file/__key/system/emoji/2194.svg" title="Left right arrow"&gt;&amp;#x2194;&lt;/span&gt;SWD bridge (CMSIS-DAP), OpenOCD |&lt;/div&gt;
&lt;div&gt;| Current measurement | Nordic PPK2, Ampere-meter mode, external supply on BAT+/BAT&amp;minus;, USB-C &lt;span&gt;**always disconnected**&lt;/span&gt; during measurement (verified protocol, no simultaneous USB+PPK2 connection at any point) |&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;## 3. Software / toolchain&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;**nRF Connect SDK:**&lt;/span&gt; v3.4.0, workspace at a local mirror (&lt;span&gt;`C:\ncs\v3.4.0`&lt;/span&gt;)&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;**Board target:**&lt;/span&gt; &lt;span&gt;`xiao_nrf54lm20a/nrf54lm20a/cpuapp`&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;**Board support package:**&lt;/span&gt; community Seeed Studio module (&lt;span&gt;`platform-seeedboards`&lt;/span&gt;), used via &lt;span&gt;`BOARD_ROOT`&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;**Toolchain:**&lt;/span&gt; NCS toolchain manager bundle, GNU ARM Embedded compiler, &lt;span&gt;`west`&lt;/span&gt; 1.5.0&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;**Build command:**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; ```bash&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &lt;span&gt;west build -b xiao_nrf54lm20a/nrf54lm20a/cpuapp -d build --pristine &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;-- &lt;/span&gt;&lt;span&gt;-DBOARD_ROOT&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&amp;lt;path&amp;gt;/platform-seeedboards/zephyr&amp;quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; ```&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;**Flash/verify:**&lt;/span&gt; OpenOCD + CMSIS-DAP over the on-board SAMD11 bridge; every&lt;/div&gt;
&lt;div&gt;&amp;nbsp; flash is verified byte-for-byte with &lt;span&gt;`verify_image`&lt;/span&gt; against the &lt;span&gt;`.hex`&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; (never &lt;span&gt;`dump_image`&lt;/span&gt;+&lt;span&gt;`cmp`&lt;/span&gt;, which produces false positives on RRAM padding&lt;/div&gt;
&lt;div&gt;&amp;nbsp; that was written by a previous, different binary).&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;## 4. Firmware architecture&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;### 4.1 Legacy architecture (abandoned)&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;`System OFF`&lt;/span&gt; + full SoC reboot on every ~1 s poll cycle&lt;/div&gt;
&lt;div&gt;(&lt;span&gt;`z_nrf_grtc_wakeup_prepare()`&lt;/span&gt; + &lt;span&gt;`sys_poweroff()`&lt;/span&gt;), matching the classic&lt;/div&gt;
&lt;div&gt;nRF52-era ultra-low-power pattern. On this SoC this plateaued at&lt;/div&gt;
&lt;div&gt;&lt;span&gt;**70&amp;ndash;144 &amp;micro;A**&lt;/span&gt;: every reboot re-initializes the MFD/regulator driver, the BLE&lt;/div&gt;
&lt;div&gt;controller/host, and (until deferred-init was applied) the nPM1300 charger &amp;mdash;&lt;/div&gt;
&lt;div&gt;fixed per-boot costs that dominate at a 1 Hz duty cycle. Root-caused via the&lt;/div&gt;
&lt;div&gt;Nordic datasheet&amp;#39;s own power-consumption table (System ON IDLE + GRTC + full&lt;/div&gt;
&lt;div&gt;RAM retained = 4.3 &amp;micro;A documented floor, vs. 0.7&amp;ndash;1.0 &amp;micro;A for System OFF) &amp;mdash; the&lt;/div&gt;
&lt;div&gt;gap was never the power &lt;span&gt;*mode*&lt;/span&gt; itself, but the fact that a reboot re-runs&lt;/div&gt;
&lt;div&gt;driver &lt;span&gt;`POST_KERNEL`&lt;/span&gt; init on every cycle, none of which is retained.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;### 4.2 Current architecture (System ON IDLE)&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;`main()`&lt;/span&gt; is a single infinite loop; the SoC is &lt;span&gt;**never rebooted**&lt;/span&gt; during&lt;/div&gt;
&lt;div&gt;&amp;nbsp; normal operation. &lt;span&gt;`CONFIG_PM=y`&lt;/span&gt; enables Zephyr&amp;#39;s tickless idle so&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &lt;span&gt;`k_sleep()`&lt;/span&gt; between cycles is a genuine WFI-based CPU sleep, not a&lt;/div&gt;
&lt;div&gt;&amp;nbsp; busy/software wait.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; Bluetooth (&lt;span&gt;`bt_enable()`&lt;/span&gt;) is initialized &lt;span&gt;**once**&lt;/span&gt;, at true cold boot &amp;mdash;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; removing a per-cycle BLE-stack-init cost that had been the single largest&lt;/div&gt;
&lt;div&gt;&amp;nbsp; contributor under the reboot architecture.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; The accelerometer (&lt;span&gt;`imu_vdd`&lt;/span&gt;/LDO1 + LSM6DS3TR-C) is still power-cycled&lt;/div&gt;
&lt;div&gt;&amp;nbsp; every ~1 s (regulator enable &amp;rarr; sample &amp;rarr; regulator disable) &amp;mdash; this remains&lt;/div&gt;
&lt;div&gt;&amp;nbsp; necessary because the rail itself draws ~250&amp;ndash;300 &amp;micro;A whenever active (see&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;sect;8); duty-cycling it is the only way found so far to keep the average&lt;/div&gt;
&lt;div&gt;&amp;nbsp; current down while still meeting the ~1 s motion-detection reactivity&lt;/div&gt;
&lt;div&gt;&amp;nbsp; requirement.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; BTHome &amp;quot;health&amp;quot; frames (battery %, voltage) are advertised only when due&lt;/div&gt;
&lt;div&gt;&amp;nbsp; (every 15 minutes), gated &lt;span&gt;**before**&lt;/span&gt; any BLE call so the BLE stack is&lt;/div&gt;
&lt;div&gt;&amp;nbsp; touched only for the ~700 ms burst that&amp;#39;s actually needed.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; RAM sections unused by the linked image (~94% of the SoC&amp;#39;s 512 KB) are&lt;/div&gt;
&lt;div&gt;&amp;nbsp; powered down via Nordic&amp;#39;s official &lt;span&gt;`RAM_POWER_DOWN_LIBRARY`&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; (&lt;span&gt;`nrf/lib/ram_pwrdn`&lt;/span&gt;), called once after boot.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;### 4.3 Correctness detail specific to the pivot&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;Because the SoC no longer reboots, &lt;span&gt;`device_init()`&lt;/span&gt; on the LSM6DSL driver&lt;/div&gt;
&lt;div&gt;only runs its low-level chip-init routine (&lt;span&gt;`lsm6dsl_init_chip()`&lt;/span&gt;) &lt;span&gt;**once**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;(Zephyr&amp;#39;s &lt;span&gt;`device_init()`&lt;/span&gt; returns &lt;span&gt;`-EALREADY`&lt;/span&gt; without re-invoking the&lt;/div&gt;
&lt;div&gt;driver&amp;#39;s &lt;span&gt;`init`&lt;/span&gt; callback once &lt;span&gt;`dev-&amp;gt;state-&amp;gt;initialized`&lt;/span&gt; is set &amp;mdash; see&lt;/div&gt;
&lt;div&gt;&lt;span&gt;`zephyr/kernel/device.c`&lt;/span&gt;). Since &lt;span&gt;`imu_vdd`&lt;/span&gt; is still power-cycled every&lt;/div&gt;
&lt;div&gt;sample, the physical IMU register state resets every cycle even though the&lt;/div&gt;
&lt;div&gt;Zephyr-side &amp;quot;initialized&amp;quot; flag does not. &lt;span&gt;`CTRL3_C`&lt;/span&gt; (BDU + address&lt;/div&gt;
&lt;div&gt;auto-increment) and &lt;span&gt;`CTRL6_C`&lt;/span&gt; (low-power mode) are therefore now&lt;/div&gt;
&lt;div&gt;re-asserted explicitly by direct I2C write on every sample, independent of&lt;/div&gt;
&lt;div&gt;the Zephyr sensor API&amp;#39;s init state &amp;mdash; without this, X/Y/Z readings would&lt;/div&gt;
&lt;div&gt;silently become inconsistent from the second sample onward.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;## 5. What currently works (functionally verified)&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; BLE advertising: fixed static random identity (from &lt;span&gt;`hwinfo`&lt;/span&gt; device ID),&lt;/div&gt;
&lt;div&gt;&amp;nbsp; non-connectable, BTHome v2 service-data payload.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; BTHome &amp;quot;health&amp;quot; frame (battery %, battery voltage, packet ID, low-battery&lt;/div&gt;
&lt;div&gt;&amp;nbsp; flag) sent on a 15-minute cadence, correct values confirmed via battery&lt;/div&gt;
&lt;div&gt;&amp;nbsp; reading (&lt;span&gt;`&amp;quot;battery=100% (4228 mV)&amp;quot;`&lt;/span&gt; etc., verified with a temporary&lt;/div&gt;
&lt;div&gt;&amp;nbsp; console before switching to the silent measurement build).&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; Accelerometer polling every ~1 s: plausible, stable X/Y/Z readings&lt;/div&gt;
&lt;div&gt;&amp;nbsp; verified via temporary UART console across many consecutive cycles after&lt;/div&gt;
&lt;div&gt;&amp;nbsp; every firmware change with functional risk (e.g. after enabling&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &lt;span&gt;`RAM_POWER_DOWN_LIBRARY`&lt;/span&gt;, after the ODR change) &amp;mdash; no crash, no bus fault,&lt;/div&gt;
&lt;div&gt;&amp;nbsp; no reset loop observed in any test.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; Retained-RAM state (packet ID, next health-frame deadline) survives an&lt;/div&gt;
&lt;div&gt;&amp;nbsp; unexpected reset via a CRC-validated struct in a &lt;span&gt;`zephyr,retained-ram`&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; region &amp;mdash; no longer required for the normal operating cycle (the SoC does&lt;/div&gt;
&lt;div&gt;&amp;nbsp; not reboot), kept only as a safety net.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;**Console/serial is hard-disabled (&lt;span&gt;`CONFIG_SERIAL=n`&lt;/span&gt;) for every measurement&lt;/div&gt;
&lt;div&gt;build.** A separate, temporary console-enabled build is used for functional&lt;/div&gt;
&lt;div&gt;verification, then reverted before any PPK2 measurement.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;## 6. Test &amp;amp; measurement methodology&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;1.&lt;/span&gt; State the objective, the exact parameter(s) changed and in which file,&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;and the expected result &lt;span&gt;**before**&lt;/span&gt; building &amp;mdash; single-variable changes&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;only, one at a time between two measurements.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;2.&lt;/span&gt; Build, flash, and verify byte-for-byte (&lt;span&gt;`verify_image`&lt;/span&gt;) &amp;mdash; re-flash and&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;re-verify if it fails.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;3.&lt;/span&gt; If the change carries any functional-correctness risk (e.g. touches&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;sensor register state or RAM layout), do a temporary console-enabled&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;functional check (several polling cycles observed over UART) &lt;span&gt;**before**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;switching to the silent measurement build.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;4.&lt;/span&gt; Confirm &lt;span&gt;`CONFIG_SERIAL=n`&lt;/span&gt; / &lt;span&gt;`CONFIG_CONSOLE=n`&lt;/span&gt; / &lt;span&gt;`CONFIG_UART_CONSOLE=n`&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;/ &lt;span&gt;`CONFIG_PRINTK=n`&lt;/span&gt; are in effect for the measurement build (a UARTE&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;driver PM-runtime reference leak was found early on that silently keeps&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;the console active in System OFF once any other peripheral is also&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;active &amp;mdash; console is now always hard-disabled, never runtime-suspended).&lt;/div&gt;
&lt;div&gt;&lt;span&gt;5.&lt;/span&gt; PPK2 measurement protocol (strict, never varied):&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;1.&lt;/span&gt; Disconnect the board from USB-C.&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;2.&lt;/span&gt; Wait 20 s.&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;3.&lt;/span&gt; Connect the board to the PPK2 (BAT+/BAT&amp;minus; only).&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;4.&lt;/span&gt; Power the board from the PPK2.&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;5.&lt;/span&gt; Wait 10 s.&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;6.&lt;/span&gt; Start the measurement, capture screenshots at multiple zoom levels&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (whole-window average, single-cycle burst, idle-floor zoom).&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;7.&lt;/span&gt; Stop the PPK2 power output.&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;8.&lt;/span&gt; Disconnect the board from the PPK2.&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;9.&lt;/span&gt; Reconnect the board to USB-C.&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;PPK2 and USB-C are &lt;span&gt;**never**&lt;/span&gt; connected to the board simultaneously at&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;any point in this protocol.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;6.&lt;/span&gt; Record measured &amp;micro;A (whole-window average) and &amp;micro;C (charge &amp;mdash; used to&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;compare cycles independent of small interval-count variance across&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;measurement windows).&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;## 7. Measured results&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;All measurements: unit &amp;quot;#01&amp;quot;, board at rest, no motion, single-cell LiPo via&lt;/div&gt;
&lt;div&gt;nPM1300, PPK2 Ampere-meter mode.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;| Stage | Change | Avg. current (10 s window) |&lt;/div&gt;
&lt;div&gt;|---|---|---|&lt;/div&gt;
&lt;div&gt;| Legacy architecture | System OFF + full reboot every ~1 s cycle | 70&amp;ndash;144 &amp;micro;A |&lt;/div&gt;
&lt;div&gt;| Architecture pivot | System ON IDLE, no reboot, &lt;span&gt;`CONFIG_PM=y`&lt;/span&gt; | 30.85 &amp;micro;A |&lt;/div&gt;
&lt;div&gt;| Test #32 | &lt;span&gt;`imu_vdd`&lt;/span&gt;/LDO1 stabilization delay 20&amp;rarr;5 ms (nPM1300 datasheet soft-start spec: 1.8 ms typ.) | 27.07 &amp;micro;A |&lt;/div&gt;
&lt;div&gt;| Test #33 | IMU ODR-settle delay 15&amp;rarr;10 ms (104 Hz period &amp;asymp; 9.6 ms) | 25.21 &amp;micro;A |&lt;/div&gt;
&lt;div&gt;| Test #35 | Nordic &lt;span&gt;`RAM_POWER_DOWN_LIBRARY`&lt;/span&gt; &amp;mdash; unused RAM sections powered off | 20.63 &amp;micro;A |&lt;/div&gt;
&lt;div&gt;| Test #36 | IMU ODR 104&amp;rarr;208 Hz, settle delay 10&amp;rarr;6 ms | ~20&amp;ndash;22 &amp;micro;A&amp;sup1; |&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;sup1; Raw 10 s window for test #36 read 21.54 &amp;micro;A, but that capture happened to&lt;/div&gt;
&lt;div&gt;include one BLE health-frame burst (triggered once per boot by the retained&lt;/div&gt;
&lt;div&gt;&amp;quot;next health deadline&amp;quot; resetting on a fresh flash) &amp;mdash; not directly&lt;/div&gt;
&lt;div&gt;comparable to the other rows, which did not contain that event. The&lt;/div&gt;
&lt;div&gt;per-cycle burst charge (18.40 &amp;micro;C, down from 17.45&amp;ndash;20.11 &amp;micro;C) and the&lt;/div&gt;
&lt;div&gt;idle-floor reading (4.26 &amp;micro;A, essentially at the datasheet&amp;#39;s documented&lt;/div&gt;
&lt;div&gt;System ON IDLE floor of 4.3 &amp;micro;A) both confirm a real, if modest, further&lt;/div&gt;
&lt;div&gt;improvement; a clean re-measurement is pending.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;**Remaining gap to target:**&lt;/span&gt; 5&amp;ndash;6 &amp;micro;A final objective, ~10 &amp;micro;A sibling&lt;/div&gt;
&lt;div&gt;nRF52840 reference (with equivalent motion-detection functionality). The&lt;/div&gt;
&lt;div&gt;per-cycle accelerometer sampling burst (currently &amp;asymp;18 &amp;micro;C / ~15&amp;ndash;19 ms) now&lt;/div&gt;
&lt;div&gt;accounts for roughly 70&amp;ndash;80% of total cycle cost and is dominated almost&lt;/div&gt;
&lt;div&gt;entirely by the fixed ~250&amp;ndash;300 &amp;micro;A &lt;span&gt;`imu_vdd`&lt;/span&gt;/LDO1 rail current for as long as&lt;/div&gt;
&lt;div&gt;it stays enabled &amp;mdash; see &amp;sect;8.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;### 7.1 Items checked against the datasheet and confirmed already optimal&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;No firmware change was needed for the following &amp;mdash; each was verified in the&lt;/div&gt;
&lt;div&gt;datasheet and/or the board&amp;#39;s devicetree/Kconfig, not assumed:&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;**System ON sub-power mode**&lt;/span&gt; defaults to &lt;span&gt;`Low-power`&lt;/span&gt; (not `Constant&lt;/div&gt;
&lt;div&gt;&amp;nbsp; Latency`) on entry to System ON &amp;mdash; the most power-efficient option,&lt;/div&gt;
&lt;div&gt;&amp;nbsp; requires no software action (&amp;sect;5.1.1 of the datasheet).&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;**RRAM (program memory) low-power mode**&lt;/span&gt; (&lt;span&gt;`RRAMC.POWER.LOWPOWERCONFIG`&lt;/span&gt;)&lt;/div&gt;
&lt;div&gt;&amp;nbsp; resets to &lt;span&gt;`PowerOff`&lt;/span&gt; &amp;mdash; RRAM is already fully powered off automatically&lt;/div&gt;
&lt;div&gt;&amp;nbsp; during System ON IDLE.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;**Main SoC regulator (VREGMAIN) DC/DC mode**&lt;/span&gt; is already enabled by the&lt;/div&gt;
&lt;div&gt;&amp;nbsp; board&amp;#39;s devicetree (&lt;span&gt;`regulator-initial-mode = &amp;lt;NRF5X_REG_MODE_DCDC&amp;gt;`&lt;/span&gt;),&lt;/div&gt;
&lt;div&gt;&amp;nbsp; not left in the less-efficient LDO fallback mode.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;**HFXO vs. HFINT for I2C (TWIM):**&lt;/span&gt; the Zephyr TWIM driver never requests&lt;/div&gt;
&lt;div&gt;&amp;nbsp; HFXO explicitly, and MPSL only requests HFXO on-demand around actual&lt;/div&gt;
&lt;div&gt;&amp;nbsp; radio events (&lt;span&gt;`CONFIG_MPSL_HFCLK_LATENCY`&lt;/span&gt;), not continuously or per I2C&lt;/div&gt;
&lt;div&gt;&amp;nbsp; transaction &amp;mdash; our I2C traffic to the IMU already runs on the always-on&lt;/div&gt;
&lt;div&gt;&amp;nbsp; HFINT source with no crystal-startup cost paid per sampling cycle.&lt;/div&gt;
&lt;div&gt;&amp;nbsp; Measured burst durations match our own explicit &lt;span&gt;`k_msleep()`&lt;/span&gt; budget with&lt;/div&gt;
&lt;div&gt;&amp;nbsp; no unexplained residual latency, confirming this by measurement as well&lt;/div&gt;
&lt;div&gt;&amp;nbsp; as by code inspection.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;## 8. Request for support: &lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;`LOADSW1`&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;`LDO1`&lt;/span&gt;&lt;span&gt; idle current&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;This is the primary open question and the main blocker to reaching the&lt;/div&gt;
&lt;div&gt;final target.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;**Observation:**&lt;/span&gt; enabling the nPM1300&amp;#39;s &lt;span&gt;`LOADSW1`&lt;/span&gt;/&lt;span&gt;`LDO1`&lt;/span&gt; output alone &amp;mdash; no&lt;/div&gt;
&lt;div&gt;I2C traffic to any device on the rail, no sensor reads, nothing else&lt;/div&gt;
&lt;div&gt;changed &amp;mdash; increases current from a 3.3 &amp;micro;A baseline (SoC in System ON IDLE,&lt;/div&gt;
&lt;div&gt;GRTC + BLE only, this rail disabled) to &lt;span&gt;**~250&amp;ndash;275 &amp;micro;A**&lt;/span&gt;, and this figure is&lt;/div&gt;
&lt;div&gt;&lt;span&gt;**stable over multi-minute windows**&lt;/span&gt; (not a decaying transient).&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;**Isolation performed (9 independent single-variable tests, all confirm the&lt;/div&gt;
&lt;div&gt;same ~250&amp;ndash;275 &amp;micro;A):**&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;| # | Variable tested | Result |&lt;/div&gt;
&lt;div&gt;|---|---|---|&lt;/div&gt;
&lt;div&gt;| 1 | Wait up to 5 s for INT1 to settle before power-down | No effect |&lt;/div&gt;
&lt;div&gt;| 2 | &lt;span&gt;`WAKE_UP_DUR`&lt;/span&gt; debounce register (separate from the 31 mg threshold, which is never modified) | No effect |&lt;/div&gt;
&lt;div&gt;| 3 | 200 ms stabilization delay before arming any interrupt | No effect |&lt;/div&gt;
&lt;div&gt;| 4 | UARTE console PM-runtime-suspend bug fixed (console hard-disabled) | No effect |&lt;/div&gt;
&lt;div&gt;| 5 | I2C bus explicitly suspended (&lt;span&gt;`PM_DEVICE_ACTION_SUSPEND`&lt;/span&gt;) | No effect |&lt;/div&gt;
&lt;div&gt;| 6 | Accelerometer low-power mode (&lt;span&gt;`XL_HM_MODE`&lt;/span&gt;) &amp;mdash; verified set via direct register read-back | Confirmed correct, not the cause |&lt;/div&gt;
&lt;div&gt;| 7 | &lt;span&gt;**No wake source armed at all**&lt;/span&gt; &amp;mdash; IMU powered/initialized only | Still ~260 &amp;micro;A &amp;mdash; rules out any wake mechanism |&lt;/div&gt;
&lt;div&gt;| 8 | &lt;span&gt;`power_en`&lt;/span&gt; regulator disabled (only &lt;span&gt;`imu_vdd`&lt;/span&gt;/LDO1 active) | Still ~260 &amp;micro;A |&lt;/div&gt;
&lt;div&gt;| 9 | &lt;span&gt;**&lt;/span&gt;&lt;span&gt;`imu_vdd`&lt;/span&gt;&lt;span&gt;/LDO1 alone**&lt;/span&gt; &amp;mdash; a single &lt;span&gt;`regulator_enable()`&lt;/span&gt; call, no I2C to the IMU at all, base = GRTC+RAM+BLE (3.3 &amp;micro;A) | &lt;span&gt;**~253 &amp;micro;A &amp;mdash; cause isolated to &lt;/span&gt;&lt;span&gt;`regulator_enable()`&lt;/span&gt;&lt;span&gt; on this rail itself, reproducible, fully reversible**&lt;/span&gt; |&lt;/div&gt;
&lt;div&gt;| 10 | Load Switch mode forced instead of LDO (register-verified &lt;span&gt;`LDSWSEL=0x00`&lt;/span&gt;) | &lt;span&gt;**275.67 &amp;micro;A &amp;mdash; worse than LDO, and outside the LDO&amp;#39;s rated voltage safety margin for the IMU**&lt;/span&gt; |&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;**Further checks performed, all negative:**&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;**nPM1300 errata [&lt;/span&gt;&lt;span&gt;38&lt;/span&gt;&lt;span&gt;]**&lt;/span&gt; (LOADSW/LDO startup-time-exceeds-spec, applicable&lt;/div&gt;
&lt;div&gt;&amp;nbsp; condition: BUCKs unloaded + no TWI traffic after enable) &amp;mdash; the Zephyr&lt;/div&gt;
&lt;div&gt;&amp;nbsp; driver (&lt;span&gt;`regulator_npm13xx_enable()`&lt;/span&gt;) already applies Nordic&amp;#39;s documented&lt;/div&gt;
&lt;div&gt;&amp;nbsp; workaround (a 2 ms delay + one &lt;span&gt;`LDSWSTATUS`&lt;/span&gt; read). We extended this to 20&lt;/div&gt;
&lt;div&gt;&amp;nbsp; reads over 100 ms: &lt;span&gt;**no change (253 &amp;micro;A)**&lt;/span&gt; &amp;mdash; errata [&lt;span&gt;38&lt;/span&gt;] ruled out.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;**Shared microphone rail:**&lt;/span&gt; &lt;span&gt;`imu_vdd`&lt;/span&gt; and the on-board PDM microphone&amp;#39;s&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &lt;span&gt;`dmic_vdd`&lt;/span&gt; are the same physical LDO1 node (Seeed&amp;#39;s own devicetree labels&lt;/div&gt;
&lt;div&gt;&amp;nbsp; it &lt;span&gt;`imu_vdd: dmic_vdd: LDO1`&lt;/span&gt;). Driving the floating &lt;span&gt;`PDM_CLK`&lt;/span&gt; pin to a&lt;/div&gt;
&lt;div&gt;&amp;nbsp; defined low level: &lt;span&gt;**no change (253 &amp;micro;A)**&lt;/span&gt; &amp;mdash; ruled out.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;**&lt;/span&gt;&lt;span&gt;`LDSWCONFIG`&lt;/span&gt;&lt;span&gt;**&lt;/span&gt; (soft-start / active-discharge register): read back at&lt;/div&gt;
&lt;div&gt;&amp;nbsp; its reset value (&lt;span&gt;`0x00`&lt;/span&gt;) on the build where &lt;span&gt;`regulator_enable()`&lt;/span&gt; is never&lt;/div&gt;
&lt;div&gt;&amp;nbsp; called &amp;mdash; nothing in our code writes it.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; **nPM1300 Product Specification, Table 23/24 (LOADSW/LDO electrical&lt;/div&gt;
&lt;div&gt;&amp;nbsp; spec):** no quiescent/ground current figure is documented for this block&lt;/div&gt;
&lt;div&gt;&amp;nbsp; in either mode.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;**Reproduced against the vendor reference example**&lt;/span&gt; (Seeed&amp;#39;s own&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &lt;span&gt;`imu_click`&lt;/span&gt; sample, run unmodified): **same order of magnitude&lt;/div&gt;
&lt;div&gt;&amp;nbsp; (320&amp;ndash;350 &amp;micro;A)** &amp;mdash; this is not specific to our firmware.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;**Question for Nordic:**&lt;/span&gt; is there a known quiescent/ground current for the&lt;/div&gt;
&lt;div&gt;&lt;span&gt;`LOADSW1`&lt;/span&gt;/&lt;span&gt;`LDO1`&lt;/span&gt; block on the nPM1300 that is not captured in the&lt;/div&gt;
&lt;div&gt;datasheet&amp;#39;s electrical-specification tables, or a configuration step&lt;/div&gt;
&lt;div&gt;(beyond mode, voltage, soft-start, and active-discharge, all already&lt;/div&gt;
&lt;div&gt;checked) required to reach a low idle current in LDO mode with no load?&lt;/div&gt;
&lt;div&gt;Given this rail&amp;#39;s current dominates ~70&amp;ndash;80% of our per-cycle cost, resolving&lt;/div&gt;
&lt;div&gt;it is the single highest-value remaining step toward the 5&amp;ndash;6 &amp;micro;A target.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;## 9. Secondary observation (not yet confirmed as a recurring cost)&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;The build links in the full NCS security stack &amp;mdash; &lt;span&gt;`mbedtls`&lt;/span&gt;, PSA Crypto,&lt;/div&gt;
&lt;div&gt;and the CRACEN hardware crypto accelerator/KMU (&lt;span&gt;`CONFIG_NRF_SECURITY=y`&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;&lt;span&gt;`CONFIG_PSA_CRYPTO_DRIVER_CRACEN=y`&lt;/span&gt;, &lt;span&gt;`CONFIG_CRACEN_IKG_SEED_LOAD=y`&lt;/span&gt;, etc.)&lt;/div&gt;
&lt;div&gt;&amp;mdash; for a BLE &lt;span&gt;**broadcaster-only**&lt;/span&gt; application with no pairing, no&lt;/div&gt;
&lt;div&gt;connections, and no application-level cryptography. This appears to be&lt;/div&gt;
&lt;div&gt;pulled in transitively through the Bluetooth host/controller&amp;#39;s own&lt;/div&gt;
&lt;div&gt;randomness requirements on this SoC family, not something our application&lt;/div&gt;
&lt;div&gt;code requests. Because &lt;span&gt;`bt_enable()`&lt;/span&gt; is now called only once (at true cold&lt;/div&gt;
&lt;div&gt;boot, not every cycle), any associated CRACEN/KMU provisioning cost would&lt;/div&gt;
&lt;div&gt;be a one-time boot cost rather than a recurring one &amp;mdash; it does not appear in&lt;/div&gt;
&lt;div&gt;our 10 s steady-state measurements, and we have &lt;span&gt;**not**&lt;/span&gt; identified evidence&lt;/div&gt;
&lt;div&gt;of it holding any power domain active in the background afterward. Flagged&lt;/div&gt;
&lt;div&gt;here for completeness in case Nordic support recognizes a known interaction&lt;/div&gt;
&lt;div&gt;between this and the idle current figures above.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;## 10. Key source files (current, significant configuration only)&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;### 10.1 &lt;/span&gt;&lt;span&gt;`boards/xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay`&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;```dts&lt;/div&gt;
&lt;div&gt;&amp;amp;power_en {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; /delete-property/ regulator-boot-on;&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;#include &amp;lt;zephyr/dt-bindings/regulator/npm13xx.h&amp;gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;amp;pmic {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; regulators {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; imu_vdd: LDO1 {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; regulator-min-microvolt = &amp;lt;3300000&amp;gt;;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; regulator-max-microvolt = &amp;lt;3300000&amp;gt;;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; };&lt;/div&gt;
&lt;div&gt;&amp;nbsp; };&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;/* Deferred-init: SYS_INIT would otherwise run before main() powers imu_vdd. */&lt;/div&gt;
&lt;div&gt;&amp;amp;lsm6ds3tr_c {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; zephyr,deferred-init;&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;/* Deferred-init: charger init() writes ~12-15 I2C transactions at every&lt;/div&gt;
&lt;div&gt;&amp;nbsp;* boot even without a battery read; only needed when a reading is due. */&lt;/div&gt;
&lt;div&gt;&amp;amp;pmic_charger {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; zephyr,deferred-init;&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;/ {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; cpuapp_sram@2007ec00 {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; compatible = &amp;quot;zephyr,memory-region&amp;quot;, &amp;quot;mmio-sram&amp;quot;;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; reg = &amp;lt;0x2007ec00 DT_SIZE_K(4)&amp;gt;;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; zephyr,memory-region = &amp;quot;RetainedMem&amp;quot;;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; status = &amp;quot;okay&amp;quot;;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; retainedmem0: retainedmem {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; compatible = &amp;quot;zephyr,retained-ram&amp;quot;;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; status = &amp;quot;okay&amp;quot;;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; };&lt;/div&gt;
&lt;div&gt;&amp;nbsp; };&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp; aliases {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; retainedmemdevice = &amp;amp;retainedmem0;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; };&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;amp;cpuapp_sram {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; reg = &amp;lt;0x20000000 DT_SIZE_K(507)&amp;gt;;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; ranges = &amp;lt;0x0 0x20000000 0x7ec00&amp;gt;;&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;amp;pmic_leds {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; status = &amp;quot;disabled&amp;quot;;&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;amp;py25q64 {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; status = &amp;quot;okay&amp;quot;;&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;amp;usbhs {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; status = &amp;quot;disabled&amp;quot;;&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&amp;amp;usbhs_wrapper {&lt;/div&gt;
&lt;div&gt;&amp;nbsp; status = &amp;quot;disabled&amp;quot;;&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;div&gt;```&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;### 10.2 &lt;/span&gt;&lt;span&gt;`prj.conf`&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;```ini&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_SERIAL&lt;/span&gt;&lt;span&gt;=n&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_CONSOLE&lt;/span&gt;&lt;span&gt;=n&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_UART_CONSOLE&lt;/span&gt;&lt;span&gt;=n&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_PRINTK&lt;/span&gt;&lt;span&gt;=n&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_BOOT_BANNER&lt;/span&gt;&lt;span&gt;=n&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_NCS_BOOT_BANNER&lt;/span&gt;&lt;span&gt;=n&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_GPIO&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_SPI&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_FLASH&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_SPI_NOR&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;# Tickless idle -- required for k_sleep() to be a real WFI sleep between&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;# ~1 s poll cycles, not a busy/software wait.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_PM&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_PM_DEVICE&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_PM_DEVICE_RUNTIME&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_HWINFO&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;# Official NCS library, explicitly supported for CONFIG_SOC_NRF54LM20A_CPUAPP&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;# (nrf/lib/ram_pwrdn) -- powers down RAM sections beyond the linked image&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;# end (~23.5 KB used out of 507 KB retained by the overlay).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_RAM_POWER_DOWN_LIBRARY&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;CONFIG_BT&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_BT_BROADCASTER&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_BT_DEVICE_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;XIAO-DOOR&amp;quot;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;CONFIG_RETAINED_MEM&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_CRC&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;CONFIG_SENSOR&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_NPM13XX_CHARGER&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_MFD&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;CONFIG_REGULATOR&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;CONFIG_MAIN_STACK_SIZE&lt;/span&gt;&lt;span&gt;=4096&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE&lt;/span&gt;&lt;span&gt;=2048&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;CONFIG_REBOOT&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;```&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;### 10.3 &lt;/span&gt;&lt;span&gt;`src/main.c`&lt;/span&gt;&lt;span&gt; &amp;mdash; structure&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;`sample_motion()`&lt;/span&gt; &amp;mdash; enables &lt;span&gt;`imu_vdd`&lt;/span&gt;, re-asserts &lt;span&gt;`CTRL3_C`&lt;/span&gt;/&lt;span&gt;`CTRL6_C`&lt;/span&gt; by&lt;/div&gt;
&lt;div&gt;&amp;nbsp; direct I2C write every cycle (see &amp;sect;4.3), sets ODR (208 Hz), reads&lt;/div&gt;
&lt;div&gt;&amp;nbsp; X/Y/Z in one burst I2C transaction, disables &lt;span&gt;`imu_vdd`&lt;/span&gt;.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; &lt;span&gt;`main()`&lt;/span&gt; &amp;mdash; one-time init (LED GPIOs released, external-flash pins forced&lt;/div&gt;
&lt;div&gt;&amp;nbsp; to a defined low-leakage state, fixed BLE identity, &lt;span&gt;`bt_enable()`&lt;/span&gt;,&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &lt;span&gt;`power_down_unused_ram()`&lt;/span&gt;), then an infinite loop:&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &lt;span&gt;`sample_motion()`&lt;/span&gt; &amp;rarr; send BTHome health frame if due (15 min cadence) &amp;rarr;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &lt;span&gt;`k_sleep(K_MSEC(1000))`&lt;/span&gt;.&lt;/div&gt;
&lt;div&gt;&lt;span&gt;-&lt;/span&gt; No &lt;span&gt;`sys_poweroff()`&lt;/span&gt; / &lt;span&gt;`z_nrf_grtc_wakeup_prepare()`&lt;/span&gt; anywhere &amp;mdash; the SoC is&lt;/div&gt;
&lt;div&gt;&amp;nbsp; never rebooted during normal operation.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;Full source available on request; this report includes only the&lt;/div&gt;
&lt;div&gt;sections materially relevant to the power-consumption question in &amp;sect;8.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;## 11. Summary&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;| | |&lt;/div&gt;
&lt;div&gt;|---|---|&lt;/div&gt;
&lt;div&gt;| Current measured (steady state, no motion) | ~20&amp;ndash;22 &amp;micro;A |&lt;/div&gt;
&lt;div&gt;| Target | 5&amp;ndash;6 &amp;micro;A |&lt;/div&gt;
&lt;div&gt;| Sibling reference (nRF52840, same function) | ~10 &amp;micro;A |&lt;/div&gt;
&lt;div&gt;| Dominant remaining cost | &lt;span&gt;`imu_vdd`&lt;/span&gt;/LDO1 rail: ~250&amp;ndash;300 &amp;micro;A whenever enabled, cause not yet identified (&amp;sect;8) |&lt;/div&gt;
&lt;div&gt;| Everything else checked against the datasheet | Already at documented/optimal defaults (&amp;sect;7.1) |&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;We would welcome any guidance on the &lt;span&gt;`LOADSW1`&lt;/span&gt;/&lt;span&gt;`LDO1`&lt;/span&gt; idle-current question&lt;/div&gt;
&lt;div&gt;in &amp;sect;8 &amp;mdash; it is, by a wide margin, the single highest-leverage item standing&lt;/div&gt;
&lt;div&gt;between the current measured result and the project&amp;#39;s target.&lt;/div&gt;
&lt;div class="yj6qo"&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>