Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 29 mar 2024, o 00:59


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 11 mar 2018, o 20:47 
Offline
Użytkownik

Dołączył(a): 20 lut 2013
Posty: 167
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2018, o 21:54 
Offline
Użytkownik

Dołączył(a): 05 wrz 2017
Posty: 169
Pomógł: 31

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2018, o 00:37 
Offline
Użytkownik

Dołączył(a): 20 lut 2013
Posty: 167
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2018, o 01:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO