<?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>Inquiry regarding UICR OTP access on nRF54L series via TF-M</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/127101/inquiry-regarding-uicr-otp-access-on-nrf54l-series-via-tf-m</link><description>Hello. 
 I am considering using the UICR OTP to store device-specific identification information. My understanding is that when accessing this area from a Non-secure application, it is necessary to use the TF-M IOCTL library and perform the read through</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Tue, 24 Feb 2026 23:25:09 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/127101/inquiry-regarding-uicr-otp-access-on-nrf54l-series-via-tf-m" /><item><title>RE: Inquiry regarding UICR OTP access on nRF54L series via TF-M</title><link>https://devzone.nordicsemi.com/thread/561987?ContentTypeID=1</link><pubDate>Tue, 24 Feb 2026 23:25:09 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:376862c4-6ea5-424f-9647-59e76eb1a944</guid><dc:creator>a.da</dc:creator><description>&lt;p&gt;Hi Sigurd,&amp;nbsp;thanks for your reply.&lt;/p&gt;
&lt;p&gt;I am glad to hear that my suggestion was helpful and is being integrated into the official SDK.&lt;/p&gt;
&lt;p&gt;I really appreciate your quick response and for taking prompt action on this matter.&lt;br /&gt;I agree with the plan to use the modified SDK for the time being, and I look forward to the official SDK release that includes this fix.&lt;/p&gt;
&lt;p&gt;Thank you again for your excellent support!&lt;/p&gt;
&lt;p&gt;a.da&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Inquiry regarding UICR OTP access on nRF54L series via TF-M</title><link>https://devzone.nordicsemi.com/thread/561967?ContentTypeID=1</link><pubDate>Tue, 24 Feb 2026 15:33:36 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9f1fa2ef-307c-462e-9756-3ba703306139</guid><dc:creator>Sigurd Hellesvik</dc:creator><description>&lt;p&gt;&lt;a href="https://github.com/nrfconnect/sdk-nrf/pull/27215"&gt;github.com/.../27215&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Inquiry regarding UICR OTP access on nRF54L series via TF-M</title><link>https://devzone.nordicsemi.com/thread/561964?ContentTypeID=1</link><pubDate>Tue, 24 Feb 2026 15:08:19 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a4b0e9df-f21a-4e04-b012-c2f37391c21f</guid><dc:creator>Sigurd Hellesvik</dc:creator><description>&lt;p&gt;Hi a.da,&lt;/p&gt;
&lt;p&gt;I will continue to help with this ticket.&lt;/p&gt;
&lt;p&gt;I agree with you, and this functionality seems to be missing from the SDK.&lt;/p&gt;
&lt;p&gt;The suggested modification you have made seems reasonable to me. I will test it and then make a PR to sdk-nrf with this change. Then the devs will review the PR to make sure we are correct, and it will eventually be merged and maintained in the SDK.&lt;/p&gt;
&lt;p&gt;I will link to the PR here once I made it, so you can follow the progress.&lt;/p&gt;
&lt;p&gt;In the meantime, I think your best option is to use your modified SDK. Then you can update once the SDK is updated to a version containing the official fix.&lt;/p&gt;
&lt;p&gt;Does this sound good to you?&lt;/p&gt;
&lt;p&gt;Regards,&lt;br /&gt;Sigurd Hellesvik&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Inquiry regarding UICR OTP access on nRF54L series via TF-M</title><link>https://devzone.nordicsemi.com/thread/561902?ContentTypeID=1</link><pubDate>Tue, 24 Feb 2026 04:46:24 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:15f1bb89-4b76-410c-aa6f-75d27ba8fb75</guid><dc:creator>a.da</dc:creator><description>&lt;p&gt;Hi Elfving, thanks for your reply.&lt;/p&gt;
[quote userid="103347" url="~/f/nordic-q-a/127101/inquiry-regarding-uicr-otp-access-on-nrf54l-series-via-tf-m/561787"]Could you expand a bit on your use-case? I just want to make sure that your use-case really requires changing the SDK.[/quote]
&lt;p&gt;I intend to store product-specific, read-only unique information in the SoC during production.&lt;br /&gt;These values are custom-defined and independent of FICR.&lt;br /&gt;Since the UICR OTP area is intended for custom user purposes, I am specifically looking for a method to access the UICR, not the FICR.&lt;/p&gt;
&lt;p&gt;To test this, I added the following code to the main() function of a Non-secure application:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;uint32_t result = 0;
uint32_t addr_min = (intptr_t)(&amp;amp;(NRF_UICR_S-&amp;gt;OTP[(288UL)]));
uint32_t addr_max = (intptr_t)(&amp;amp;(NRF_UICR_S-&amp;gt;OTP[UICR_OTP_MaxIndex]));
uint32_t data[32] = {0};
enum tfm_platform_err_t tfm_err = TFM_PLATFORM_ERR_SUCCESS;

