<?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>topic Re: Securing &amp; Unsecuring HCS12 (E256) Flash, using AN2880SW in S12 / MagniV Microcontrollers</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Securing-Unsecuring-HCS12-E256-Flash-using-AN2880SW/m-p/134436#M2062</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi kef,&lt;BR /&gt;How touched!&lt;SPAN&gt;&lt;IMG alt=":smileyhappy:" class="emoticon emoticon-smileyhappy" id="smileyhappy" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-happy.gif" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&amp;nbsp; It works.&lt;BR /&gt;I followed the steps you mentioned and runs on E64 &amp;amp; E256 successfully.&lt;BR /&gt;Thank you so much.&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 23 May 2007 14:12:18 GMT</pubDate>
    <dc:creator>MaxY</dc:creator>
    <dc:date>2007-05-23T14:12:18Z</dc:date>
    <item>
      <title>Securing &amp; Unsecuring HCS12 (E256) Flash, using AN2880SW</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Securing-Unsecuring-HCS12-E256-Flash-using-AN2880SW/m-p/134434#M2060</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi all,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm trying to AN2880SW, it's for DP256 series, and I revised it that can be adapted for E256 serise.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;But there is a question I need to clarify.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Does E256 support function of unsecuring Flash via backdoor key?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If yes, AN2880 doesn't seem to work.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've traced source code, named an2720.asm. When program runs into this section and set KEYACC,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;KEYACC is still 0. That will casue unsecuring to be failed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Did I lose something?&lt;/SPAN&gt;&lt;BR /&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 May 2007 14:01:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Securing-Unsecuring-HCS12-E256-Flash-using-AN2880SW/m-p/134434#M2060</guid>
      <dc:creator>MaxY</dc:creator>
      <dc:date>2007-05-22T14:01:42Z</dc:date>
    </item>
    <item>
      <title>Re: Securing &amp; Unsecuring HCS12 (E256) Flash, using AN2880SW</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Securing-Unsecuring-HCS12-E256-Flash-using-AN2880SW/m-p/134435#M2061</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;MaxY,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I tried this AN2880SW and found two bugs and something surprising. Results:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;1) First of all there are at least two bugs in the code.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;1.1) First problem (a bug) is in main.c at line 50:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;const unsigned int keys [] = {0x1111, 0x2222, 0x3333, 0x4444};&amp;nbsp;&amp;nbsp; /* Backdoor keys */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;This looks nice but const in this CW project means flash. Ant DoOnStack routine can't read&amp;nbsp;these values from flash&amp;nbsp;because at the time flash is "disconnected" (KEYACC is set).&amp;nbsp;I tried to step through code and found that my D64 (I modified just PRM file) returns zeros from keys[] when stepping through DoOnStack.&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;1.2) 2nd bug is in AN2720.asm file:&lt;/DIV&gt;&lt;DIV&gt;;;&amp;nbsp; 130:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(unsigned int *)(0xBF00) = keys[0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write key 1 */&lt;BR /&gt;&amp;nbsp; LDX&amp;nbsp;&amp;nbsp; keys&lt;BR /&gt;&amp;nbsp; STX&amp;nbsp;&amp;nbsp; $BF00&lt;BR /&gt;;;&amp;nbsp; 131:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(unsigned int *)(0xBF02) = keys[1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write key 2 */&lt;BR /&gt;&amp;nbsp; LDY&amp;nbsp;&amp;nbsp; keys + 1&lt;BR /&gt;&amp;nbsp; STY&amp;nbsp;&amp;nbsp; $BF02&lt;BR /&gt;;;&amp;nbsp; 132:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(unsigned int *)(0xBF04) = keys[2];&amp;nbsp;&amp;nbsp; /* Write key 3 */&lt;BR /&gt;&amp;nbsp; LDD&amp;nbsp;&amp;nbsp; keys + 2&lt;BR /&gt;&amp;nbsp; STD&amp;nbsp;&amp;nbsp; $BF04&lt;BR /&gt;;;&amp;nbsp; 133:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(unsigned int *)(0xBF06) = keys[3];&amp;nbsp;&amp;nbsp; /* Write key 4 */&lt;BR /&gt;&amp;nbsp; LDD&amp;nbsp;&amp;nbsp; keys + 3&lt;BR /&gt;&amp;nbsp; STD&amp;nbsp;&amp;nbsp; $BF06&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;Keys is array of ints, not&amp;nbsp;chars so&amp;nbsp;there must be keys+2 instead of keys+1, keys+4 instead of keys+2 etc:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;;;&amp;nbsp; 130:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(unsigned int *)(0xBF00) = keys[0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write key 1 */&lt;BR /&gt;&amp;nbsp; LDX&amp;nbsp;&amp;nbsp; keys&lt;BR /&gt;&amp;nbsp; STX&amp;nbsp;&amp;nbsp; $BF00&lt;BR /&gt;;;&amp;nbsp; 131:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(unsigned int *)(0xBF02) = keys[1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write key 2 */&lt;BR /&gt;&amp;nbsp; LDY&amp;nbsp;&amp;nbsp; keys + 2&lt;BR /&gt;&amp;nbsp; STY&amp;nbsp;&amp;nbsp; $BF02&lt;BR /&gt;;;&amp;nbsp; 132:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(unsigned int *)(0xBF04) = keys[2];&amp;nbsp;&amp;nbsp; /* Write key 3 */&lt;BR /&gt;&amp;nbsp; LDD&amp;nbsp;&amp;nbsp; keys + 4&lt;BR /&gt;&amp;nbsp; STD&amp;nbsp;&amp;nbsp; $BF04&lt;BR /&gt;;;&amp;nbsp; 133:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(unsigned int *)(0xBF06) = keys[3];&amp;nbsp;&amp;nbsp; /* Write key 4 */&lt;BR /&gt;&amp;nbsp; LDD&amp;nbsp;&amp;nbsp; keys + 6&lt;BR /&gt;&amp;nbsp; STD&amp;nbsp;&amp;nbsp; $BF06&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;DIV&gt;2) What's interesting - unmodified code (except PRM) was working on D64! After&amp;nbsp;I moved&amp;nbsp;keys[] from flash to RAM program started&amp;nbsp;to say "Cannot unsecure". And after second fix it started to work again.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;It seems that D64 2L86D and 0M89C masksets do accept zeros as backdoor keys!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I tried the same with DG128, it refused zeros as backdoor keys. Maybe at the time of writing this appnote author had buggy Dx256 that was also accepting zeros as backdoor keys?&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 May 2007 21:03:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Securing-Unsecuring-HCS12-E256-Flash-using-AN2880SW/m-p/134435#M2061</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2007-05-22T21:03:55Z</dc:date>
    </item>
    <item>
      <title>Re: Securing &amp; Unsecuring HCS12 (E256) Flash, using AN2880SW</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Securing-Unsecuring-HCS12-E256-Flash-using-AN2880SW/m-p/134436#M2062</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi kef,&lt;BR /&gt;How touched!&lt;SPAN&gt;&lt;IMG alt=":smileyhappy:" class="emoticon emoticon-smileyhappy" id="smileyhappy" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-happy.gif" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&amp;nbsp; It works.&lt;BR /&gt;I followed the steps you mentioned and runs on E64 &amp;amp; E256 successfully.&lt;BR /&gt;Thank you so much.&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 May 2007 14:12:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Securing-Unsecuring-HCS12-E256-Flash-using-AN2880SW/m-p/134436#M2062</guid>
      <dc:creator>MaxY</dc:creator>
      <dc:date>2007-05-23T14:12:18Z</dc:date>
    </item>
    <item>
      <title>Re: Securing &amp; Unsecuring HCS12 (E256) Flash, using AN2880SW</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Securing-Unsecuring-HCS12-E256-Flash-using-AN2880SW/m-p/134437#M2063</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi, MaxY&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks for feedback. I want to add some cents.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I think that AN2880 doesn't match E and other families, especially newer masksets well. I haven't worked with DP256 but IIRC there was an errata that flash couldn't be reprogrammed until unsecured. So if one wanted to debug in special mode, then he had to reflash security byte and the top most flash sector. But to reflash it one had to backdoor unsecure first. I guess that using E-fam and others&amp;nbsp;without such an&amp;nbsp;errata, you don't have&amp;nbsp;to&amp;nbsp;backdoor unsecure, just reflash the top most sector with security byte set to off.&lt;/DIV&gt;&lt;DIV&gt;Also, if you want to unsecure temporarily without reset (to gain BDM debugger access in so called "hot-plug" mode) then you don't have to reflash the security byte. AN2880 first backdoor unsecures the part, then it reflashes the sector to make security permanently off. These both actions are to much for normal parts.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;And regarding D64 undocumented errata. I found that D64 accepts not only all 0-s as backdoor keys but also all 1-s.&amp;nbsp;Backdoor keys in flash are any but backdoor unsecure procedure succeeds when&amp;nbsp;I try to get in whith&amp;nbsp;all 0-s or all 1-s. Docs say that 0-s and 1-s should fail even&amp;nbsp;if backdoor keys in flash are the same. Ooops 0-s or 1-s break any key...&lt;/DIV&gt;&lt;DIV&gt;It made me bit paranoic :smileyhappy: and I tried it also with C32, and DG128. Only D64's I have are defective. And hopefully only program running in MCU can backdoor unsecure. So workaround would be to check if external key isn't all 0's or all 1's and only then continue with backdoor unsecure.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards&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;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 May 2007 16:30:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Securing-Unsecuring-HCS12-E256-Flash-using-AN2880SW/m-p/134437#M2063</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2007-05-24T16:30:37Z</dc:date>
    </item>
  </channel>
</rss>

