Flash Magic Forum

In-System Programming Support => General => Topic started by: amchale on July 01, 2008, 06:31:03 AM

Title: Flash Magic CRC
Post by: amchale on July 01, 2008, 06:31:03 AM
Hi there.  We just started using Flash Magic for loading our new product.  For production purposes, we would like to be able to include the CRC viewed in the "more info" screen independent of the file, generated programmatically.  Simply running the hex file through a standard CRC32 generator does not result in a CRC that matches the one in Flash Magic.  Is the polynomial that FM uses different than the "standard" poly that WinZip et al use?

Thanks for any help you can offer!

Alex
Title: Re: Flash Magic CRC
Post by: Andy Ayre on July 01, 2008, 08:46:23 AM
It is the 32-bit CCITT CRC, using the following polynomial:

X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0

Andy
Title: Re: Flash Magic CRC
Post by: amchale on July 02, 2008, 01:44:06 PM
I appreciate the quick reply.  For all my efforts, though, I cannot get a CRC32 algorithm to duplicate the checksum that FM reports.  Is there any way I could either get the source to the CRC algo it's using, or is there any way to retrieve the CRC of a given file with the FM api?

Thanks!

Alex
Title: Re: Flash Magic CRC
Post by: Andy Ayre on July 03, 2008, 01:44:03 PM
Try this:

http://groups.google.com/group/sci.math/browse_thread/thread/594acc17fb2175b0/277d7fc007cba471

Use the 32-bit CRC macro.

Andy
Title: Re: Flash Magic CRC
Post by: amchale on July 03, 2008, 03:18:16 PM
I still can't get a CRC that matches what FM is reporting.  Is FM taking the CRC of the hex file, the bin file output, or some strange combination or subset of one of the files?  I've tried my test app on both the hex and bin, to no luck.

Thanks for the help.  I really appreciate it.
Title: Re: Flash Magic CRC
Post by: Andy Ayre on July 03, 2008, 03:54:20 PM
It's a CRC of the hexfile using the code I pointed you to. If you add a space character (0x20) on the end of the file it will change the checksum.

Andy
Title: Re: Flash Magic CRC
Post by: amchale on July 09, 2008, 07:36:25 AM
To anyone referring to this in the future, my problem was that I was reading the file in binary mode, and FM calculates the file based upon reading it in ascii mode.  Thanks for the help, Andy!
Title: Re: Flash Magic CRC
Post by: eeric7777 on May 08, 2009, 02:20:00 AM
Dear Andy,

I've tried the CRC32 macro , but still not work
it must be my code mistake somehow.

Could you kindly show me the code that how you use with CRC32 macro ?

My invalid code.
========================================================
unsigned long crc32(unsigned long crc, const unsigned char *buf, int len)
{
#define CRC32_POLYNOMIAL 0x00400007
    unsigned long crc_table[256];
    unsigned long crc32;
    int i, j;

    for (i = 0; i < 256; i++) {
        crc32 = i;
        for (j = 8; j > 0; j--) {
            if (crc32 & 1)
                crc32 = (crc32 >> 1) ^ CRC32_POLYNOMIAL;
            else
                crc32 >>= 1;
        }
        crc_table = crc32;
    }
  if (buf == NULL) return 0L;
#define CRC32(c,crc) ( crc_table[((int)(crc) ^ (c)) & 0xff] ^ (((crc) >> 8 ) &0x00FFFFFFL))
#define DO1(buf)  crc = CRC32(crc, *buf++)
#define DO2(buf)  DO1(buf); DO1(buf)
#define DO4(buf)  DO2(buf); DO2(buf)
#define DO8(buf)  DO4(buf); DO4(buf)
  crc = crc ^ 0xffffffffL;
#ifndef NO_UNROLLED_LOOPS
  while (len >= 8 ) {
    DO8(buf);
    len -= 8;
  }
#endif
  if (len) do {
    DO1(buf);
  } while (--len);
  return crc ^ 0xffffffffL;
}