ELM327 küldő hosszú parancsokat a busz
SHR LNM
Vezetek egy Renault Megane II
Moszkva, Oroszország
Ez az, amit fogok írni alább, talán csak érdekes a programozók számára, akik mennek, hogy írjon valamit, hogy működjön együtt a CAN buszon keresztül ELM327 vagy nagyon lelkes emberek, akik már próbálták a munkát az ELM terminálon keresztül. Ha a kedves olvasó, valószínűleg egy normál felhasználó, olvasás közben nem érdemes kiadások, mivel ez a tudás nem valószínű, hogy hasznos lehet.
A nagyon egyszerű dolog, én laknak, és elsősorban a leírást, hogyan kell dolgozni a különböző egységek a CAN-busz (és nem csak a befecskendező számítógép), és milyen hosszú a parancsokat és fogadására hosszú választ. Ugyanakkor röviden ismertetjük, hogyan kell építeni az adatkereteket a CAN-busz.
Végén ezt a cikket fog nyújtani a teljes napló, és mégis kivenni az inicializálási folyamatot ELM
> [17: 03: 57,524] at ws
<[0.025]at ws
>
Minden rönk alatt lesz ebben a formátumban. A jel „>” megjelölt és parancsokat küld szögletes zárójelben, ahogy kitalálta, adja meg a küldési időt a milliszekundumos, és a jel "<” отмечены отклики ELM и в квадратных скобках указано время отклика в секундах. Т.е. здесь ответ на команду ATWS пришел через 25 миллисекунд.
ATWS használok helyett ATZ mert ATWS nem állítja vissza a COM port sebesség és az elején a program, akkor „finoman”, hogy növelje ATBRD csapat
>
Itt többek között visszhang
>
Itt menteni forgalmat egy COM port letiltja a felesleges hézagokat
>
Itt letilthatja a kiadását a keret fejléce, mivel semmi érdekes számunkra
>
Menteni egy kicsit a „line feed”, dolgozunk kéz érintése nélkül a terminálon keresztül.
További érdekes csapat.
>
ATAL parancs segítségével továbbítja CAN-busz nem 7 bájt, ahogy azt az alapértelmezett, és 8. A CAN kockaváltások legfeljebb 8 bájt, amelyek közül az első hordoz különleges jelentőséggel és valójában nem kapcsolódik hozzá az adatokhoz. Alapértelmezésben ez a bájt helyettesíti magát ELM és ezt a folyamatot nevezzük „CAN autoformatting”, ami lesz szó után.
A felső 4 bitje ez a bájt lehet 0, 1, 2 vagy 3 (de nem a rendszer kereteket, ahol az első bájt a keret adatokat hordoz, és alkalmasan lehet bármilyen érték)
„0” azt jelenti, hogy ez az egyetlen keret a sorozatban, és az alsó 4 bitet jelzi a hossza a parancsot (de nem több, mint 7)
„1” azt jelenti, hogy az első képkocka a sorozat átvitelére egy hosszú parancsot. Az összes alábbi kezdődik a „2”. Az alsó 4 bit ezen byte, és a következő bájtok hordozzák a csapat hosszú. Ebből az következik, hogy az egyik csapat nem lehet több, mint 4095 bájt, és még mindig azt jelenti, hogy az első keretben mi maradt összesen 6 byte az adatokat
„2” kerül elején minden ezt követő képkocka a szekvenciában, és az alsó 4 bitet itt tartalmazhat ciklikusan működési számlálók, amelyek úgy követhetjük veszteség (bár nem kapcsolja pályán 16 egymást követő veszteségek, de ez rendkívül valószínűtlen)
„3” azt jelzi, hogy ez a keret az FLOWCONTROL. Ez nincs adat, és csak hivatalos tájékoztatást az adatkezelés VHR.
Ott azonnal összpontosítani tartalmát a FlowControl keretben. Ez csak 3 byte, és elküldte a fogadó oldalon.
1 bájt - a felső 4 bit értéke "3" (mint tudjuk), és az alsó 4 bitet vehet a következő értékeket (0 = Clear To Send, 1 = Várakozás, 2 = túlcsordulás / Megszakítás)
Byte 2 - BS (blokk méretét vagy tört méretű) képek száma a küldő oldalon küldhetnek egymásnak, nem várva a következő képkocka a vételi oldalon áramlásszabályzás
Byte 3 - STmin (Separation Idő minimum) vagy a minimális megengedhető idő egymást követő képkockák között milliszekundumban. Ez a bájt vehet értékeket 0x00 és 0xF9, és ha az érték kisebb, mint egy ezredmásodperc 0xF1, és ha az értéke 0xF1 a 0xF9, majd az utolsó szám magában foglalja a több száz milliszekundum. Szóval 0xF1 - 100 ms, és 0xF9 - 900 ms. Ebben az esetben vegye figyelembe, hogy ez a minimum érték a kért fogadó ország, de küldhetünk kereteket ritkábban.
> [17: 03: 57,629] at caf0
<[0.016]at caf0
rendben
>
ATCAF0 kikapcsolja az automatikus formázás keretek CAN-busz. Ez azt jelenti, hogy a részvény a hosszú parancs kockákra, és tegye az első byte-ja, amelyet az imént említettük, most megy, hogy saját.
> [17: 03: 57,645] at cfc0
<[0.016]at cfc0
rendben
ATCFC0 letiltja az automatikus feldolgozás FlowControl kereteket. A legtöbb esetben tartalmaznia kell egy ilyen rendszer nem szükséges. Helyes ELM normálisan megbirkózni ezzel a feladattal, és küldjön a hosszú parancs általában vény nélkül (ha a fogadó országban elég gyors), de hogy egy hosszú választ nem lehet, mivel a korlátozott sebesség COM port.
Most folytassa a configure dolgozni a műszerfalon.
> [17: 03: 57,677] at CRA 763
<[0.016]at cra 763
rendben
>
Testre szabható RX Szűrés CAN ID = 0h763, ezt ID jön válaszokat a kérdéseinkre a műszerfalon, és hogy ne vonja el a ELM feldolgozó rendszer keretek mi kifejezetten jelzi, hogy hol kell várni a választ.
> [17: 03: 57,693] fc sh 743
<[0.016]at fc sh 743
rendben
Elkezdtük beállítása után az automatikus FlowControl. Ebben az esetben nem szükséges, amint azt már korábban letiltotta az automatikus FC, de ahhoz, hogy állítsa. ATFCSH beállítja a CAN ID küldésére áramlásszabályzás keretek és ez az, amit tesz a csapat ATSH
> [17: 03: 57,709] fc sd 30 00 00
<[0.016]at fc sd 30 00 00
rendben
Itt lehet beállítani az alapértelmezett értéket kimenő FC kereteket. BS = 0 azt jelenti, hogy készek vagyunk fogadni a képkockák száma. STmin = 0 azt jelenti, hogy készek vagyunk, hogy őket bármilyen intervallumban, amilyen gyorsan csak lehet küldeni a műszerfalon.
> [17: 03: 57,725] fc SM 1
<[0.016]at fc sm 1
rendben
ATFCSM1 azt jelenti, hogy az ELM kell igazodnia paraméterek FC, akik az imént létrehozott.
> [17: 03: 57,741] st ff
<[0.016]at st ff
rendben
Szerelési ELM belső óra, amely alatt válaszra vár a számítógépen. Ennek értéke időzítő automatikusan beállítja az ELM, hogy az optimális válaszidő. ELM valahogy nem úgy néz ki a kereten belül, mégpedig az első byte, pedig maga „tudja”, amikor a keretek és a kapott válasz, ha az átvitel befejeződött. Ehelyett ELM van az időzítőt, és dinamikusan optimalizálja, bár lehetséges, hogy tiltsa le az automatikus beállítást, és néha szükség van.
> [17: 03: 57,757] AT 0
<[0.016]at at 0
rendben
>
Kikapcsolása az adaptív időzítés, azaz kiigazítás st időzítő, amit hozott maximális érték fölötti. Meg kell azt inicializálni a protokollt, akkor továbbra is csinálni, és csak azért, hogy kitisztuljon, ahogy váltani együttműködni az új egységet.
> [17: 03: 57,773] at sp 6
<[0.016]at sp 6
rendben
Itt kapcsolva ELM a CAN buszon művelet sebességgel 500 kbit / s. (Meg kell jegyezni, hogy a tényleges átviteli szempontjából hasznos adatokat, majd körülbelül 280 kbit / s)
> [17: 03: 57,789] AT 1
<[0.016]at at 1
rendben
Ismét adaptív időzítés - most hasznos számunkra.
Kezdjük, hogy közvetlenül a műszerfalon.
Itt kezdődik # log ki programot piren. Ebben az esetben azt jelenti, hogy miután elküldte előző csapat már több, mint 5 másodperc és valószínűleg diagnosztikai munkamenet zárva az ECU-timeout - akárcsak a legtöbb számítógépen. Ebben az esetben meg kell ismételni a parancsot, hogy megnyitja a munkamenet elküldése előtt a következő parancsot.
>
És itt egy hosszú választ a parancs 2181. Ez a parancs leolvassa az aktuális VIN a műszerfalon. A sorozat akciók a következő:
1) parancsot küld 2181 előtti bodykit neki „02” előtt és az „1” vissza
2), így egy első válasz-keretet „1015618131313131” Itt, annak érdekében, hogy az „1” jelentése Azt jelzi, hogy a válasz áll több keretet, a következő 12 bit „015” - a várható válasz 0h015 dyne = 21 bájt (2 byte pozitív válasz 17 bájt + VIN code + 2 bájtos CRC). Az első keret kaptunk mindössze 6 bájt hasznos „618.131.313.131” (hogyan kell ellenőrizni, hogy ez a kezdet, láttuk pozitív választ). Továbbra is kapjunk (21-6) / 7 = 3 keretben.
3), hogy továbbra is választ kap, meg kell küldeni áramlásszabályzás frame „300 300”. Emlékeztesse, az első bájt a „30” - valójában azt jelenti, hogy ez a FC, a második bájt „03” - beszélünk a küldő oldalon, hogy hajlandó elfogadni a három fennmaradó keret, a harmadik bájt „00” - azt jelenti, hogy készek vagyunk, hogy megkapja a megmaradt képkockák maximális sebessége . Az utolsó „3”, mint korábban, szánják ELM és tájékoztatja arról, hogy vissza kell térnie hozzánk választ, amint megkapja a három kereteket.
4) megkapjuk a megmaradt keretek. Ők minden kezdődik „2” és a második karaktert egyszerűen számláló fut egy kört, 0 és F Továbbá, minden egyes keret (kivéve az utolsó) 7 byte adat. Az utóbbi csak egy byte adat és 6 byte padding legfeljebb 8 bájt.
Tehát megvan a válasz "618131313131" + "31313131313131" + "3131313131319F" + "B5". Mint látható, a VIN kódot, állt 17 egység az ASCII kódot, és CRC = „9FB5”.
Most létrehozhat és elküldhet egy parancsot, hogy rögzítse új VIN áll 17 kettes. VIN csapat rekord az én műszerfal „3B81”. Mögötte kell 17 bájt ASCII és 2 byte az új CRC. Összesen van szükségünk, hogy küldjön egy csapat „3B8132323232323232323232323232323232327E70”. Először osszuk kereteket. Az első 6 byte fér el a második és a harmadik 7, és továbbra is az utolsó 1 byte.
Míg mi lefektetett egy parancsot a kereteket, hogy már több, mint 5 másodperc, és meg kellett nyitnia a munkamenet újra.
Most küldünk az első keret (ami azt jelenti, az elején 1015, már tudjuk)
A válasz megkapjuk a műszerfal keret FC, amely azt mondja, hogy a következő címre lehet küldeni csak egy keret, és nem korábban, mint 0h14 ms. "8484848484" - mint mindig padding.
>
A második keret küldött és fogadott újabb jelzése, hogy további formájában lehet az új FC
>
Elküldte a harmadik keret és a csapat ismét megkapta FC
És az utolsó csapatot küldött a keret és a válaszként kapott „037F3B23”. „03” - azt jelenti, hogy a választ a hosszú parancs VIN bejegyzés a 3 bájt „7F3B23”. A válasz kezdődik „7F”, és ez a válasz nemleges, de még túl korai, hogy ideges. Nézzük megfejteni. A második byte a negatív válasz első byte a csapat, amelyre ez a negatív válasz. A harmadik byte „23” hibakód és piren számunkra dekódolni
# [,380845069885] RSP: 7F 3B 23: NR: Rutin Nem teljes
Negatív válasz itt azt jelenti, hogy a műszerfal átvette és megkezdte munkáját, de a munka még nem fejeződött be.
Lássuk, mi fog történni. Próbáljuk, hogy fontolja meg az új VIN majd ismét 2181 a parancsokat
De megint kaptunk egy negatív választ „7F2121”. Most a parancs „21” és a hibakód is „21”. Ez a hibakód „NR: Busy Repeat Request”. Azaz, a műszerfal is elfoglalva az előző csapat, és kéri, hogy ismételjük meg a parancsot egy idő után piren vár 500 ms, és ismételje meg a parancsot.
>
Ezúttal kapunk pozitív választ, és látható, hogy az új VIN a műszerfalon áll 17 kettes.
Most az egyszerűség kedvéért ismétlem a napló együtt anélkül, hogy a unalmas hozzászólás