Witam
Przejrzałem wszystkie stosowne posty na elektrodzie i z ich pomocą próbowałem napisać transmisję po SPI z CRC8 (x8 + x2 + x + 1).
Transmisja bez CRC przebiega pomyślnie, lecz z CRC nie ;/
Potrzebuję Waszego potwierdzenia, że liczę poprawnie kod CRC8 lub korekty algorytmu. Próbowałem już na chyba wszystkie sposoby obliczać tę sumę. Wykorzystanie gotowej tablicy lub obliczanie jej "w locie"nie dało żadnych efektów. Początkowa wartość crc8 = 0 lub 0xff również nie pomogła jak również mnożenie za każdym razem wyniku przez 0xff (jak w przykładzie). Proszę o radę. Myślę, że błąd tkwi w moim algorytmie CRC8, ale gdzie ??
Dziękuję za wszelkie uwagi i pozdrawiam
Poniżej zamieszczam jeden z algorytmów, który próbowałem wykorzystać. Obliczanie tablicy CRC8 napisał użytkownik NOTSET, na TYM poście.
-----------
[Przenoszę z "Początkujący Nauka". Mariusz Ch.]
Przejrzałem wszystkie stosowne posty na elektrodzie i z ich pomocą próbowałem napisać transmisję po SPI z CRC8 (x8 + x2 + x + 1).
Transmisja bez CRC przebiega pomyślnie, lecz z CRC nie ;/
Potrzebuję Waszego potwierdzenia, że liczę poprawnie kod CRC8 lub korekty algorytmu. Próbowałem już na chyba wszystkie sposoby obliczać tę sumę. Wykorzystanie gotowej tablicy lub obliczanie jej "w locie"nie dało żadnych efektów. Początkowa wartość crc8 = 0 lub 0xff również nie pomogła jak również mnożenie za każdym razem wyniku przez 0xff (jak w przykładzie). Proszę o radę. Myślę, że błąd tkwi w moim algorytmie CRC8, ale gdzie ??
Dziękuję za wszelkie uwagi i pozdrawiam
Poniżej zamieszczam jeden z algorytmów, który próbowałem wykorzystać. Obliczanie tablicy CRC8 napisał użytkownik NOTSET, na TYM poście.
-----------
unsigned char crc8_temp = 0;
unsigned char CRC8_TABLE[256];
/*Obliczanie tablicy sumy kontrolnej CRC8*/
unsigned char r;
int i, j;
for (i = 0; i < 256; i++)
{
r = (unsigned char) i;
for (j = 0; j < 8; j++)
r = (unsigned char) ((r << 1) ^ ((r & 0x80) ? 0x07 : 0));
CRC8_TABLE[i] = r;
}
/*suma CRC8 z 3 bajtow*/
crc8_temp = CRC8_TABLE[(crc8_temp ^ dat2) & 0xff];
crc8_temp = CRC8_TABLE[(crc8_temp ^ dat1) & 0xff];
crc8_temp = CRC8_TABLE[(crc8_temp ^ dat0) & 0xff];
[Przenoszę z "Początkujący Nauka". Mariusz Ch.]