I've certainly had no trouble using the CRC module for code-image checks, as linked-in using the IAR linker checksum options 4-byte, seed 0, reverse bytes MSB first and default CRC32 polynomial, placed at the end of the image:
uint32_t * memptr=(u32_t *)boot_CRC_start; //Calculate a CRC in K60 hdwr using same algorithm as IAR
if( (SIM_SDID & SIM_SDID_REVID_MASK) == 0) //For Rev 1.0 silicon, must disable all Flash caching & Speculation
{
FMC_PFB0CR &= ~0x1FUL; //Clear these bits for errata e2647 & e2644
FMC_PFB1CR &= ~0x1FUL;
}
SIM_SCGC6 |= SIM_SCGC6_CRC_MASK;
CRC_CTRL = CRC_CTRL_WAS_MASK | CRC_CTRL_TCRC_MASK; //32bit CRC
CRC_CRC = 0; //Starting from zero
CRC_CTRL = CRC_CTRL_TCRC_MASK;
CRC_GPOLY = 0x04C11DB7; //Poly to match IAR 32-bit default
do{ //16 byte paragraphs at a time
CRC_CRC = *memptr++;
CRC_CRC = *memptr++;
CRC_CRC = *memptr++;
CRC_CRC = *memptr++;
}while (memptr <= (uint32_t *)&__checksum);
if( CRC_CRC == 0 )
.......continue
BTW, I also 'fill unused flash' with 0xDF on that linker page so that I get a 'SVC 223' if the PC gets 'lost'.