OPEL CAN BUS HACK

Sieć CAN OPEL ASTRA H – odczyt jasności podświetlenia

Witam,

W tej części opiszę jak w prosty i szybki sposób zrobić użytek ze sprzętu który skompletowaliśmy we wcześniejszym wpisie i pokażę, jak odczytać jasność podświetlenia wyświetlacza CID ze SLOW SPEED OPEL CAN.

 

Podłączenie

Zaczynamy od podłączenia modułu Arduino do komputera i zaprogramowaniu go, by komunikował się z programem CAN-Sniffer by MartinViljoen. Trzeba założyć konto na forum i pobrać paczkę o nazwie „CAN-BUS-TOOL.zip – Can-Bus Super Sniffer V1.08„. Martin na swojej stronie udostępnia wsad do Arduino, mi jednak on się nie kompilował – szczerze już nie pamiętam dlaczego. Kiedy uporałem się z błędami kompilacji dodałem do kodu między innymi komentarz z rozpiską pinów w OBDII i trzy dyrektywy #define, które usprawniają pracę z programem, gdy trzeba się szybko przełączyć na inną prędkość:

 

Trzy prędkości szyn danych

Pełny opis pinów w złączu OBDII dla Oplów posiadających sieć OPEL CAN: GM-LAN (od około 2002 roku):

  1. SW-LS-CAN – 33kB / DW-FT-CAN (+)   –  <125kB
  2. n/a
  3. MS – CAN (+)  – 95kb
  4. GND
  5. signal GND
  6. HS-CAN (+) – 500kb – ISO 15765
  7. n/a
  8. reserved
  9. DW-FT-CAN (-)   –  <125kB
  10. n/a
  11. MS-CAN (-)  – 95kb
  12. K-Line (KW82)
  13. reserved
  14. HS-CAN (-) – 500kb – ISO 15765
  15. n/a
  16. BATT +

Zasadniczo w Oplu wyróżnić można 3 sieci OPEL CAN:

  • SLOW(LS)
  • MEDIUM(MS)
  • HIGH(HS)

 

Różnią się nie tylko prędkością, ale i zastosowaniem – orientacyjnie:

Rodzaj Sieci CAN Prędkość Zastosowanie
SLOW OPEL CAN 33.3 kbps Manetki, przyciski na kierownicy, szyby, czujniki drzwi, parktronic…
MEDIUM OPEL CAN 95 kbps Radio, klimatyzacja, moduł BT, wyświetlacz CID/GID etc.
HIGH OPEL CAN 500 kbps Moduły krytyczne dla auta: ECU, ABS, ESP, etc.

Wiadomość niosąca informację o jasności podświetlenia przesyłana jest siecią SLOW SPEED CAN – LSCAN, więc do tej sieci trzeba się podpiąć. Szyna ta jest szczególna, bo używa tylko linii CAN-H, linią CAN-L jest pin oznaczony jako „masa sygnałów” w złączu diagnostycznym. Tak więc wpinamy się w następująca piny w złączu diagnostycznym:

  • CAN_H ⇒ PIN 1
  • CAN_L ⇒ PIN 5

CAN-BUS SHIELD podlaczenie - CAN SLOW

Teraz Pozostaje tylko określić na którym porcie COM jest widoczny nasz zestaw Arduino + CAN-SEED, można to podejrzeć w Arduino IDE:

Arduino Com prev

 

Uruchomienie i konfiguracja

Uruchamiamy CAN-Sniffer z prawami administratora i wybieramy Tools > Connect to COM:
CAN-BUS_selectCom

Prawdopodobnie dostaniemy taki błąd:
CAN-BUS_invalidPort

więc klikamy OK i wybieramy właściwy COM:
CAN_BUS_selectPort

Klikamy ponownie połącz z COM i w tym momencie powinny zacząć napływać dane:
CAN-BUS_frames

Zaczynamy teraz kręcić pokrętłem od regulacji jasności i obserwujemy, która wiadomość się zmienia
CAN ID: 0x235 wygląda podejrzanie:
CAN-BUS_Opel Astra Can Frame CID illumination

klikamy w nią 2x i powinna pojawić się następująca tabelka:
CAN-BUS_egzamin CID illumination msg

teraz kręcą gałką podświetlenia, powinniśmy obserwować zmiany w tabeli:

  • rozjaśnianie
    CAN-BUS_egzamin CID illumination light down
  • ściemnianie
    CAN-BUS_egzamin CID illumination light up

TA DAM!  Jesteście HAKIERAMI Gratulacje! 🙂
OPEL CAN ZHACKOWANY! 
msg ID odpowiedzialny za jasność ekranu znaleziony.
A co by było, jak bym wysłał tą wiadomość, ale ze zmienionymi wartościami?… Teraz ogranicza was już tylko wyobraźnia 😉

Poniżej zamieszczam filmik na YT pokazujący zależność zmiany podświetlenia od wartości
msgID = 0x235:

Taka jest metodyka sniffowania sieci CAN, teraz pozostało tylko zlokalizować CAN ID interesujących nas wiadomości, np.: Światła, klakson, kierunkowskaz, wycieraczki, otwarcie zamka z pilota, etc…

Powodzenia,
themarvin

17 komentarzy

  1. Witam, szukam adresu Id świateł. Na jakiej prędkości szukać? Znalazłem id włącznika świateł (0x23A na 33kbps) ale interesuje mnie co dokładnie włącza światła np po zapłonie .

    1. Hej, światła są na slow Can
      mógłbym podać Ci ID, ale zapasuję całą zabawę 😛
      Podpowiem tylko, że informacja o tym jakie światła są właczone jest wysyłana cyklicznie 😉

      Co do „interesuje mnie co dokładnie włącza światła np po zapłonie” nie mam pewności, ale z tego co wiem (sam nie sprawdzałem) przednie lampy ogarniane są przez BCM, tylne przez REC. Wnioskuję to po tym, że w tych modułach ustawia się automatyczne włączanie świateł po zapłonie.

      pozdro,
      mVn

      1. Jeszcze jedno, id świateł 11 czy 29 bit? W ogóle na linii 33kbps pojawiają się 29bit informacje?

  2. Twój Post mocno rozjaśnił mi temat jednak mam pytanie natury technicznej 🙂
    Czy jest możliwość by jednocześnie czytać pakiety ze wszystkich trzech SLOW(LS), MEDIUM(MS) i HIGH(HS) bramek?

    Jak możnaby to skonfigurować?
    Dzięki za info

    1. Dobre pytanie!
      dwie drogi:
      1) łączysz się po jednej szynie z jakimś modułem który jest połączony z szynami o pozostałych prędkościach i z niego wyciągasz interesujące dane (oczywiście, nie jest powiedziane, że się uda!) – tanie i łatwe z punktu widzenia HW, ale dużo pracy zajmie implementacja SW (jak zbudować zapytanie, żeby cel odpowiedział.
      2) budujesz urządzenie, które jest w stanie pracować z trzema oddzielnymi szynami danych. Do każdej szyny potrzebny jest oddzielny transceiver no i mikrokontroler który to ogarnie – Atmega już wymięka na średniej prędkości, więc pozostaje ARM. HW ciężko, ale jak napiszesz dobre biblioteki, to SoftWare’owo bajka 😉
      Dla mnie w grę wchodzi tylko opcja 2) jednak jeszcze nie szukałem optymalnego i taniego rozwiązania, chodź wiem, ze jest to nieuniknione w dalszych projektach…
      pozdro,
      mVn

      1. No właśnie też myślałem nad opcją nr 2, ale zastanawiam sie też nad takim rozwiązaniem: 3x elm bluetooth – (każdy z nich czyta z oddzielnej szyny danych) + raspberry pi 3 🙂

        I przy okazji pytanie nr 2 🙂
        Posiadam Vectre C z 2004 i mam zamiar wymienić standardowy wyświeltacz (http://elektron.pol.lublin.pl/users/djlj24/studio24/kable/jpg/gidvec.jpg) na raspberry, który między innymi sterowałby klimatronikiem (głosowo :O ). Czy próbowałeś wysyłać jakieś paczki do sterowania temperaturą ? Czy to jest w ogóle na szynie Can czy na sławnej oplowskiej przerobionej I2C ? Chodzi mi o komunikacje panel klimy -> dmuchawa| panel klimy -> wyświetlacz

        Dzięki!

        1. Jedno pytanie: czy ELM< -BT->RBpi3 jest na tyle szybki, ze ogarnie MSCAN? a tym bardziej HSCAN? przyjrzyj się czy na MSCAN Ci pakietów nie gubi, u mnie Atmega nie wyrabiała i 5-10% gubiła 🙁

          Jeśli idzie o klimatyzację, tylko delikatnie się o nią potknąłem. Wiem, że komunikuje się z radiem i wyświetlaczem po MSCAN. Wysyła informacje o swoim stanie. Ale czy uda Ci się nią sterować z zewnątrz? pewności nie mam – pozostają Ci eksperymenty 😉

    1. Witaj,

      Nie. Każda prędkość ma oddzielne przewody (2 przewody do CANH, 2 przewody do CANM i 1 przewód do CANL)
      Tak. Wszystkie szyny są dostępne w złączu diagnostycznym (OBD2)

  3. Hej, czy mógłbyś przybliżyć jak teraz można wysłać jakąś wiadomość? Najlepiej na przykładzie rozjaśniania?

    1. Hej Paweł,
      pozwól, ze odpowiem na Twoje pytania za jednym razem.
      Na etapie rozwoju i poznawania sieci lepiej, zapomniałem o arduino, a teraz używam raspberryPi. O ile arduino dawało radę dla LowSpeed, tak dla Middle i High miało problem, szczególnie dla długich ramek które są dzielone na części – arduino potrafiło je pogubić 🙁

      Wysyłanie wiadomości jest dość proste, postaram się napisać o tym artykuł, niemniej jednak jasność podświetlenia nie jest dobrym przykładem. W sieci CAN już jest moduł który ciągle wysyła informację o jasności, więc ciężko będzie go „nadpisać” ponieważ moduł końcowy dostaje dwie informacje, oryginalną i nasz i koniec końców głupiej. Może lepiej otworzyć/zamknąć drzwi? 😀 one też są na LowSpeed 😉

Leave a Reply

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *