CRC-8, Verificación de error de redundancia cíclica por I2C

Hola a todos,

Estoy usando un dispositivo I2C que también funciona con la detección de errores CRC. Deseo implementarlo pero no sé cómo.

El fabricante dice: "Cada byte I2C se calcula utilizando algoritmos CRC8. El polinomio CRC es el siguiente: x8 + x5 + x3 + x2 + x + 1." Sé que esto es igual a 100101111.

También el fabricante dice un ejemplo cuando enviamos datos al dispositivo con el CRC habilitado:
Datos: 0xC0 0xC0 0x00 0xCF 0xFF, seguido del CRC: 0x2E.

Entonces, la cosa es: ¿cómo podría calcular este 0x2E en mi código?

Leyendo en Internet encontré esta función:

//CRC-8 - based on the CRC8 formulas by Dallas/Maxim
//code released under the therms of the GNU GPL 3.0 license
byte CRC8(const byte *data, size_t dataLength)
{
  byte crc = 0x00;
  while (dataLength--)
  {
    byte extract = *data++;
    for (byte tempI = 8; tempI; tempI--)
   {
      byte sum = (crc ^ extract) & 0x01;
      crc >>= 1;
      if (sum)
     {
        crc ^= 0x8C;
      }
      extract >>= 1;
    }
  }
  return crc;
}

Pero en ningún momento pide el polinomio para realizar el calculo.

Alguien que me pueda ayudar a realizar el calculo con el software de arduino?

Gracias!!!

Que tal buscando algoritmos de checksum como estos link

O un simple google: Arduino polynomial crc arroja resultados mejores como éstos