{"id":870,"date":"2018-05-13T21:37:56","date_gmt":"2018-05-13T21:37:56","guid":{"rendered":"http:\/\/hayperek.pl\/?p=870"},"modified":"2018-06-04T11:44:11","modified_gmt":"2018-06-04T11:44:11","slug":"jak-odczytac-cos-z-cana","status":"publish","type":"post","link":"https:\/\/hayperek.pl\/en\/2018\/05\/13\/jak-odczytac-cos-z-cana\/","title":{"rendered":"Jak odczyta\u0107 co\u015b z CAN&#8217;a?"},"content":{"rendered":"<p>Jednym z za\u0142o\u017ce\u0144 projektu by\u0142o zaimplementowanie obs\u0142ugi obu magistrali CAN, jakie mo\u017cna spotka\u0107 w interesuj\u0105cych nas samochodach &#8211; silnika oraz komfortu. Cz\u0119\u015b\u0107 zwi\u0105zan\u0105 z przygotowaniem prototypu sprz\u0119towego interfejsu oraz uruchomienia kontrolera CAN w mikrokontrolerze STM32F407 mamy ju\u017c dawno za sob\u0105 \ud83d\ude42 Mo\u017cemy nawet podejrze\u0107 jakie dok\u0142adnie wiadomo\u015bci <em>(ang. datagrams)<\/em> s\u0105 wymieniane mi\u0119dzy poszczeg\u00f3lnymi w\u0119z\u0142ami sieci.<\/p>\n<p>Pewnie spora cz\u0119\u015b\u0107 z Was zastanawia si\u0119 jak wydoby\u0107 co\u015b sensownego z tego mrowia pozornie niezrozumia\u0142ych cyferek? Jak mo\u017cna zidentyfikowa\u0107 interesuj\u0105ce nas parametry czy pomiary? <\/p>\n<p>Metod jest kilka:<\/p>\n<ol>\n<li>Cz\u0119\u015b\u0107 identyfikator\u00f3w zosta\u0142a ju\u017c wcze\u015bniej zdekodowana i mo\u017cna znale\u017a\u0107 informacj\u0119 na ich temat szperaj\u0105c w sieci,<\/li>\n<li>Obserwuj\u0105c zmieniaj\u0105c\u0105 si\u0119 zawarto\u015b\u0107 datagram\u00f3w mo\u017cna korelowa\u0107 z r\u00f3\u017cnymi akcjami: zwi\u0119kszeniem obrot\u00f3w, przyspieszeniem, naci\u015bni\u0119ciem hamulca, w\u0142\u0105czeniem tempomatu, itd.<\/li>\n<li>Analiza d\u0142ugich log\u00f3w, w poszukiwaniu wolno zmieniaj\u0105cych si\u0119 parametr\u00f3w, np. temperatury zewn\u0119trznej, poziomu paliwa, itp.<\/li>\n<\/ol>\n<p>Oczywi\u015bcie dwie pierwsze metody s\u0105 naj\u0142atwiejsze, jednak aby wycisn\u0105\u0107 maksimum dost\u0119pnych informacji musimy skorzysta\u0107 ze wszystkich trzech sposob\u00f3w. <\/p>\n<h5>Troch\u0119 praktyki<\/h5>\n<p>Sp\u00f3jrzmy na przyk\u0142adowy zrzut okna wbudowanego analizatora magistrali CAN silnika. W ramach przypomnienia: ka\u017cda wiadomo\u015b\u0107 CAN jest opatrzona unikalnym identyfikatorem. M\u00f3wi nam on m.in. kto jest nadawc\u0105 i jakie dane zosta\u0142y zawarte w datagramie. Maksymalnie wiadomo\u015b\u0107 mo\u017ce nie\u015b\u0107 do 8 bajt\u00f3w danych.<\/p>\n<p>Za\u0142\u00f3\u017cmy, \u017ce interesuje nas pr\u0119dko\u015b\u0107 pojazdu. Kr\u0119c\u0105c ga\u0142k\u0105 potencjometru na naszym symulatorze, zmieniamy jej warto\u015b\u0107 i obserwujemy, kt\u00f3re warto\u015bci na analizatorze zmieniaj\u0105 si\u0119 wraz z ni\u0105. Najlepszym kandydatem okazuje si\u0119 by\u0107 wiadomo\u015b\u0107 o ID <em>0x320<\/em>, bajty 4. i 5.<\/p>\n<p><a href=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/05\/motor_1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/05\/motor_1.png\" alt=\"\" width=\"320\" height=\"480\" class=\"aligncenter size-full wp-image-907\" srcset=\"https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/05\/motor_1.png 320w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/05\/motor_1-200x300.png 200w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p>Odczytana przez diagnostyk\u0119 pr\u0119dko\u015b\u0107 w tym momencie wynosi\u0142a 66km\/h. Sp\u00f3jrzmy wi\u0119c na zawarto\u015b\u0107 obu &#8222;podejrzanych&#8221; bajt\u00f3w. Mo\u017cemy j\u0105 odczyta\u0107 heksadecymalnie zar\u00f3wno jako <strong>0xCE33 <\/strong>oraz jako <strong>0x33CE <\/strong>(<a href=\"https:\/\/pl.wikipedia.org\/wiki\/Kolejno\u015b\u0107_bajt\u00f3w\">little\/big endian<\/a>). W pierwszym przypadku warto\u015b\u0107 dziesi\u0119tna to 52787, w drugim &#8211; 13262. <\/p>\n<blockquote><p>Jak zgadn\u0105\u0107 kt\u00f3r\u0105 wybra\u0107?<\/p><\/blockquote>\n<p>Bardzo \u0142atwo! Niewielkie zwi\u0119kszenie pr\u0119dko\u015bci powinno spowodowa\u0107 zmian\u0119 tylko jednego, najmniej znacz\u0105cego bajtu, kt\u00f3ry w zapisie szesnastkowym znajduje si\u0119 zawsze na ko\u0144cu. W analizowanym przyk\u0142adzie jest to bajt <strong>0xCE<\/strong>, st\u0105d uznajemy reprezentacj\u0119 0x33CE(hex) lub 13262(dec) jako poprawn\u0105. Dla oblatanych w temacie &#8211; little endian \ud83d\ude42 <\/p>\n<blockquote><p>Ale jak z 13262 przej\u015b\u0107 do 66? Troch\u0119 czarno to widz\u0119&#8230; <\/p><\/blockquote>\n<p>Rzecz ma si\u0119 pro\u015bciej, ni\u017c si\u0119 spodziewamy &#8211; pocz\u0105tek 132xx to dok\u0142adnie&#8230; 66 x 2. Spr\u00f3bujmy wi\u0119c podzieli\u0107: 13232 \/ 2 = 6631. Jak wida\u0107 otrzymujemy ustawion\u0105 pr\u0119dko\u015b\u0107, pomno\u017con\u0105 przez 100 \ud83d\ude00<\/p>\n<blockquote><p>\u015alepy traf?<\/p><\/blockquote>\n<p>Ok, no to popatrzmy na kolejny przyk\u0142ad. Odczyt z diagnostyki pokazuje 36km\/h.<\/p>\n<p><a href=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/05\/motor_2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/05\/motor_2.png\" alt=\"\" width=\"320\" height=\"480\" class=\"aligncenter size-full wp-image-909\" srcset=\"https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/05\/motor_2.png 320w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/05\/motor_2-200x300.png 200w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p>Warto\u015b\u0107 odczytana z magistrali CAN to: <strong>0x1CC2<\/strong>. Czyli dziesi\u0119tnie: 7362 \/ 2 = 3681. I zn\u00f3w trafiamy idealnie \ud83d\ude42<\/p>\n<p>Obserwuj\u0105c w ten spos\u00f3b zawarto\u015b\u0107 wiadomo\u015bci CAN mo\u017cna wyczyta\u0107 z nich na prawd\u0119 wiele ciekawych informacji \ud83d\ude42 Nie tylko warto\u015bci pomiar\u00f3w, ale r\u00f3wnie\u017c kody b\u0142\u0119d\u00f3w, status poszczeg\u00f3lnych urz\u0105dze\u0144 w samochodzie, itd. A czy w\u0142a\u015bnie nie to jest dla nas najbardziej interesuj\u0105ce? <\/p>","protected":false},"excerpt":{"rendered":"<p>Jednym z za\u0142o\u017ce\u0144 projektu by\u0142o zaimplementowanie obs\u0142ugi obu magistrali CAN, jakie mo\u017cna spotka\u0107 w interesuj\u0105cych nas samochodach &#8211; silnika oraz komfortu. Cz\u0119\u015b\u0107 zwi\u0105zan\u0105 z przygotowaniem prototypu sprz\u0119towego interfejsu oraz uruchomienia kontrolera CAN w mikrokontrolerze STM32F407 mamy ju\u017c dawno za sob\u0105 \ud83d\ude42 Mo\u017cemy nawet podejrze\u0107 jakie dok\u0142adnie wiadomo\u015bci (ang. datagrams) s\u0105 wymieniane mi\u0119dzy poszczeg\u00f3lnymi w\u0119z\u0142ami sieci. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":927,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":{"0":"post-870","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-stodni","9":"post-with-thumbnail","10":"post-with-thumbnail-large"},"_links":{"self":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/comments?post=870"}],"version-history":[{"count":8,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/870\/revisions"}],"predecessor-version":[{"id":1042,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/870\/revisions\/1042"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media\/927"}],"wp:attachment":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media?parent=870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/categories?post=870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/tags?post=870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}