ATNEL tech-forum
https://forum.atnel.pl/

Sprawdzenie poprawności sumy CRC - UART
https://forum.atnel.pl/topic20390.html
Strona 1 z 1

Autor:  faber33 [ 11 mar 2018, o 20:47 ]
Tytuł:  Sprawdzenie poprawności sumy CRC - UART

Witam. Mam takie problem: Chciałbym dodać do UARTu sumę CRC16 w celu wiadomym czyli sprawdzenia czy dotrzymane dane są poprawne. Do wysyłanej ramki dodałem tą sumę CRC16 czyli: mojedane:CRC (dwukropek dałem w celu oddzielania danych od sumy - nadmiarowo zapewne). I teraz proszę o poradę jak w paserze danych z UARTu sprawdzić czy suma CRC jest poprawna ? Dodam że używam funkcji _crc16_update z biblioteki <util/crc16.h>

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  abel11 [ 11 mar 2018, o 21:54 ]
Tytuł:  Re: Sprawdzenie poprawności sumy CRC - UART

Znane mi są dwie metody:
1) Po odebraniu ramki danych (z CRC) obliczasz sumę CRC całej ramki (łącznie z CRC) i tu wyznaczone CRC powinno wynosić 0.
2) Obliczasz CRC odebranej ramki danych (bez CRC) i wyznaczone CRC powinno się zgadzać z tym wysłanym w ramce.

Swoją drogą widziałem bardzo dobrze napisany artykuł właśnie odnośnie CRC, może warto poszukać na forum.

Autor:  faber33 [ 12 mar 2018, o 00:37 ]
Tytuł:  Re: Sprawdzenie poprawności sumy CRC - UART

Dzięki za odpowiedź, o tym pierwszym sposobie wspominał kolega rskup wktórymś z postów na forum ... ale coś mi to nie pasuje ... powiedzmy np.

Wpisałem sobie do kalkulatora:
https://www.lammertbies.nl/comm/info/cr ... ation.html

1234
CRC-16 wynosi 14BA

I teraz co "sklejamy" razem 1234 i 14BA i ma wyjść 0 ? Jak tak zrobię to wychodzi: BEDA

Drugim sposobem udało mi się w ten sposób to zrobić:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  rskup [ 12 mar 2018, o 01:31 ]
Tytuł:  Re: Sprawdzenie poprawności sumy CRC - UART

Jako wywołany do tablicy odpowiem ;)
faber33 napisał(a):
1234
CRC-16 wynosi 14BA

I teraz co "sklejamy" razem 1234 i 14BA i ma wyjść 0 ? Jak tak zrobię to wychodzi: BEDA

Tylko chyba sklejasz ciąg 1234 będący znakami ASCII z wynikiem będącym zapisem hexa 0x14BA ...

Ciąg ASCII 1234 to w zapisie hexadecymalnym 0x31 0x32 0x33 0x34, więc jak policzymy dla tego ciągu z dodanym wynikiem CRC-16 (0x14BA) to mamy wynik 0x0000 (ważna jest odpowiednia kolejność bajtów dodawanego CRC-16 - little endian). A tak wygląda na podawanej przez Ciebie stronie:
Obrazek Obrazek

--
Pozdrawiam,
Robert

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/