{
    "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\/pl_pl\/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>",
        "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\/pl_pl\/wp-json\/wp\/v2\/posts\/870",
                "targetHints": {
                    "allow": [
                        "GET"
                    ]
                }
            }
        ],
        "collection": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts"
            }
        ],
        "about": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/types\/post"
            }
        ],
        "author": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/users\/1"
            }
        ],
        "replies": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/comments?post=870"
            }
        ],
        "version-history": [
            {
                "count": 8,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/870\/revisions"
            }
        ],
        "predecessor-version": [
            {
                "id": 1042,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/870\/revisions\/1042"
            }
        ],
        "wp:featuredmedia": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/media\/927"
            }
        ],
        "wp:attachment": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/media?parent=870"
            }
        ],
        "wp:term": [
            {
                "taxonomy": "category",
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/categories?post=870"
            },
            {
                "taxonomy": "post_tag",
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/tags?post=870"
            }
        ],
        "curies": [
            {
                "name": "wp",
                "href": "https:\/\/api.w.org\/{rel}",
                "templated": true
            }
        ]
    }
}