<?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 Cortex-A vs Cortex-M. Differents CRC output calculation ? in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Cortex-A-vs-Cortex-M-Differents-CRC-output-calculation/m-p/484486#M29698</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have an issue with a software that originally work for an embedded Linux system on ARM-A7 core.That software contain a check sum based on a polynomial CRC-16 modbus. It work very well on ARM-A7 core and even other architectures (x86, amd64). But when I port the code to KL25 ARM-M0+ core, the check sum result give me a wrong output.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My input buffer contain 6 bytes : 0x 01 05 00 02 FF 00 (from MSB to LSB respectively)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The output result should be : &lt;STRONG&gt;0x FA 2D&lt;/STRONG&gt;. I double checked with this link &lt;A href="http://www.lammertbies.nl/comm/info/crc-calculation.html" rel="nofollow noopener noreferrer" title="http://www.lammertbies.nl/comm/info/crc-calculation.html" target="_blank"&gt;On-line CRC calculation and free library&lt;/A&gt;&lt;/P&gt;&lt;P&gt;But with ARM-M0+, I got : 0x 45 92 ?!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So, where is the bug ? From ALU ? Compilation ? Data type or sign ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Down below is the code I used. I did not write it myself. It is just a copy paste from a website found somewhere on internet. I believe that if I analyse the process of that code and read the link above, I could find a way to solve my problem but... Nah ! I am bit lazy to night.:smileylaugh:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am very curious to understand why it does that. Anyone have an idea ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14617923180238951 jive_text_macro" data-renderedposition="576_50_798_352" jivemacro_uid="_14617923180238951"&gt;&lt;P&gt;unsigned int CRC(char* buf, int len)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; unsigned int crc = 0xFFFF;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; int pos;&lt;/P&gt;&lt;P&gt;&amp;nbsp; for(pos = 0; pos &amp;lt; len; pos++) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; crc ^= (unsigned int)buf[pos];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // XOR byte into least sig. byte of crc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 8; i != 0; i--) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Loop over each bit&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((crc &amp;amp; 0x0001) != 0) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // If the LSB is set&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; crc &amp;gt;&amp;gt;= 1;&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; // Shift right and XOR 0xA001&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; crc ^= 0xA001;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&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; // Else LSB is not set&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; crc &amp;gt;&amp;gt;= 1;&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; // Just shift right&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; // Note, this number has low and high bytes swapped, so use it accordingly (or swap bytes)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; return crc;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Max&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 27 Apr 2016 21:41:29 GMT</pubDate>
    <dc:creator>mr_max</dc:creator>
    <dc:date>2016-04-27T21:41:29Z</dc:date>
    <item>
      <title>Cortex-A vs Cortex-M. Differents CRC output calculation ?</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Cortex-A-vs-Cortex-M-Differents-CRC-output-calculation/m-p/484486#M29698</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have an issue with a software that originally work for an embedded Linux system on ARM-A7 core.That software contain a check sum based on a polynomial CRC-16 modbus. It work very well on ARM-A7 core and even other architectures (x86, amd64). But when I port the code to KL25 ARM-M0+ core, the check sum result give me a wrong output.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My input buffer contain 6 bytes : 0x 01 05 00 02 FF 00 (from MSB to LSB respectively)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The output result should be : &lt;STRONG&gt;0x FA 2D&lt;/STRONG&gt;. I double checked with this link &lt;A href="http://www.lammertbies.nl/comm/info/crc-calculation.html" rel="nofollow noopener noreferrer" title="http://www.lammertbies.nl/comm/info/crc-calculation.html" target="_blank"&gt;On-line CRC calculation and free library&lt;/A&gt;&lt;/P&gt;&lt;P&gt;But with ARM-M0+, I got : 0x 45 92 ?!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So, where is the bug ? From ALU ? Compilation ? Data type or sign ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Down below is the code I used. I did not write it myself. It is just a copy paste from a website found somewhere on internet. I believe that if I analyse the process of that code and read the link above, I could find a way to solve my problem but... Nah ! I am bit lazy to night.:smileylaugh:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am very curious to understand why it does that. Anyone have an idea ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14617923180238951 jive_text_macro" data-renderedposition="576_50_798_352" jivemacro_uid="_14617923180238951"&gt;&lt;P&gt;unsigned int CRC(char* buf, int len)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; unsigned int crc = 0xFFFF;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; int pos;&lt;/P&gt;&lt;P&gt;&amp;nbsp; for(pos = 0; pos &amp;lt; len; pos++) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; crc ^= (unsigned int)buf[pos];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // XOR byte into least sig. byte of crc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 8; i != 0; i--) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Loop over each bit&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((crc &amp;amp; 0x0001) != 0) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // If the LSB is set&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; crc &amp;gt;&amp;gt;= 1;&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; // Shift right and XOR 0xA001&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; crc ^= 0xA001;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&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; // Else LSB is not set&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; crc &amp;gt;&amp;gt;= 1;&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; // Just shift right&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; // Note, this number has low and high bytes swapped, so use it accordingly (or swap bytes)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; return crc;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Max&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 27 Apr 2016 21:41:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Cortex-A-vs-Cortex-M-Differents-CRC-output-calculation/m-p/484486#M29698</guid>
      <dc:creator>mr_max</dc:creator>
      <dc:date>2016-04-27T21:41:29Z</dc:date>
    </item>
    <item>
      <title>Re: Cortex-A vs Cortex-M. Differents CRC output calculation ?</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Cortex-A-vs-Cortex-M-Differents-CRC-output-calculation/m-p/484487#M29699</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;do you know what's the "int" size on the other compilers used? My first guess is that in an implementation "int" is 16-bit and other uses 32-bit.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Do a quick test: run the code by replacing any "unsigned int" to "uint16_t" and any int (assuming default is signed) as "int16_t" and see the output, then change the same types to "uint32_t" and "int32_t" and check the output.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Apr 2016 20:18:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Cortex-A-vs-Cortex-M-Differents-CRC-output-calculation/m-p/484487#M29699</guid>
      <dc:creator>carlos_neri</dc:creator>
      <dc:date>2016-04-28T20:18:02Z</dc:date>
    </item>
    <item>
      <title>Re: Cortex-A vs Cortex-M. Differents CRC output calculation ?</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Cortex-A-vs-Cortex-M-Differents-CRC-output-calculation/m-p/484488#M29700</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes I did it Carlos. I replaced all &lt;EM&gt;unsigned int&lt;/EM&gt; to &lt;EM&gt;uint16_t&lt;/EM&gt;. But it only changed the outputs result by another wrong one.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In this link : &lt;A href="http://www.lammertbies.nl/comm/info/crc-calculation.html" rel="nofollow noopener noreferrer noopener noreferrer" target="_blank" title="http://www.lammertbies.nl/comm/info/crc-calculation.html"&gt;On-line CRC calculation and free library&lt;/A&gt;​, I downloaded the sources and after some modifications, I implemented into my application. Now it work ! &lt;IMG alt="Smiley Happy" class="emoticon emoticon-smileyhappy" id="smileyhappy" src="https://community.nxp.com/i/smilies/16x16_smiley-happy.png" title="Smiley Happy" /&gt; . The only bad thing is that CRC calculation cost now more spaces in memory because it use a table of 2*256 bytes...&lt;/P&gt;&lt;P&gt;If someone need a CRC-16 Modbus and do not really care about space memory code, below is the modified source code with its CRC-16 table. Tested with ARM Cortex-M0+ core. Enjoy it ! &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14619733753968624" data-renderedposition="216_8_1192_656" jivemacro_uid="_14619733753968624"&gt;&lt;P&gt;//CRC-16 (Modbus) table&lt;/P&gt;&lt;P&gt;static short crc_tab16[256] =&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0000,0xC0C1,0xC181,0x0140,0xC301,0x03C0,0x0280,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xC241,0xC601,0x06C0,0x0780,0xC741,0x0500,0xC5C1,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xC481,0x0440,0xCC01,0x0CC0,0x0D80,0xCD41,0x0F00,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xCFC1,0xCE81,0x0E40,0x0A00,0xCAC1,0xCB81,0x0B40,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xC901,0x09C0,0x0880,0xC841,0xD801,0x18C0,0x1980,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xD941,0x1B00,0xDBC1,0xDA81,0x1A40,0x1E00,0xDEC1,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xDF81,0x1F40,0xDD01,0x1DC0,0x1C80,0xDC41,0x1400,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xD4C1,0xD581,0x1540,0xD701,0x17C0,0x1680,0xD641,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xD201,0x12C0,0x1380,0xD341,0x1100,0xD1C1,0xD081,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1040,0xF001,0x30C0,0x3180,0xF141,0x3300,0xF3C1,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xF281,0x3240,0x3600,0xF6C1,0xF781,0x3740,0xF501,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x35C0,0x3480,0xF441,0x3C00,0xFCC1,0xFD81,0x3D40,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xFF01,0x3FC0,0x3E80,0xFE41,0xFA01,0x3AC0,0x3B80,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xFB41,0x3900,0xF9C1,0xF881,0x3840,0x2800,0xE8C1,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xE981,0x2940,0xEB01,0x2BC0,0x2A80,0xEA41,0xEE01,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2EC0,0x2F80,0xEF41,0x2D00,0xEDC1,0xEC81,0x2C40,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xE401,0x24C0,0x2580,0xE541,0x2700,0xE7C1,0xE681,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2640,0x2200,0xE2C1,0xE381,0x2340,0xE101,0x21C0,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2080,0xE041,0xA001,0x60C0,0x6180,0xA141,0x6300,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xA3C1,0xA281,0x6240,0x6600,0xA6C1,0xA781,0x6740,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xA501,0x65C0,0x6480,0xA441,0x6C00,0xACC1,0xAD81,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x6D40,0xAF01,0x6FC0,0x6E80,0xAE41,0xAA01,0x6AC0,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x6B80,0xAB41,0x6900,0xA9C1,0xA881,0x6840,0x7800,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xB8C1,0xB981,0x7940,0xBB01,0x7BC0,0x7A80,0xBA41,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xBE01,0x7EC0,0x7F80,0xBF41,0x7D00,0xBDC1,0xBC81,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x7C40,0xB401,0x74C0,0x7580,0xB541,0x7700,0xB7C1,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xB681,0x7640,0x7200,0xB2C1,0xB381,0x7340,0xB101,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x71C0,0x7080,0xB041,0x5000,0x90C1,0x9181,0x5140,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x9301,0x53C0,0x5280,0x9241,0x9601,0x56C0,0x5780,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x9741,0x5500,0x95C1,0x9481,0x5440,0x9C01,0x5CC0,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x5D80,0x9D41,0x5F00,0x9FC1,0x9E81,0x5E40,0x5A00,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x9AC1,0x9B81,0x5B40,0x9901,0x59C0,0x5880,0x9841,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x8801,0x48C0,0x4980,0x8941,0x4B00,0x8BC1,0x8A81,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x4A40,0x4E00,0x8EC1,0x8F81,0x4F40,0x8D01,0x4DC0,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x4C80,0x8C41,0x4400,0x84C1,0x8581,0x4540,0x8701,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x47C0,0x4680,0x8641,0x8201,0x42C0,0x4380,0x8341,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x4100,0x81C1,0x8081,0x4040&lt;/P&gt;&lt;P&gt;};&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14619733655496097 jive_text_macro" data-renderedposition="898_8_1192_400" jivemacro_uid="_14619733655496097"&gt;&lt;P&gt;unsigned short crc16(char* data, int len)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned short crc=0xFFFF;// crc_16_modbus;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0;i&amp;lt;len;i++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; crc = update_crc16(crc, data[i] );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return crc;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;unsigned short update_crc16( unsigned short crc, char c ) {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; unsigned short tmp, short_c;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; short_c = 0x00ff &amp;amp; (unsigned short) c;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; tmp =&amp;nbsp; crc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ^ short_c;&lt;/P&gt;&lt;P&gt;&amp;nbsp; crc = (crc &amp;gt;&amp;gt; 8) ^ crc_tab16[ tmp &amp;amp; 0xff ];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; return crc;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14619744518149499 jive_text_macro" data-renderedposition="1324_8_1192_145" jivemacro_uid="_14619744518149499"&gt;&lt;P&gt;int main(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;/PRE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;unsigned short crc;&lt;/P&gt;&lt;P&gt;char txbuf[8] = {0x01, 0x05, 0x00, 0x02, 0xFF, 0x00};&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;//Compute CRC&lt;/P&gt;&lt;P&gt;crc = crc16((txbuf,6);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Max&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Nov 2020 13:26:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Cortex-A-vs-Cortex-M-Differents-CRC-output-calculation/m-p/484488#M29700</guid>
      <dc:creator>mr_max</dc:creator>
      <dc:date>2020-11-02T13:26:36Z</dc:date>
    </item>
  </channel>
</rss>

