{
Unsigned length I, ulData, lfsr = 0xFFFFFF.
for(I = 0x 0; I & ltulNumValuesi++)
{
ul data = pul data[I];
lfsr = CRC24_D32(lfsr,ul data);
}
Return to lfsr
}
Static unsigned long CRC24_D32 (constant unsigned long old_CRC, constant unsigned long data)
{
Unsigned length d [32];
Unsigned long integer C [24];
Unsigned long integer newcrc [24];
Unsigned long integer ulCRC24 _ D32
Unsigned long integer f, tmp
Unsigned long integer bit _ mask = 0x000001;
tmp = 0x000000
//Convert the previous CRC value to binary.
bit _ mask = 0x 00000 1;
for(f = 0; f & lt= 23; f++)
{
c[f]=(old _ CRC & amp; bit_mask)>& gtf;
bit_mask = bit_mask <& lt 1;
}
//Convert data to binary.
bit _ mask = 0x 00000 1;
for(f = 0; f & lt= 3 1; f++)
{
d[f]=(Data & amp; bit_mask)>& gtf;
bit_mask = bit_mask <& lt 1;
}
//Calculate a new LFSR value.
new CRC[0]= d[3 1]^ d[30]^ d[29]^ d[28]^ d[27]^ d[26]^ d[25]^
d[24]^ d[23]^ d[ 17]^ d[ 16]^ d[ 15]^ d[ 14]^ d[ 13]^
d[ 12]^ d[ 1 1]^ d[ 10]^ d[9]^ d[8]^ d[7]^ d[6]^
d[5]^ d[4]^ d[3]^ d[2]^ d[ 1]^ d[0]^ c[0]^ c[ 1]^
c[2]^ c[3]^ c[4]^ c[5]^ c[6]^ c[7]^ c[8]^ c[9]^
c[ 15]^ c[ 16]^ c[ 17]^ c[ 18]^ c[ 19]^ c[20]^ c[2 1]^
c[22]^ c[23];
new CRC[ 1]= d[23]^ d[ 18]^ d[0]^ c[ 10]^ c[ 15];
new CRC[2]= d[24]^ d[ 19]^ d[ 1]^ c[ 1 1]^ c[ 16];
new CRC[3]= d[25]^ d[20]^ d[2]^ c[ 12]^ c[ 17];
new CRC[4]= d[26]^ d[2 1]^ d[3]^ c[ 13]^ c[ 18];
new CRC[5]= d[3 1]^ d[30]^ d[29]^ d[28]^ d[26]^ d[25]^ d[24]^
d[23]^ d[22]^ d[ 17]^ d[ 16]^ d[ 15]^ d[ 14]^ d[ 13]^
d[ 12]^ d[ 1 1]^ d[ 10]^ d[9]^ d[8]^ d[7]^ d[6]^
d[5]^ d[3]^ d[2]^ d[ 1]^ d[0]^ c[0]^ c[ 1]^ c[2]^
c[3]^ c[4]^ c[5]^ c[6]^ c[7]^ c[8]^ c[9]^ c[ 14]^
c[ 15]^ c[ 16]^ c[ 17]^ c[ 18]^ c[20]^ c[2 1]^ c[22]^
c[23];
LFSR code example
The signature is a polynomial x24+ x23+ x6.
+ x5
24-bit CRC of +x+ 1 The initial value is 0xFFFFFF.
AN- 1 160
Revision A | Page 7 of 8
new CRC[6]= d[28]^ d[ 18]^ d[5]^ d[0]^ c[ 10]^ c[20];
new CRC[7]= d[29]^ d[ 19]^ d[6]^ d[ 1]^ c[ 1 1]^ c[2 1];
new CRC[8]= d[30]^ d[20]^ d[7]^ d[2]^ c[ 12]^ c[22];
new CRC[9]= d[3 1]^ d[2 1]^ d[8]^ d[3]^ c[0]^ c[ 13]^ c[23];
new CRC[ 10]= d[22]^ d[9]^ d[4]^ c[ 1]^ c[ 14];
new CRC[ 1 1]= d[23]^ d[ 10]^ d[5]^ c[2]^ c[ 15];
new CRC[ 12]= d[24]^ d[ 1 1]^ d[6]^ c[3]^ c[ 16];
new CRC[ 13]= d[25]^ d[ 12]^ d[7]^ c[4]^ c[ 17];
new CRC[ 14]= d[26]^ d[ 13]^ d[8]^ c[0]^ c[5]^ c[ 18];
new CRC[ 15]= d[27]^ d[ 14]^ d[9]^ c[ 1]^ c[6]^ c[ 19];
new CRC[ 16]= d[28]^ d[ 15]^ d[ 10]^ c[2]^ c[7]^ c[20];
new CRC[ 17]= d[29]^ d[ 16]^ d[ 1 1]^ c[3]^ c[8]^ c[2 1];
new CRC[ 18]= d[30]^ d[ 17]^ d[ 12]^ c[4]^ c[9]^ c[22];
new CRC[ 19]= d[3 1]^ d[ 18]^ d[ 13]^ c[5]^ c[ 10]^ c[23];
new CRC[20]= d[ 19]^ d[ 14]^ c[6]^ c[ 1 1];
new CRC[2 1]= d[20]^ d[ 15]^ c[7]^ c[ 12];
new CRC[22]= d[2 1]^ d[ 16]^ c[8]^ c[ 13];
new CRC[23]= d[3 1]^ d[30]^ d[29]^ d[28]^ d[27]^ d[26]^ d[25]^
d[24]^ d[23]^ d[22]^ d[ 16]^ d[ 15]^ d[ 14]^ d[ 13]^
d[ 12]^ d[ 1 1]^ d[ 10]^ d[9]^ d[8]^ d[7]^ d[6]^
d[5]^ d[4]^ d[3]^ d[2]^ d[ 1]^ d[0]^ c[0]^ c[ 1]^
c[2]^ c[3]^ c[4]^ c[5]^ c[6]^ c[7]^ c[8]^ c[ 14]^
c[ 15]^ c[ 16]^ c[ 17]^ c[ 18]^ c[ 19]^ c[20]^ c[2 1]^
c[22]^ c[23];
ulc rc24 _ D32 = 0;
// LFSR values range from binary to hexadecimal.
bit _ mask = 0x 00000 1;
for(f = 0; f & lt= 23; f++)
{
ul RCC 24 _ D32 = ul RCC 24 _ D32+new CRC[f]* bit _ mask;
bit_mask = bit_mask <& lt 1;
}
return(ulrcc 24 _ D32 & amp; 0x 00 ffffff);
}