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

Jak obliczyć słowo kontrolne w ramkach danych między mikrokontrolerami?

gbladocha 17 Wrz 2012 16:07 1500 4
REKLAMA
  • #1 11320120
    gbladocha
    Poziom 10  
    Problem z wyliczeniem słowa kontrolnego . Już długo się mecze i nie mogę dać rady .Czy ktoś ma pomysł
    jako obliczyć. Przeczytałem szukałem i nie mam już pomysłu. Analizuje wymianę dany miedzy miko procesorami
    Ramka zapisu wygląda tak(prawidłowa):
    5,95,48,56,146,10,1,255,52,3,2,95,48,53,146,202,3
    5,95,48,56,146,10,1,0,203,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,1,202,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,2,201,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,3,200,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,4,207,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,5,206,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,6,205,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,7,204,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,8,195,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,9,194,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,10,193,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,11,192,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,12,199,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,13,198,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,14,197,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,15,196,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,16,219,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,17,218,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,18,217,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,19,216,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,20,223,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,21,222,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,22,221,3,2,95,48,53,146,202,3,
    5,95,48,56,146,10,1,23,220,3,2,95,48,53,146,202,3,
    Zmienne w ramce czwarte słowo (10) a dana to w pozycji siódmej (np.:0,2,3, itp. do 255 ) .Słowo kontrolne jest w pozycji ósmej i wahają się od 0-255.Może Wy macie jakiś pomysł na obliczenie?
  • REKLAMA
  • #2 11322726
    And!
    Admin grupy Projektowanie
    Rozumiem że posiadasz dwa komunikujące się procesory i nie znasz sposobu generowania ramki ?

    Każda ramka zawiera 17 bajtów.
    Na jednej pozycji masz 8bit zmienną a na innej 8bit CRC.
    Jeżeli CRC zależy tylko od danych w ramce, a zmienia się tylko jedno słowo 8bit,
    to można zrobić tabelę z wartościami adresowalną 0-255 co oznacza daną, pod danym adresem będą zawarte wyniki CRC.
    Można sprawdzić czy się zgadza, jeżeli nie, CRC zależy od czegoś jeszcze.

    Jeżeli nie chcesz tablic, można np. ułożyć funkcje logiczne dla każdej z wartości,
    a następnie wykonać minimalizację funkcji.

    Inny sposób to próba zbudowania drzewa decyzyjnego w oparciu,
    o wartości poszczególnych bitów.

    Jest też metoda nie korzystająca z metod matematycznych :)
    Przy tak małej liczbie danych możesz też wydrukować w postaci tabeli
    DEC HEX BIN -> DEC HEX BIN
    i spróbować "zauważyć/zgadnąć" zależności.
  • REKLAMA
  • Pomocny post
    #3 11324760
    __Grzegorz__
    Poziom 30  
    (bajt a) xor (bajt b) = 203 (0xCB)
    ...

    EDIT: rozwiązanie:
    robisz xor kolejnych bajtów i wychodzi ci zawsze 0

    przykład
    dziesiętnie:
    5 95 48 56 146 10 1 247 60 3 2 95 48 53 146 202 3
    hex:
    5 5F 30 38 92 A 1 F7 3C 3 2 5F 30 35 92 CA 3

    i :
    5 xor 5F xor 30 xor 38 xor 92 xor A xor 1 xor F7 xor 3C = 0
    oraz
    3 xor 2 xor 5F xor 30 xor 35 xor 92 xor CA xor 3 = 0

    xor pierwszych 9 bajtów zawsze da 0
    xor pozostałych ośmiu też daje 0

    voila...
  • REKLAMA
  • Pomocny post
    #4 11326038
    avital
    Poziom 15  
    a dokładniej to jest tak -

    ramka z jednego proca:

    5,95,48,56,146,10,1,0,203,3

    odp. z drugiego:

    2,95,48,53,146,202,3,



    pierwszy bajt transmisji określa ilość merytorycznych bajtów w ramce.(05) lub (02) dla tych przykładów.

    2 i 3 bajt to adres urządzenia lub proca widoczny w zapytaniu i odpowiedzi (95,48)

    dalej zawartość "merytoryczna" ramki np.(56,146,10,1,0,) dla pierwszej ramki zaczynającej się na (05).

    dalej suma kontrolna xor (203) wszystkich bajtów oprócz bajtu samej sumy i bajtu "END"

    bajt zakończenia transmisji "END" (03).

    P.S.

    Nie zmieniałem DEC na HEX ale zasada widoczna.
    `
    Pytanie co to za układ ?
  • #5 11355250
    gbladocha
    Poziom 10  
    Bardzo dziękuję Wam koledzy za pomoc.
REKLAMA