DLPU048E August 2016 – July 2024
The following pseudo-code demonstrates one possible method for implementing the CRC calculation.
"^" represents bitwise exclusive OR operator.
"IN" is the data byte that is being included in the CRC.
"CRC" is the CRC byte that is being calculated.
CRC(0)(7:0)=0xFF; # Initial seed value is 0xFF.
FOR x=1 to N; # Loop through all "N" data bytes that are included in the CRC.
CRC(x)(0)=IN(x)(0)^IN(x)(6)^IN(x)(7)^CRC(x-1)(0)^CRC(x-1)(6)^CRC(x-1)(7);
CRC(x)(1)=IN(x)(0)^IN(x)(1)^IN(x)(6)^CRC(x-1)(0)^CRC(x-1)(1)^CRC(x-1)(6);
CRC(x)(2)=IN(x)(0)^IN(x)(1)^IN(x)(2)^IN(x)(6)^CRC(x-1)(0)^CRC(x-1)(1)^CRC(x-1)(2)^CRC(x-1)(6);
CRC(x)(3)=IN(x)(1)^IN(x)(2)^IN(x)(3)^IN(x)(7)^CRC(x-1)(1)^CRC(x-1)(2)^CRC(x-1)(3)^CRC(x-1)(7);
CRC(x)(4)=IN(x)(2)^IN(x)(3)^IN(x)(4)^CRC(x-1)(2)^CRC(x-1)(3)^CRC(x-1)(4);
CRC(x)(5)=IN(x)(3)^IN(x)(4)^IN(x)(5)^CRC(x-1)(3)^CRC(x-1)(4)^CRC(x-1)(5);
CRC(x)(6)=IN(x)(4)^IN(x)(5)^IN(x)(6)^CRC(x-1)(4)^CRC(x-1)(5)^CRC(x-1)(6);
CRC(x)(7)=IN(x)(5)^IN(x)(6)^IN(x)(7)^CRC(x-1)(5)^CRC(x-1)(6)^CRC(x-1)(7);
END FOR;