Peugeot 206 VAN šyna 2018.03.07 at 14:24

Kažkaip pasigedau informacijos Internete, apie prisijungimą prie Peugeot 206 informacinio tinklo, VAN – Vehicle Area Network. Pirma mintis yra tokia – atliko man nuo mašinos ekraniukas, kuriame buvo rodoma visokia informacija (radijo, durelių atidarymo ir t.t.). Atrodo va taip:

Taigi, pagalvojau, kad reiktų jį truputį „pareverseengineerinti“, čia toks naujadaras, kilęs iš „reverse engineering„. Visų pirma prasiėjau per pajungimo lizdą, kad išaiškinti kontaktų reikšmes.

Dabar, kai jau daugmaž aišku, kas kur jungiasi, galima pradėti daryti bandymus. Gal nesprogs. Bet, kol nepamiršau, trumpai apie lentelė. Po kontakto numeriu spėtina/tikra kontakto reikšmė, žemiau kur tas kontaktas pajungtas ekraniuko bloko viduje ir komentarai. AMIS čipas – tai VAN kontroleris MTC-30521, aprašymas čia. SAGEM – pagrindinis procesoriukas ir displėjaus valdiklis. Detalesnės informacijos nėra, bet iš jo 80 kontakto valdosi ekrano apšvietimas („backlight“). Turbūt PWMu. Duomenų greitis – 125 bodai (baud), arba 125 kHz. Tą man padėjo nustatyti oscilografas. Kadangi oscilografas protingas (Rigol MSO2072A su visom atrakintomis funkcijoms), o signalas laaabai panašus i CAN, pabandžiau dekoduoti siunčiamą informaciją. Gavosi, aišku, šnipštas. Tiksliau, dekoduoja, bet labai jau kosminiai duomenys… Bet žinant, kad pas 2005 metų mašiną gali būti VAN, CAN arba VAN-CAN tinklas – nieko stebėtino, kad neteisingai iškoduoja ne CAN standarto duomenis. Čia panašiau į VAN, nors hardwariniame lygyje jis atitinka CAN, bet programiškai ten gali būti bet kas, ką sugalvojo gamintojas. Tuomet smalsu prisikabinti prie ekraniuko, ir pabandyti gauti neapdorotus VAN duomenis. Dėl to nereikia naudoti CAN kontrolerių (pvz., MCP2515), o imti grynus duomenis iš CAN interfeisinių mikroschemų (pvz., TAJ1050, MCP2551). Lemona vietoje turėjo MCP2551 tai tą ir paėmiau. Kad būtų dar greičiau – viską sukabinau ant Arduino Uno + Velleman VMA201 maketinės plokštės skydo. Jungimas pagal aprašymą:

MCP2551 kontaktai > Arduino/displėjaus kontaktai:

  1. TXD > Arduino D11;
  2. VSS > Arduino GND;
  3. VDD > Arduino +5V;
  4. RXD > Arduino D10;
  5. Vref > NC;
  6. CAN_L > 4 ir 5 displėjaus modulio kontaktai (sujungti viduje, PCB takeliu);
  7. CAN_H > 17 ir 18 displėjaus modulio kontaktai (sujungti viduje, PCB takeliu);
  8. Rs > Arduino GND (gal nebūtina visai jungti).

Žinoma, displėjaus ir Arduino GND kontaktus irgi reiktų į krūvą sujungti (jei maitinimas nuo skirtingų šaltinių). Taigi, „geležinė“ pusė jau padaryta, dabar reikia programinės. Kadangi čia ne tikrasis CAN protokolas, tai ir visi Arduininiai pavyzdukai su CAN nuskaitymų greičiausiai neveiks arba rodys kosmosus. Bet geras dalykas tas, kad Arduino ir MCP2551 bendrauja paprastu serijinių duomenų ryšiu (RX, TX) – taigi, imkime ir skaitykime duomenis iš RX kontakto, paprasta, bet bus „gryniakas“. Programėlė labai trumpa:

#include <SoftwareSerial.h>
SoftwareSerial MCP(10, 11);               // MCP2551 prijungtas prie Arduino pinų RX (D10 <> 4), TX (D11 <> 1)

void setup() {

  Serial.begin(57600);                    // Sujungimo su Arduino greitis
  MCP.begin(125000);                      // Sujungimo su MCP2551 greitis
}

void loop() {

  if (MCP.available()) {                  // Jeigu atėjo pranešimas iš MCP2551
    for (int i = 0; i <= 7; i++) {        // Skaidom po vieną segmentuką
      Serial.print(MCP.read(), HEX);      // Rašom skaičius HEXu
      Serial.print(":");                  // Tarp skaičių dvitaškis
    }
    Serial.println (" ");                 // Permeta kursorių žemyn, sekančio nuskaitymo įrašymui
  }
}

Iš komentarų turėtų būti aišku, kas čia kur. Rezultate gavau iiilgą duomenų stulpelį (796 įrašai), bet išfiltravus unikalių įrašų yra tik 20. Sąrašas yra čia, Excel failiuke. Dar, spėju, tie įrašai, kurie prasideda ne A8, gali būti tiesiog trukdžių iškraipyti ir juos gal galima būtų išmesti. Chm, įdomu, o ką reikia nusiųsti ekraniukui, kad ką nors parodytų. Turbūt teks prisigaudyti duomenų iš Pežuko…

 

 

Leave a Reply

*