<?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: Cortex-M3 valid user code in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Cortex-M3-valid-user-code/m-p/516809#M1864</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by MikeSimmonds on Tue Jun 30 03:48:01 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
unsigned long *ptr, cks, idx;

&amp;nbsp;&amp;nbsp; cks = 0;&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; // clear checksum
&amp;nbsp;&amp;nbsp; for (idx =7; idx--; )&amp;nbsp;&amp;nbsp; // addup 1st 7 32-bit word values (unsigned) ignore carry/overflow
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cks += *ptr++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ptr must be initialised to point to the first vector (beginning of image

&amp;nbsp; cks = (~cks)+1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // calc twos complement (ones complement plus one)

&amp;nbsp; *ptr = cks;&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; // update the checksum in the eighth slot

// all hunky-dory now ... write image
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I won't have anything to do with managed code (convert the "C" above if you must).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If you could not work that out for your self, you need to read programming books (No put down, simple truth)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers, Mike&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:25:16 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:25:16Z</dc:date>
    <item>
      <title>Cortex-M3 valid user code</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Cortex-M3-valid-user-code/m-p/516808#M1863</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by reza_elc87 on Tue Jun 30 01:55:12 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Dear all, &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello! &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have developed a C# program that can send a .hex file to the flash memory of LPC1768 using ISP. But the program does not work well. I know the problem is that it cannot verify a valid user code, because the checksum at location 7 of the vector table is incorrect. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;this is the first 8 entries of my vector table: &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;:10000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG&gt;68020010 &lt;/STRONG&gt;&lt;STRONG&gt;69010000 &lt;/STRONG&gt;&lt;STRONG&gt;71010000 &lt;/STRONG&gt;&lt;STRONG&gt;73010000&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 26&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;:10001000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG&gt;75010000 &lt;/STRONG&gt;&lt;STRONG&gt;77010000 &lt;/STRONG&gt;&lt;STRONG&gt;79010000&lt;/STRONG&gt;&lt;SPAN&gt; [color=#f06]00000000[/color]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 78&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I know instead of those red zeros I need to put the two's complement of the checksum. The only problrm is that I do not know how to calculate the checksum and its two's complement. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Flash magic calculates it and gives:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;E6F4FFEF&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;BUT HOW???&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:25:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Cortex-M3-valid-user-code/m-p/516808#M1863</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:25:16Z</dc:date>
    </item>
    <item>
      <title>Re: Cortex-M3 valid user code</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Cortex-M3-valid-user-code/m-p/516809#M1864</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by MikeSimmonds on Tue Jun 30 03:48:01 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
unsigned long *ptr, cks, idx;

&amp;nbsp;&amp;nbsp; cks = 0;&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; // clear checksum
&amp;nbsp;&amp;nbsp; for (idx =7; idx--; )&amp;nbsp;&amp;nbsp; // addup 1st 7 32-bit word values (unsigned) ignore carry/overflow
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cks += *ptr++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ptr must be initialised to point to the first vector (beginning of image

&amp;nbsp; cks = (~cks)+1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // calc twos complement (ones complement plus one)

&amp;nbsp; *ptr = cks;&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; // update the checksum in the eighth slot

// all hunky-dory now ... write image
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I won't have anything to do with managed code (convert the "C" above if you must).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If you could not work that out for your self, you need to read programming books (No put down, simple truth)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers, Mike&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:25:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Cortex-M3-valid-user-code/m-p/516809#M1864</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:25:16Z</dc:date>
    </item>
    <item>
      <title>Re: Cortex-M3 valid user code</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Cortex-M3-valid-user-code/m-p/516810#M1865</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by LabRat on Tue Jun 30 04:03:14 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: reza_elc87&lt;/STRONG&gt;&lt;BR /&gt;The only problrm is that I do not know how to calculate the checksum and its two's complement. &lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;... then use a software to add the checksum&amp;nbsp; :O &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.lpcware.com%2Fcontent%2Ffaq%2Flpcxpresso%2Fimage-checksums" rel="nofollow" target="_blank"&gt;http://www.lpcware.com/content/faq/lpcxpresso/image-checksums&lt;/A&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:25:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Cortex-M3-valid-user-code/m-p/516810#M1865</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:25:17Z</dc:date>
    </item>
    <item>
      <title>Re: Cortex-M3 valid user code</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Cortex-M3-valid-user-code/m-p/516811#M1866</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by starblue on Wed Jul 01 01:37:31 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;The 8 32-bit values should sum to 0.&amp;nbsp; To make that happen you need to put the negation of the sum of the other values at position 7.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Note that here twos complement just means negation.&amp;nbsp; In C there is the unary - operator for that.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:25:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Cortex-M3-valid-user-code/m-p/516811#M1866</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:25:18Z</dc:date>
    </item>
  </channel>
</rss>

