<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>S12 / MagniV MicrocontrollersのトピックRe: s12xe - RAM FAULT MONITOR</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/s12xe-RAM-FAULT-MONITOR/m-p/192647#M7580</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi&lt;BR /&gt;&lt;BR /&gt;How you write your code depends on your level of paranoia &lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" id="smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;&lt;BR /&gt;&lt;BR /&gt;Assuming you dont want to block execution while test a large amount of RAM then you have do to it one (or a few) location(s) at a time.&amp;nbsp; This implies that some variables will be kept in RAM - what if these locations have failed, or fail during the test?&lt;BR /&gt;&lt;BR /&gt;The following is designed mainly for on-chip RAM as it isn't trying to pick up faults in shorted address lines etc.&lt;BR /&gt;&lt;BR /&gt;Basic concept (and please read this as psuedo code):&lt;BR /&gt;&lt;BR /&gt;Init:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8 volatile *testPtr = (uint8 *)(RAM_START_ADDRESS);&lt;BR /&gt;&lt;BR /&gt;Process:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // do this one or more times per pass&lt;BR /&gt;&amp;nbsp;&amp;nbsp; DISABLE_INTERRUPTS;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; uint8 savedData = *testPtr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; *testPtr = 0x55;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // try writing 0x55&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if(*testPtr != 0x55) RamFault;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; *testPtr ^= 0xFF;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // complement&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if(*testPtr != 0xAA) RamFault;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; *testPtr = savedData;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; testPtr++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if(testPtr &amp;gt; (uint8 *) RAM_END_ADDRESS)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; testPtr =&amp;nbsp; (uint8 *)(RAM_START_ADDRESS)&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; ENABLE_INTERRUPTS&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 22 Feb 2008 15:42:34 GMT</pubDate>
    <dc:creator>colinh</dc:creator>
    <dc:date>2008-02-22T15:42:34Z</dc:date>
    <item>
      <title>s12xe - RAM FAULT MONITOR</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/s12xe-RAM-FAULT-MONITOR/m-p/192644#M7577</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;Hello all,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Whe're implementing codes for automotive industry, anybody here&amp;nbsp;have tried&amp;nbsp;to create a functionality to monitor RAM faults (RAM FAULT MONITOR)? Any suggestions on how to go about this? Is there any standard function name conventions(e.g. autosar)?&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;thanks.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Message Edited by Xbot on &lt;/SPAN&gt;&lt;SPAN class="date_text"&gt;2008-02-21&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class="time_text"&gt;07:59 AM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 Feb 2008 15:46:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/s12xe-RAM-FAULT-MONITOR/m-p/192644#M7577</guid>
      <dc:creator>Xbot</dc:creator>
      <dc:date>2008-02-21T15:46:05Z</dc:date>
    </item>
    <item>
      <title>Re: s12xe - RAM FAULT MONITOR</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/s12xe-RAM-FAULT-MONITOR/m-p/192645#M7578</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;I wont start on the dubious benefits of RAM self checks in automotive designs, the great majority of which are single chip with on all RAM contained within the micro.&amp;nbsp; 20yrs in the automotive game and I still haven't heard of a RAM failure.&lt;BR /&gt;&lt;BR /&gt;Questions:&lt;BR /&gt;- Only at power up or continuous testing?&lt;BR /&gt;- Internal or external RAM?&lt;BR /&gt;&lt;BR /&gt;I assume you are going to try and test for a completely dead RAM cell that cannot hold its contents for more than a couple of instruction cycles?&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;Colin&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 Feb 2008 16:29:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/s12xe-RAM-FAULT-MONITOR/m-p/192645#M7578</guid>
      <dc:creator>colinh</dc:creator>
      <dc:date>2008-02-21T16:29:05Z</dc:date>
    </item>
    <item>
      <title>Re: s12xe - RAM FAULT MONITOR</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/s12xe-RAM-FAULT-MONITOR/m-p/192646#M7579</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;q1: (Always running) a self test program that can diagnose and detect failures of the RAM.&lt;/DIV&gt;&lt;DIV&gt;q2: Internal. Expandable perhaps&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 Feb 2008 18:20:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/s12xe-RAM-FAULT-MONITOR/m-p/192646#M7579</guid>
      <dc:creator>Xbot</dc:creator>
      <dc:date>2008-02-21T18:20:19Z</dc:date>
    </item>
    <item>
      <title>Re: s12xe - RAM FAULT MONITOR</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/s12xe-RAM-FAULT-MONITOR/m-p/192647#M7580</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi&lt;BR /&gt;&lt;BR /&gt;How you write your code depends on your level of paranoia &lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" id="smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;&lt;BR /&gt;&lt;BR /&gt;Assuming you dont want to block execution while test a large amount of RAM then you have do to it one (or a few) location(s) at a time.&amp;nbsp; This implies that some variables will be kept in RAM - what if these locations have failed, or fail during the test?&lt;BR /&gt;&lt;BR /&gt;The following is designed mainly for on-chip RAM as it isn't trying to pick up faults in shorted address lines etc.&lt;BR /&gt;&lt;BR /&gt;Basic concept (and please read this as psuedo code):&lt;BR /&gt;&lt;BR /&gt;Init:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8 volatile *testPtr = (uint8 *)(RAM_START_ADDRESS);&lt;BR /&gt;&lt;BR /&gt;Process:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // do this one or more times per pass&lt;BR /&gt;&amp;nbsp;&amp;nbsp; DISABLE_INTERRUPTS;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; uint8 savedData = *testPtr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; *testPtr = 0x55;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // try writing 0x55&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if(*testPtr != 0x55) RamFault;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; *testPtr ^= 0xFF;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // complement&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if(*testPtr != 0xAA) RamFault;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; *testPtr = savedData;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; testPtr++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if(testPtr &amp;gt; (uint8 *) RAM_END_ADDRESS)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; testPtr =&amp;nbsp; (uint8 *)(RAM_START_ADDRESS)&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; ENABLE_INTERRUPTS&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Feb 2008 15:42:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/s12xe-RAM-FAULT-MONITOR/m-p/192647#M7580</guid>
      <dc:creator>colinh</dc:creator>
      <dc:date>2008-02-22T15:42:34Z</dc:date>
    </item>
  </channel>
</rss>

