<?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>nrf_fstorage_write() triggers HARD FAULT only when called from usage fault handler</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/87709/nrf_fstorage_write-triggers-hard-fault-only-when-called-from-usage-fault-handler</link><description>We are implementing a system where diagnostics info is saved to FLASH when one of the error handlers is called. Our code collects diagnostic registers and stack info, and saves them to a predetermined block in FLASH, 
 We use our own library which is</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 09 May 2022 11:13:52 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/87709/nrf_fstorage_write-triggers-hard-fault-only-when-called-from-usage-fault-handler" /><item><title>RE: nrf_fstorage_write() triggers HARD FAULT only when called from usage fault handler</title><link>https://devzone.nordicsemi.com/thread/366900?ContentTypeID=1</link><pubDate>Mon, 09 May 2022 11:13:52 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e40f2d3b-cf8b-4c4d-a3ac-b4e391b5203e</guid><dc:creator>danmcb</dc:creator><description>&lt;p&gt;I seem to have resolved the issue. I needed to clear the PENDING flag in the handler. Now the handler works correctly.&lt;/p&gt;
&lt;div style="background-color:#1e1e1e;color:#d4d4d4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, monospace;font-size:14px;font-weight:normal;line-height:19px;white-space:pre;"&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;UsageFault_Handler&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;SAVE_DIAGNOSTIC_REGISTERS&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;SCB&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;SHCSR&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &amp;amp;= !(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;SCB_SHCSR_USGFAULTPENDED_Msk&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;project_fatal_error&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;USAGE FAULT&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf_fstorage_write() triggers HARD FAULT only when called from usage fault handler</title><link>https://devzone.nordicsemi.com/thread/366878?ContentTypeID=1</link><pubDate>Mon, 09 May 2022 09:43:41 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:549962f0-bddf-41ca-aa3d-68fca50255da</guid><dc:creator>danmcb</dc:creator><description>&lt;p&gt;I could trace the hard fault to here:&lt;/p&gt;
&lt;p&gt;00029e0e &amp;lt;sd_flash_write&amp;gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp; 29e0e:&amp;nbsp;&amp;nbsp; &amp;nbsp;df29&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;svc&amp;nbsp;&amp;nbsp; &amp;nbsp;41&amp;nbsp;&amp;nbsp; &amp;nbsp;; 0x29&lt;br /&gt;&amp;nbsp;&amp;nbsp; 29e10:&amp;nbsp;&amp;nbsp; &amp;nbsp;4770&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;bx&amp;nbsp;&amp;nbsp; &amp;nbsp;lr&lt;br /&gt;&amp;nbsp;&amp;nbsp; 29e12:&amp;nbsp;&amp;nbsp; &amp;nbsp;bf00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;nop&lt;br /&gt;&amp;nbsp;&amp;nbsp; 29e14:&amp;nbsp;&amp;nbsp; &amp;nbsp;4618&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;mov&amp;nbsp;&amp;nbsp; &amp;nbsp;r0, r3&lt;/p&gt;
&lt;p&gt;So the SVC call seems to trigger the fault.&lt;/p&gt;
&lt;p&gt;I guess somewhere in the handler I need to do something (enable ints?). Our handler is rather simple. SAVE_DIAGNOSTIC_REGISTERS is just a macro that saves all diag info for later saving/printing.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div style="background-color:#1e1e1e;color:#d4d4d4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, monospace;font-size:14px;font-weight:normal;line-height:19px;white-space:pre;"&gt;
&lt;div&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;UsageFault_Handler&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;void&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;SAVE_DIAGNOSTIC_REGISTERS&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;project_fatal_error&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;USAGE FAULT&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>