<?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: Checksum Help in S12 / MagniV Microcontrollers</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Checksum-Help/m-p/136871#M2467</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Just to close this out...&lt;BR /&gt;&lt;BR /&gt;I noticed I was receiving a L1827 in regards to the startup structure. I contacted tech support and to fix this, they sent me a new start12.h&lt;BR /&gt;&lt;BR /&gt;Thanks&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 01 Dec 2006 10:36:27 GMT</pubDate>
    <dc:creator>rhb3</dc:creator>
    <dc:date>2006-12-01T10:36:27Z</dc:date>
    <item>
      <title>Checksum Help</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Checksum-Help/m-p/136869#M2465</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;I'm trying to create a "firmware integrity" check by using the __CHECKSUM_IS_OK macro like the following:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN class="msg_source_code"&gt;&lt;SPAN class="text_smallest"&gt;Code:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;PRE&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (__CHECKSUM_IS_OK == FALSE) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; disp.dig[0] = '6';&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; disp.dig[1] = '0';&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; disp.dig[2] = 'R';&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; disp.dig[3] = 'E';&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; disp.led_q = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; disp.led_t = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Keep machines running during delay! */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run_machine();&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;To test this, I use PROG12Z to corrupt (read change) the flash in a certain byte/word.&amp;nbsp; I then run verify to ensure it fails to ensure I've changed some flash.&amp;nbsp; My prm file is:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN class="msg_source_code"&gt;&lt;SPAN class="text_smallest"&gt;Code:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;PRE&gt;/* This is a linker parameter file for the MC9S12E128 */NAMESENDSECTIONS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* List of all sections specified on the "Build options" tab */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RAM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = READ_WRITE 0x002000 TO 0x003FFF FILL 0xAA 0x55;&amp;nbsp;&amp;nbsp; /* unbanked FLASH ROM */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROM_FLASH&amp;nbsp; = READ_ONLY&amp;nbsp; 0x3E8000 TO 0x3E83FF FILL 0x00 NO_CHECKSUM;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROM_4400&amp;nbsp;&amp;nbsp; = READ_ONLY&amp;nbsp; 0x004400 TO 0x007FFF FILL 0x3F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROM_C000&amp;nbsp;&amp;nbsp; = READ_ONLY&amp;nbsp; 0x00C000 TO 0x00FEFF FILL 0x3F;&amp;nbsp;&amp;nbsp; /* banked FLASH ROM */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PAGE_38&amp;nbsp;&amp;nbsp;&amp;nbsp; = READ_ONLY&amp;nbsp; 0x388000 TO 0x38BFFF FILL 0x3F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PAGE_39&amp;nbsp;&amp;nbsp;&amp;nbsp; = READ_ONLY&amp;nbsp; 0x398000 TO 0x39BFFF FILL 0x3F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PAGE_3A&amp;nbsp;&amp;nbsp;&amp;nbsp; = READ_ONLY&amp;nbsp; 0x3A8000 TO 0x3ABFFF FILL 0x3F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PAGE_3B&amp;nbsp;&amp;nbsp;&amp;nbsp; = READ_ONLY&amp;nbsp; 0x3B8000 TO 0x3BBFFF FILL 0x3F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PAGE_3C&amp;nbsp;&amp;nbsp;&amp;nbsp; = READ_ONLY&amp;nbsp; 0x3C8000 TO 0x3CBFFF FILL 0x3F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PAGE_3D&amp;nbsp;&amp;nbsp;&amp;nbsp; = READ_ONLY&amp;nbsp; 0x3D8000 TO 0x3DBFFF FILL 0x3F;ENDPLACEMENT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SSTACK, DEFAULT_RAM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO RAM;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CHIMERA_FLASH&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; INTO ROM_FLASH;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEFAULT_ROM&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; INTO ROM_4400, PAGE_3C, PAGE_3D, PAGE_38, PAGE_39, PAGE_3A, PAGE_3B;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RTOS, _PRESTART, STARTUP,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROM_VAR, STRINGS,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NON_BANKED, COPY, .checksum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO ROM_C000;ENDINIT _EntryPoint&amp;nbsp;&amp;nbsp; /* The entry point of the application. This function is generated into the CPU module. */STACKSIZE 0x0200&lt;/PRE&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;So I surmise the linker will check every used portion of flash (not 0x3A fill areas but actual code) except ROM_FLASH.&amp;nbsp; This never works!&amp;nbsp; I know the code is actually changing because I start to have erratic behavior so clearly I'm not understanding how the auto checksum calculation works.&amp;nbsp; Any ides/thoughts would be much appreciated!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks!&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Nov 2006 08:07:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Checksum-Help/m-p/136869#M2465</guid>
      <dc:creator>rhb3</dc:creator>
      <dc:date>2006-11-16T08:07:07Z</dc:date>
    </item>
    <item>
      <title>Re: Checksum Help</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Checksum-Help/m-p/136870#M2466</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hmm. I wonder if you main loop should not just have the inverse condition.&lt;BR /&gt;You are stopping the loop once the checksum is correct....&lt;BR /&gt;It should be like this&lt;BR /&gt;&lt;PRE&gt;
   while (__CHECKSUM_IS_OK) {
      work();
   }
   BadThingsAreHappening();
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;This of course raises the question why your checksum computation does always fail...&lt;BR /&gt;&lt;BR /&gt;Does it work if you are just checking the non banked code?&lt;BR /&gt;I think there is some preprocessor define you can use to get the checking working for banked code too (not 100% sure).&lt;BR /&gt;Anyway, you should have the code to see how the computation is done at runtime and which areas are tested, and which not.&lt;BR /&gt;Do you get any link time warnings?&lt;BR /&gt;Check the&lt;BR /&gt;CodeWarrior\(CodeWarrior_Examples)\HC12\Checksums&lt;BR /&gt;samples&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Daniel&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 17 Nov 2006 23:13:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Checksum-Help/m-p/136870#M2466</guid>
      <dc:creator>CompilerGuru</dc:creator>
      <dc:date>2006-11-17T23:13:32Z</dc:date>
    </item>
    <item>
      <title>Re: Checksum Help</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Checksum-Help/m-p/136871#M2467</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Just to close this out...&lt;BR /&gt;&lt;BR /&gt;I noticed I was receiving a L1827 in regards to the startup structure. I contacted tech support and to fix this, they sent me a new start12.h&lt;BR /&gt;&lt;BR /&gt;Thanks&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 01 Dec 2006 10:36:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Checksum-Help/m-p/136871#M2467</guid>
      <dc:creator>rhb3</dc:creator>
      <dc:date>2006-12-01T10:36:27Z</dc:date>
    </item>
  </channel>
</rss>

