<?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>nRF51 boot-loader SystemInit() function</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/72641/nrf51-boot-loader-systeminit-function</link><description>The device we are using is nRF51822. It uses a bootloader from the Nordic SDK 11.0.0 
 The boot-loader we are using for the nRF51822 has several blocks of code in the SystemInit() function that are related to Product Anomaly Notificatiions: 
 
 PAN 26</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Fri, 19 Mar 2021 02:48:47 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/72641/nrf51-boot-loader-systeminit-function" /><item><title>RE: nRF51 boot-loader SystemInit() function</title><link>https://devzone.nordicsemi.com/thread/300803?ContentTypeID=1</link><pubDate>Fri, 19 Mar 2021 02:48:47 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:97e70a6d-ec3d-44d6-a25e-e935fe856a39</guid><dc:creator>Phil</dc:creator><description>&lt;p&gt;Edvin,&lt;/p&gt;
&lt;p&gt;The VCC supply in our circuit decays to approximately 420mV when the supply is disconnected. It stays above 300mV for several minutes and decays very slowly. So that is likely to be the issue.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;We will test the nRF51 POR after when the VCC is shorted to 0V.&lt;/p&gt;
&lt;p&gt;We have many devices with this issue in the field, so it is not an option to add the 1Mohm resistor as suggested&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Phil Matthews&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF51 boot-loader SystemInit() function</title><link>https://devzone.nordicsemi.com/thread/300257?ContentTypeID=1</link><pubDate>Wed, 17 Mar 2021 00:24:22 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:460f8774-feb4-443a-a8f2-d49be6d5a1b1</guid><dc:creator>Phil</dc:creator><description>&lt;p&gt;Edvin,&lt;/p&gt;
&lt;p&gt;This is an excellent response.&lt;/p&gt;
&lt;p&gt;This may be the problem:&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;em&gt;&lt;strong&gt;However, if the supply voltage increases from a few hundred mV instead of zero, POR cannot be ensured, and the chip can enter into an unresponsive state.&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;&lt;/em&gt;We will test for this as you have recommended.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Regarding your other points, have no intention of modifying the SystemInit() function.&amp;nbsp; I just wanted to know what was going on.&amp;nbsp; The while() loop was making me nervous.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We are using a Taiyo-Yuden BLE module, and it is their recommendation to place the functionSetResetXtalFreq_32MHz() in SystemInit().&amp;nbsp; However, I&amp;#39;ll move it to main so the MDK files are not modified.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Thanks&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Phil Matthews&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF51 boot-loader SystemInit() function</title><link>https://devzone.nordicsemi.com/thread/300074?ContentTypeID=1</link><pubDate>Tue, 16 Mar 2021 10:57:49 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:89d1cb40-82c5-47f8-83af-74dbaf77a26e</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I discussed a bit with a colleague of mine, and here is what we concluded with:&lt;/p&gt;
&lt;p&gt;You should&amp;nbsp;&lt;strong&gt;not&lt;/strong&gt; modify the MDK files. They are implemented on millions upon millions of devices, and there is nothing indicating that there is a bug here that is causing issues with your bootloader. So don&amp;#39;t change anything in the system_nrf51.c. It is used to identify what variant the chip is and execute some code based on this.&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t know specifically what are located on the addresses that you keep asking about, but it is not relevant. We should look elsewhere for the buggy behavior on your devices.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;It looks like you have placed SetResetXtalFreq_32MHz() in the start of SystemInit(). You shouldn&amp;#39;t do that. You can place it in the start of main(), after the mdk files (as-is) are done doing what they should do.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;For debugging purposes, you can try to toggle a gpio in the start of SystemInit() to see whether the chip is starting at all in the cases where it fails. If you suspect that there may be some layout issues, then you can upload your layout, and we can do a review.&lt;/p&gt;
&lt;p&gt;Another thing: When you do your power cycle tests, can you please make sure that VDD is pulled below 0.3V before you power it back on in every test? We know that an incomplete power cycle can lead to unresponsive behavior until a full power on reset is performed.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Another thing that you can try for debugging purposes: You can try to add a 1Mohm pull-down resistor on the SWDIO pin. It may sound a bit contraintuitive, since there is a 13kohm internal pullup, but if the issue is related to the VDD not being pulled low enough during your power cycle testing, this may have an effect.&lt;/p&gt;
&lt;p&gt;Some relevant information copy-pasted from another private ticket here on DevZone:&lt;/p&gt;
&lt;p&gt;It may be that what you are experiencing is due to a missing reset condition. In the nRF51 series, a power-on-reset (POR) event is triggered when the supply voltage is monotonically increasing from zero (0v) to a valid operating voltage (VDD) in less than 100ms. However, if the supply voltage increases from a few hundred mV instead of zero, POR cannot be ensured, and the chip can enter into an unresponsive state.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If the device is powered up from a voltage other than zero, in rare circumstances, the internal POR circuit may not trigger. This leads to the device entering an unresponsive state. Such a scenario may happen if, for example, capacitors connected to the power supply have not been fully discharged.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The unresponsive state is reset by a valid POR event, such as power cycle (&amp;lt;0.3V). Or an off-chip POR circuit can be added to facilitate the triggering of the POR event under these conditions. As an example of an off-chip POR circuit can be adding 1Mohm resistor between SWDIO/nRESET and GND.&lt;/p&gt;
&lt;p&gt;An external 1Mohm pull down on the SWDIO/nReset pin to GND will create an additional source for reset on power up. The drawback is an increased base current of about 2-3µA (VDD/1Mohm).&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Can you try in your setup with an external 1Mohm and report back with the results?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF51 boot-loader SystemInit() function</title><link>https://devzone.nordicsemi.com/thread/299968?ContentTypeID=1</link><pubDate>Tue, 16 Mar 2021 00:41:26 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6a3f2057-d06b-4b7c-9d85-bb15665fc17b</guid><dc:creator>Phil</dc:creator><description>&lt;p&gt;Edvin&lt;/p&gt;
&lt;p&gt;In Product Anomaly Notice nRRF51822-PAN v3.3 there is:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; PAN 78: HFCLK: Software reset does not work properly when 32MHz is used as a clock source.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;We are using a 32MHz XTAL.&amp;nbsp; The 32MHz XTAL is selected by writing to UICR register&amp;nbsp;&lt;span&gt;NRF_UICR-&amp;gt;XTALFREQ = 0xFFFFFF00;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;// 32MHz.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;In the boot-loader I am sure the 32MHz XTAL is not running, only the 16MHz internal RC HFCLK.&amp;nbsp; Also the boot-loader doesn&amp;#39;t issue software reset.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;However, are you aware of any problems at Power-on reset or Hardware reset when 32MHz XTAL is selected?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Phil Matthews&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF51 boot-loader SystemInit() function</title><link>https://devzone.nordicsemi.com/thread/299958?ContentTypeID=1</link><pubDate>Mon, 15 Mar 2021 22:29:39 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:1f59e674-c8a4-4917-bf25-abd6f332d711</guid><dc:creator>Phil</dc:creator><description>&lt;p&gt;Edvin,&lt;/p&gt;
&lt;p&gt;I have this documentation from the nRF51802-PAN-v1.3.&amp;nbsp; It doesn&amp;#39;t tell me much.&amp;nbsp; Specifically it doesn&amp;#39;t say what is at those addresses or why these values are being written to them.&amp;nbsp; Our concern is the while() loop. Potentially the code could end up here and loop forever if the value at address&amp;nbsp;0x4006EC00 does not become 0x0001.&amp;nbsp; I have found when I force this code to execute, them the nRF51 fails to run on every second Power-On Reset.&lt;/p&gt;
&lt;p&gt;I am still testing to determine if our code ever gets to this while(0 loop.&amp;nbsp; I have been inserting code to toggle pins P0.17 or P0.19 at various places in the bootloader.&amp;nbsp; So far it doesn&amp;#39;t ever get to the while loop.&amp;nbsp; Also tracing through the function&amp;nbsp;&lt;em&gt;is_peripheral_domain_setup_needed()&lt;/em&gt; with the values I read from flash using JLink, this function returns false.&amp;nbsp; So maybe this is not the problem.&amp;nbsp; It would be nice to know what is going here.&lt;br /&gt;&lt;br /&gt;According Nordic documentation, the nRF51802 is the low-cost variant of the nRF51822.&amp;nbsp; They share the same reference manual.&amp;nbsp; As far as I can tell they have the same peripherals and memory map.&lt;/p&gt;
&lt;p&gt;To answer your other questions, we know bootloader doesn&amp;#39;t jump to the application because there is no UART comms, the current consumption is high and there is no BLE advertising.&amp;nbsp; I have inserted code in the bootloader to toggle GPIO pins so I know where the code gets to and verified that when the nRF51 fails the boot-loader main() is not called.&amp;nbsp; I got to the point that the boot-loader always gets to the start of SystemInit() but not to the end.&amp;nbsp; So that&amp;#39;s why I think it has something to so with these fix-up functions.&lt;br /&gt;&lt;br /&gt;I have commented out all these three blocks of PAN fix-up functions and so far the nRF51 has always started Ok.&amp;nbsp; I&amp;#39;m still testing this.&amp;nbsp; Is it ok to remove these three blocks of code?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Phil Matthews&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF51 boot-loader SystemInit() function</title><link>https://devzone.nordicsemi.com/thread/299869?ContentTypeID=1</link><pubDate>Mon, 15 Mar 2021 15:16:28 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4ebbc3ed-557a-4afa-8e0a-9f0da82b7ea1</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello Phil,&lt;/p&gt;
&lt;p&gt;All I know is from the PAN:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://devzone.nordicsemi.com/resized-image/__size/320x240/__key/communityserver-discussions-components-files/4/pastedimage1615821030254v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;So it is related to the RAM access. It looks like it only applies to the nRF51802, so it probably doesn&amp;#39;t apply to your chip.&lt;/p&gt;
&lt;p&gt;Does the code ever reach this statement? If not, I don&amp;#39;t see why we need to worry about this address. I could spend some days trying to figure out who wrote the workaround, and what it points to, but I don&amp;#39;t really see the use case if is_peripheral_domain_setup_needed() never returns true.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
[quote user="Phil Matthews"]When it fails when have found that the application doesn&amp;#39;t run and that the boot-loader main() function doesn&amp;#39;t get called.[/quote]
&lt;p&gt;&amp;nbsp;How do you determine this? Lack of advertisements, or do you have some other way of checking whether or not your application is started?&lt;/p&gt;
&lt;p&gt;Do you have a way to reproduce this while debugging or monitoring some sort of logs?&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF51 boot-loader SystemInit() function</title><link>https://devzone.nordicsemi.com/thread/299624?ContentTypeID=1</link><pubDate>Mon, 15 Mar 2021 00:35:36 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:89b1c7cc-a972-4208-9c41-d2e74528d17e</guid><dc:creator>Phil</dc:creator><description>&lt;p&gt;Edvin,&lt;/p&gt;
&lt;p&gt;For your information we set UICR register XTALFREQ to select 32MHz XTAL.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp;NRF_UICR-&amp;gt;XTALFREQ = 0xFFFFFF00;&lt;span&gt; &lt;/span&gt;// 32MHz&lt;/p&gt;
&lt;p&gt;This set in the bootloader with the following code:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;void SetResetXtalFreq_32MHz(void)
{

	if (NRF_UICR-&amp;gt;XTALFREQ == 0xFFFFFFFF)
	{
		// Enable NVM write access
		NRF_NVMC-&amp;gt;CONFIG = NVMC_CONFIG_WEN_Wen &amp;lt;&amp;lt; NVMC_CONFIG_WEN_Pos;
		while (NRF_NVMC-&amp;gt;READY == NVMC_READY_READY_Busy)
		{ }
		
		NRF_UICR-&amp;gt;XTALFREQ = 0xFFFFFF00;			// 32MHz
		
		// Set NVM access to read-only
		NRF_NVMC-&amp;gt;CONFIG = NVMC_CONFIG_WEN_Ren &amp;lt;&amp;lt; NVMC_CONFIG_WEN_Pos;
		while (NRF_NVMC-&amp;gt;READY == NVMC_READY_READY_Busy)
		{ }

		NVIC_SystemReset();					// Changes take effect after reset
	}		
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This code only runs once, because after XTALFREQ has been set to select the 32MHz XTAL the first if() statement is false.&amp;nbsp; This code is from Taiyo-Yuden.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Phil Matthews&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF51 boot-loader SystemInit() function</title><link>https://devzone.nordicsemi.com/thread/299623?ContentTypeID=1</link><pubDate>Mon, 15 Mar 2021 00:20:27 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:12407eb6-6f4c-4d7f-8b12-6b84483ad15e</guid><dc:creator>Phil</dc:creator><description>&lt;p&gt;Edvin&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What is at these addresses in the nRF51822?&lt;br /&gt;0x4006EC00&lt;/li&gt;
&lt;li&gt;0x4006EC14&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These addresses are in the APB Peripheral address range, however these addresses are not within any of the peripheral instance ranges.&lt;/p&gt;
&lt;p&gt;For your information I commented out the line that calls &lt;strong&gt;is_peripheral_domain_setup_needed(), &lt;/strong&gt;to force the code block following it to run&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;//if (is_peripheral_domain_setup_needed())       // Force code block to run
{
    if (*(uint32_t volatile *)0x4006EC00 != 1)
    {
        *(uint32_t volatile *)0x4006EC00 = 0x9375;
            while (*(uint32_t volatile *)0x4006EC00 != 1){
            }
}
*(uint32_t volatile *)0x4006EC14 = 0xC0;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;After this, we found that the nRF51822 consistently failed to start every second Power-On Reset.&lt;/p&gt;
&lt;p&gt;We don&amp;#39;t know if this is significant or related to our problem,&amp;nbsp; It may not even be relevant since this is for PAN76 which is for nRF51802, and we are using nRF51822.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I seems odd to me that an address is written to with value 0x9375, then immediately there is a loop checking if this same address is 0x0001.&amp;nbsp; If the memory or peripheral at this address doesn&amp;#39;t set all the bits to exactly 0x0001 the code will be stuck in this loop forever.&lt;/p&gt;
&lt;p&gt;I know this is done in some peripherals, where the peripheral is written to then a bit is checked for some operation to complete.&amp;nbsp; But usually this checks for one bit, not all bits equal to an exact value.&lt;/p&gt;
&lt;p&gt;Phil Matthews&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF51 boot-loader SystemInit() function</title><link>https://devzone.nordicsemi.com/thread/299365?ContentTypeID=1</link><pubDate>Fri, 12 Mar 2021 00:50:59 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2adf6c87-d77d-47a0-b77c-d3e7a79b49d5</guid><dc:creator>Phil</dc:creator><description>&lt;p&gt;Edvin&lt;/p&gt;
&lt;p&gt;For your information I traced through the functions called in SystemInit() with the values I read from the flash memory in &lt;span&gt;0xF0000FE0 - 0xF0000FEC&amp;nbsp;&lt;/span&gt;using JLink.:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;is_manual_peripheral_setup_needed()&lt;/li&gt;
&lt;li&gt;is_disabled_in_debug_needed()&lt;/li&gt;
&lt;li&gt;is_peripheral_domain_setup_needed()&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All these functions should return false, and so the body of the if() statements should never run.&lt;br /&gt;&lt;br /&gt;Also I put GPIO pin toggle output in the body of each if() statement, and verified that these functions always return false.&lt;/p&gt;
&lt;p&gt;Do these functions even apply to our device nRF51822, HWID 0084?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Phil Matthews&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF51 boot-loader SystemInit() function</title><link>https://devzone.nordicsemi.com/thread/299360?ContentTypeID=1</link><pubDate>Thu, 11 Mar 2021 23:26:59 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5609780d-fd0a-4ac2-8137-e8d44416c44d</guid><dc:creator>Phil</dc:creator><description>&lt;p&gt;Edvin,&lt;/p&gt;
&lt;p&gt;For your information I read some registers from the FICR area using JLink:&lt;/p&gt;
&lt;p&gt;CONFIGID&amp;nbsp; &amp;nbsp; 0x1000005C&amp;nbsp; &amp;nbsp; &amp;nbsp;FFFF0084&lt;/p&gt;
&lt;p&gt;DEVICEID[0]&amp;nbsp; &amp;nbsp;0x10000060&amp;nbsp; &amp;nbsp;FDE42A07&lt;/p&gt;
&lt;p&gt;&lt;span&gt;DEVICEID[1]&amp;nbsp; &amp;nbsp;0x10000064&amp;nbsp; &amp;nbsp;25254449&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The device we are using is nRf51822.&lt;/p&gt;
&lt;p&gt;The Hardware ID (HWID) is 0084&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Phil Matthews&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF51 boot-loader SystemInit() function</title><link>https://devzone.nordicsemi.com/thread/299352?ContentTypeID=1</link><pubDate>Thu, 11 Mar 2021 21:39:28 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:80fecb2a-4a1a-4e3d-a66d-1727f3fd05a6</guid><dc:creator>Phil</dc:creator><description>&lt;p&gt;Edvin,&lt;/p&gt;
&lt;p&gt;Thanks for your reply.&lt;/p&gt;
&lt;p&gt;We are having problems and we think it may be in the boot-loader.&lt;/p&gt;
&lt;p&gt;At Power-On reset about 1 in 30 times the chip fails to start.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When it fails when have found that the application doesn&amp;#39;t run and that the boot-loader main() function doesn&amp;#39;t get called.&amp;nbsp; We have verified this by inserting code that toggles an I/O pin at various point in the boot-loader.&lt;/p&gt;
&lt;p&gt;This only occurs at Power-On rest, not hardware reset (via SWDIO pin) and not with software reset.&amp;nbsp; When the fault occurs, the only way to recover is with Power-on reset.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So far we have narrowed the problem down to the SystemInit() function in the boot-loader.&amp;nbsp; Therefore we would like to understand what is the the intention of the code in the SystemInit() function.&lt;/p&gt;
&lt;p&gt;When the code is reading addresses in the range 0xF0000FE0 - 0xF0000FEC&amp;nbsp; it looks like it checking for a chip variant.&amp;nbsp; For example in function&amp;nbsp;&lt;strong&gt;is_manual_peripheral_setup_needed(void)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I can read these address using the J-Link adaptor and nrfjprog.exe.&amp;nbsp; The values I read are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0xF0000FE0&amp;nbsp; &amp;nbsp;00000001&lt;/li&gt;
&lt;li&gt;0xF0000FE4&amp;nbsp; &amp;nbsp;00000040&lt;/li&gt;
&lt;li&gt;0xF0000FE8&amp;nbsp; &amp;nbsp;0000009C&lt;/li&gt;
&lt;li&gt;0xF0000FEC&amp;nbsp; 00000000&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Could you also tell us which register is at address 0x4006EC00.&lt;/p&gt;
&lt;p&gt;This is a reasonably serious issue for us.&amp;nbsp; You assistance will be greatly appreciated.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Phil Matthews&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nRF51 boot-loader SystemInit() function</title><link>https://devzone.nordicsemi.com/thread/299251?ContentTypeID=1</link><pubDate>Thu, 11 Mar 2021 12:42:32 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:776c809f-8116-4670-8070-f34f6026cea5</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;Are you experiencing any issues with the bootloader, or is this just something you would like to know?&lt;/p&gt;
&lt;p&gt;I guess it has a reason for why it is checking these registers, although I can&amp;#39;t say I know by heart what they are checking.&lt;/p&gt;
&lt;p&gt;What I can say is that it looks like&amp;nbsp;it is checking some peripherals&amp;#39; power registers, probably just to check whether or not they are turned on. Probably to save some power while sleeping.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>