<?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>pynrfjprog: FICR and UICR register offsets</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/111954/pynrfjprog-ficr-and-uicr-register-offsets</link><description>As far as I can tell, it is not currently possible to implement the following functionality in a simple way with pynrfjprog across the various device families. 
 * What is the connected device hardware ID? * What is the memory address of the UICR CUSTOMER</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Tue, 18 Jun 2024 13:05:19 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/111954/pynrfjprog-ficr-and-uicr-register-offsets" /><item><title>RE: pynrfjprog: FICR and UICR register offsets</title><link>https://devzone.nordicsemi.com/thread/489316?ContentTypeID=1</link><pubDate>Tue, 18 Jun 2024 13:05:19 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c165a75d-6bb8-4b35-bbf5-cc983cdcd54b</guid><dc:creator>Sigurd</dc:creator><description>&lt;p&gt;I agree, would have been nice to have a built-in function for this in&amp;nbsp;&lt;span&gt;pynrfjprog.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We are focusing on nrfutil now, so I have rised this as a feature request to the nrfutil developers:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="https://devzone.nordicsemi.com/nordic/nordic-blog/b/blog/posts/nrf-util-unified-command-line-utility"&gt;One tool to rule them all: nRF Util becomes a unified command line utility&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: pynrfjprog: FICR and UICR register offsets</title><link>https://devzone.nordicsemi.com/thread/489272?ContentTypeID=1</link><pubDate>Tue, 18 Jun 2024 11:37:45 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:56994e82-ab5e-4e81-a7fc-d1709aad2462</guid><dc:creator>JordanYates</dc:creator><description>&lt;p&gt;I&amp;#39;m not claiming that its particularly difficult to do what you have done, just that it seems odd that&lt;/p&gt;
&lt;p&gt;&amp;gt; a DLL that exports functions for programming and controlling nRF51, nRF52, nRF53 and nRF91 Series devices and lets developers create their own development tools using the DLLs API&lt;/p&gt;
&lt;p&gt;Does not expose basic constants for those very devices.&lt;/p&gt;
&lt;p&gt;It is also not quite as simple as you propose, even in that snippet there is an error and ommissions:&lt;/p&gt;
&lt;p&gt;* Device ID is a 64bit number, but you&amp;#39;re only reading 4 bytes&lt;br /&gt;* api.read() returns bytes, not an integer, whats the encoding? It&amp;#39;s certainly not clear if you&amp;#39;ve ever looked at the Zephyr function that gets the hardware ID: &lt;a href="https://github.com/zephyrproject-rtos/zephyr/blob/dcf42917c550714d2457947538b9e29d083e872e/drivers/hwinfo/hwinfo_nrf.c#L37-L38"&gt;https://github.com/zephyrproject-rtos/zephyr/blob/dcf42917c550714d2457947538b9e29d083e872e/drivers/hwinfo/hwinfo_nrf.c#L37-L38&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I say this not because I can&amp;#39;t answer these questions myself, but to hopefully make the point that it would be nice if the tools could provide these values directly.&lt;/p&gt;
&lt;p&gt;And of course users have 0 idea of whether a given register has the same memory address across all parts of a family. If they come across a sample like yours, not integrated into the tool itself, they are still going to need to double check against a datasheet to see if its valid for their particular part.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: pynrfjprog: FICR and UICR register offsets</title><link>https://devzone.nordicsemi.com/thread/489258?ContentTypeID=1</link><pubDate>Tue, 18 Jun 2024 10:52:37 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6502c5b4-6426-4f6f-9933-7baf1e68cb29</guid><dc:creator>Sigurd</dc:creator><description>&lt;p&gt;For&amp;nbsp;&lt;span&gt;pynrfjprog, I think you just need to do something like this as of now:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;pseudo code snippet:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;FICR_ADDR_DEVICEID = {&amp;quot;NRF91&amp;quot;: 0xFF0204, &amp;quot;NRF53&amp;quot;: 0xFF0204, &amp;quot;NRF52&amp;quot;: 0x10000060}

def read_ficr(self, snr):
    with LowLevel.API() as api:
        api.connect_to_emu_with_snr(snr)
        device_family = api.read_device_family()
        device_id_addr = FICR_ADDR_DEVICEID[device_family]
        device_id = api.read(device_id_addr, 4)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;For nrfutil we can look into adding a built-in function for this.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: pynrfjprog: FICR and UICR register offsets</title><link>https://devzone.nordicsemi.com/thread/488761?ContentTypeID=1</link><pubDate>Thu, 13 Jun 2024 23:20:01 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ebd25040-2d2d-4db6-87f4-4462a3c30485</guid><dc:creator>JordanYates</dc:creator><description>&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/pastedimage1718320789576v2.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;For the nRF52840 DEVICEID in the above, and the equivalent register that exists on all other Nordic parts I have seen.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: pynrfjprog: FICR and UICR register offsets</title><link>https://devzone.nordicsemi.com/thread/488707?ContentTypeID=1</link><pubDate>Thu, 13 Jun 2024 14:00:58 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9b2e8be1-76cf-4bdf-bb59-cfc21af63749</guid><dc:creator>Sigurd</dc:creator><description>&lt;p&gt;Hi!&lt;/p&gt;
&lt;p&gt;By &amp;quot;&lt;span&gt;&amp;nbsp;hardware ID&amp;nbsp;&amp;quot; what specific register are you referring to?&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: pynrfjprog: FICR and UICR register offsets</title><link>https://devzone.nordicsemi.com/thread/488199?ContentTypeID=1</link><pubDate>Mon, 10 Jun 2024 23:54:08 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:77c5a6b7-6d26-4505-ac1f-1e6cdbc5895c</guid><dc:creator>JordanYates</dc:creator><description>&lt;p&gt;From what I can tell, the only part of my problem that nrfutil helps with is determining the base UICR address, which is the one piece of information it is relatively easy to get from pynrfjprog.&lt;/p&gt;
&lt;p&gt;Neither &amp;quot;device list&amp;quot; or &amp;quot;device core-info&amp;quot; report the hardware ID, nor do they provide the UICR CUSTOMER/OTP memory address.&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t believe reading the hardware ID to identify the board and flashing some provisioning information to the memory region specifically intended for it is some crazy use case, it would be nice to get some exact commands that demonstrate how to do this.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: pynrfjprog: FICR and UICR register offsets</title><link>https://devzone.nordicsemi.com/thread/488125?ContentTypeID=1</link><pubDate>Mon, 10 Jun 2024 12:15:07 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8a3b1f63-79d2-41f4-81eb-b69ce39ca57f</guid><dc:creator>Sigurd</dc:creator><description>&lt;p&gt;Hi!&lt;/p&gt;
&lt;p&gt;If you want something for&amp;nbsp;&lt;span&gt;across all the various device families, I recommend looking into nrfutil for this&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>