tfm_err = tfm_platform_mem_read(&amp;amp;data, addr_min, sizeof(data), &amp;amp;result);
LOG_INF(&amp;quot;otp custom usage addr: 0x%08x-0x%08x, result: %d, tfm_err: %d&amp;quot;, addr_min, addr_max, result, tfm_err);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Additionally, I found that &lt;code&gt;&amp;#39;UICR_OTP_MaxIndex&amp;#39;&lt;/code&gt; is defined &lt;code&gt;&amp;#39;nrf54l15_types.h&amp;#39;&lt;/code&gt; as follows:&lt;/p&gt;
&lt;p&gt;C:\ncs\v3.2.2\modules\hal\nordic\nrfx\bsp\stable\mdk&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/* UICR_OTP: One time programmable memory */
  #define UICR_OTP_MaxCount (320UL)                  /*!&amp;lt; Max size of OTP[320] array.                                          */
  #define UICR_OTP_MaxIndex (319UL)                  /*!&amp;lt; Max index of OTP[320] array.                                         */
  #define UICR_OTP_MinIndex (0UL)                    /*!&amp;lt; Min index of OTP[320] array.                                         */
  #define UICR_OTP_ResetValue (0xFFFFFFFFUL)         /*!&amp;lt; Reset value of OTP[320] register.                                    */&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Below are the logs when using the SDK as-is, and the logs after applying modifications to the SDK:&lt;/p&gt;
&lt;p&gt;Log 1 (Original SDK):&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;[00:00:00.006,609] &amp;lt;inf&amp;gt; main: otp custom usage addr: 0x00ffd980-0x00ffd9fc, result: -1, tfm_err: 2&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Log 2 (Modified SDK):&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;[00:00:00.007,396] &amp;lt;inf&amp;gt; main: otp custom usage addr: 0x00ffd980-0x00ffd9fc, result: 0, tfm_err: 0&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;I applied the following modification to&amp;nbsp;&lt;code&gt;&amp;#39;tfm_platform_user_memory_ranges.h&amp;#39;&lt;/code&gt; in the SDK:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;// #if defined(NRF91_SERIES) || defined(NRF53_SERIES)
#if defined(NRF91_SERIES) || defined(NRF53_SERIES) || defined(NRF54L_SERIES)
#define UICR_OTP_ADDR (NRF_UICR_S_BASE + offsetof(NRF_UICR_Type, OTP))
#define UICR_OTP_SIZE (sizeof(NRF_UICR_S-&amp;gt;OTP))
#endif&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;I am using NCS v3.2.2 as the base.&lt;br /&gt;These results confirm that I can access the OTP area if I modify the SDK.&lt;br /&gt;However, I want to avoid modifying the SDK locally, so I would like to confirm if there is an alternative method to enable this access.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;a.da&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Inquiry regarding UICR OTP access on nRF54L series via TF-M</title><link>https://devzone.nordicsemi.com/thread/561787?ContentTypeID=1</link><pubDate>Mon, 23 Feb 2026 08:16:25 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7d47ddd6-cade-4bad-ab07-66cfc92df8f1</guid><dc:creator>Elfving</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;Like it says&lt;a href="https://github.com/nrfconnect/sdk-nrf/blob/6a7ecf4969c6a773a717cea98609fc12da4f2038/modules/trusted-firmware-m/tfm_boards/services/include/tfm_platform_user_memory_ranges.h#L16-L19"&gt; a bit further up in&amp;nbsp;tfm_platform_user_memory_ranges.h&lt;/a&gt;,&amp;nbsp;&amp;nbsp;&lt;em&gt;&amp;quot;On platforms like nrf53 we provide a service for reading out FICR. But on platforms like nrf54l, FICR is hardware fixed to NS so&amp;nbsp;the non-secure image can just read it directly.&amp;quot;. &lt;/em&gt;That is why 54L is omitted here, it is by design &lt;span class="emoticon" data-url="https://devzone.nordicsemi.com/cfs-file/__key/system/emoji/1f642.svg" title="Slight smile"&gt;&amp;#x1f642;&lt;/span&gt;&lt;/p&gt;
[quote user=""]&lt;ul&gt;&lt;li&gt;If I need to include the OTP range in the allowed memory regions, is there a recommended method other than directly modifying &lt;code&gt;&lt;span&gt;&amp;#39;tfm_platform_user_memory_ranges.h&amp;#39;&lt;/span&gt;&lt;/code&gt; within the SDK?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;[/quote]
&lt;p&gt;Could you expand a bit on your use-case? I just want to make sure that your use-case really requires changing the SDK.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Elfving&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>