Trato de leer los datos del sensor AS5047U ( https://ams.com/documents/20143/36005/AS5047U_DS000637_1-00.pdf/8639418f-6c3a-1624-4e6f-18f52c962099 ) sobre SPI, pero de alguna manera mi CRC siempre es diferente a la del sensor. Puedo leer el valor de posición correcto y el valor de crc del sensor y el crc permanece igual para el mismo valor de posición, así que creo que obtuve el marco correcto para crc.
Obtuve, por ejemplo, los siguientes valores de mi cálculo de crc y el crc proporcionado por el sensor (spi1.data son los datos recibidos sobre spi, spi.cmd son los datos enviados):
¿Alguna idea de lo que podría estar mal aquí?
Procesamiento SPI crc:
rx_spi_16(&spi1.data[0],&spi1.cmd[0],2);
pos_sensor.crc = (spi1.data[1] >> 8);
uint8_t crc = crc8((uint8_t *)&spi1.data[0],2);
Comando TX para enviar (modo de 16 bits):
spi1.cmd[0] = 0x7FFF;
spi1.cmd[1] = 0;
Cálculo de CRC:
uint8_t crc8(uint8_t *message ,uint8_t length)
{
uint32_t crc;
int16_t i,bit;
crc = 0xff;
for ( i=0 ; i<length ; i++ )
{
crc ^= message[i];
for ( bit=0 ; bit<8 ; bit++)
{
if ( (crc & 0x80)!=0 )
{
crc <<= 1;
crc ^= 0x1D;
}
else
{
crc <<= 1;
}
}
}
return (~crc) & 0xFF;
}
Después de un poco de fuerza bruta, resulta (como se sospechaba) que la hoja de datos miente. El AS5047U sí lo usa 0x1D
como su polinomio, pero, a diferencia de J1850, el valor inicial es 0xB7
y el valor xor final es 0x00
. Puede verificar fácilmente ingresando esos valores aquí: http://www.sunshine2k.de/coding/javascript/crc/crc_js.html
Editar: Acabo de recibir un ejemplo de código del proveedor y contiene este encantador bocado:
// The CRC Implementation of the device is not fully compatible to the CRC8_SAE_J1850-standard.
// It requires to put in 0x00 as first byte before the communication starts.
// So, the crc-initial value is crcLut[0 ^ 0xff] which is equal to 0xC4
Lo que este comentario (mal) intenta explicar es que el valor inicial es 0xC4
, con un valor final aún de 0xFF
. He respondido al proveedor con un correo electrónico redactado enérgicamente.
para su información, esto ya se modificó en la hoja de datos AS5147U. (Mismo sensor solo calificado para automoción) Se cambiará en el AS5047U lo antes posible.
Enlace a la hoja de datos de AS5147U: https://ams.com/documents/20143/36005/AS5147U_AS5247U_DS000639_4-00.pdf
saludos j
Sólo yo
Benjamín Riggs
Benjamín Riggs