logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Prośba o pomoc w policzeniu sumy kontrolnej

pox 17 Gru 2008 23:53 2238 7
REKLAMA
  • #1 5872026
    pox
    Poziom 12  
    Witam szanownych forumowiczów.

    Zwracam się do was z prośbą o pomoc, ponieważ sam już nie jestem w stanie rozwiązać tego problemu.

    Otóż, jedno urządzenie wysyła dane - 18 bajtów.
    1 bajt to nagłówek - zawsze jest taki sam/
    2-17 - bajty wiadomości
    18 - bajt kontrolny, którego nie jestem w stanie policzyć.

    Oto zarejestrowane przeze mnie dane:

    f0 20 20 31 30 37 2e 35 20 20 20 46 4d 31 2e 31 20 31
    f0 52 41 44 49 4f 5a 45 54 20 20 46 4d 31 2e 31 20 2a
    f0 20 20 31 30 31 2e 35 20 20 20 46 4d 31 2e 32 20 36
    f0 20 20 31 30 35 2e 36 20 20 20 46 4d 31 2e 33 20 34
    f0 54 41 50 45 20 20 1f 20 1c 1c 1c 1c 1c 1c 20 20 7e
    f0 54 41 50 45 20 20 1e 20 1c 1c 1c 1c 1c 1c 20 20 7f

    Gdzieś w internecie znalazłem informację, że można to policzyć według:
    Bytex = (0xFF - bytex)
    CHKSUM = (Byte1 ^ byte2 ^ ... byte16 ^ 0x9C) + 1

    Próbowałem już tak, ale niestety bez rezultatu.
  • REKLAMA
  • Pomocny post
    #2 5872077
    BoskiDialer
    Poziom 34  
    Czwarty zbiór jest uszkodzony (któryś bajt jest zwiększony o 4). A tak to zauważyłem, że suma kontrolna jest liczona tak:
    chksum = 0xFF - (byte1 + byte2 + byte3 .... + byten)

    Po zsumowaniu wszystkich bajtów wychodzi 0xFF. Do sumy wliczają się wszystkie bajty od nagłówka 0xF0 włącznie.
  • REKLAMA
  • #3 5872291
    Freddie Chopin
    Specjalista - Mikrokontrolery
    BoskiDialer napisał:
    Czwarty zbiór jest uszkodzony (któryś bajt jest zwiększony o 4).

    daleko idace wnioski [; rownie dobrze dwa moga byc zwiekszone o 2, ewentualnie jeden moze byc zmniejszony o 17, a drugi powiekszony o 21, albo ... you know what i mean.

    4\/3!!
  • REKLAMA
  • #4 5872424
    pox
    Poziom 12  
    BoskiDialer napisał:
    Czwarty zbiór jest uszkodzony (któryś bajt jest zwiększony o 4). A tak to zauważyłem, że suma kontrolna jest liczona tak:
    chksum = 0xFF - (byte1 + byte2 + byte3 .... + byten)

    Po zsumowaniu wszystkich bajtów wychodzi 0xFF. Do sumy wliczają się wszystkie bajty od nagłówka 0xF0 włącznie.


    Dzięki za sugestie. Będę to jeszcze weryfikował, ale wydaje mi się, ze wszystkie zbiory są prawidłowe.
    Pierwszy zbiór w jako tekst to:
    
    ð  107.5   FM1.1 1
    

    Czwarty zbiór jako tekst to:
    
    ð  105.6   FM1.3 4
    


    Wygląda na to, że wszystko jest OK, bo takie dane ukazują się na wyświetlaczu(pomijając nagłówek i sumę kontrolną)
  • REKLAMA
  • #5 5872450
    Dr.Vee
    VIP Zasłużony dla elektroda
    Bajt kontrolny wcale nie oznacza, że jest to suma kontrolna. Równie dobrze może to być CRC, albo jeszcze co innego.

    Jeśli wiesz, że masz prawidłowe dane, to dużo prościej Ci będzie dopasować algorytm generujący bajt kontrolny.

    Pozdrawiam,
    Dr.Vee
  • #6 5872723
    pox
    Poziom 12  
    Będę musiał jeszcze raz przeanalizować, czy nie wkradł się błąd w czwartej paczce. Może tam nie jest 34 tylko 30. Niestety teraz nie mam takiej możliwości. Postaram odezwać się wieczorem.
  • #7 5873400
    BoskiDialer
    Poziom 34  
    Freddie Chopin: Tak, daleko idące, ale zwiększenie jednego bajtu o 4 jest bardziej prawdopodobne (zmiana jednego bitu z 0 na 1 [lub więcej gdy liczba ma ustawiony bit 2]) niż zwiększenie dwóch o dwa (dwa bity) lub owe 17 i 21. Owszem suma kontrolna nie pozwala dokładnie stwierdzić gdzie jest błąd i jakiego rodzaju (wtedy był by to kod korekcyjny), więc to jest tylko przypuszczenie - jednak czwarty zbiór nie pasuje do pozostałych.

    Dr.Vee: Co do samego sposobu liczenia sumy kontrolnej, to bez kodu lub dokumentacji można co najwyżej zgadywać. Ja najzwyczajniej zsumowałem wszystkie bajty, sumy dla kolejnych zbiorów wyszły: 0x03FF, 0x04FF, 0x03FF, 0x0403, 0x03FF, 0x03FF. Owszem może to być jakiś inny algorytm, ale żeby jednocześnie suma była w większości przypadków równa 0xFF (bajt)?

    pox: To, że suma kontrolna jest obecna, nie oznacza, że jest ona sprawdzana. W przypadku danych krytycznych lub binarnych zazwyczaj jest, ale w przypadku tekstu nie koniecznie.
  • #8 5874092
    pox
    Poziom 12  
    Dzięki za zaangażowanie.

    Jeszcze raz przeanalizowałem dane i faktycznie był w nich błąd.
    Powinno być:
    f0 20 20 31 30 35 2e 36 20 20 20 46 4d 31 2e 33 20 30


    Czyli nie 34 tylko 30.
REKLAMA