A LIN busz a rossz zavartűrő képessége mellett ezért is alkalmatlan arra, hogy olyan rendszereknél alkalmazzák, ahol gyors információcserére van szükség. Nyilván egy ilyen „sorban mindenkit felszólítok” kör még akkor is végbemegy pár milliszekundum alatt, ha a maximális, 16 elemű a klaszter, de mondjuk egy előgyújtás vezérlés esetében ez nem működhetne, hiszen az alatt a pár ms alatt a motor elég sok fokkal fordul el. A LIN tehát egész egyszerűen ehhez nem elég gyors.
Nincs metronóm
Az előző cikkünkben már kifejtettük, hogy a soros digitális kommunikáció csak akkor lehetséges, hogy ha az adó és a vevő „egyeztetik óráikat”, azaz tudják, hogy mikor kell „feltenniük a kezüket” vagy épp „lapítaniuk”. Ehhez a CAN esetében az adatbusz minden elemébe elhelyeznek egy órajel generátort, amelyeket maguk az üzenetek szinkronizálnak (illetve az ún. lefutó élek, de erről majd egy későbbi cikkben lesz szó). A LIN azonban „kici-óccó”, így a szolga csomópontoknak csak egy oszcillátor adja az ütemet, amiről sokminden elmondható (legfőképpen az, hogy olcsó), de az tuti nem, hogy pontossága kenterbe ver egy atomórát. A masterben viszont van órajel generátor, és emiatt minden egyes üzenet eleje tartalmaz egy szinkronizációs mezőt, amivel a slave csomópontok „képbe kerülnek”, és szinkronizálják a saját kis rezgőkörüket. Erre bizony szükség is van, mert a rezgőkörök például erősen hőmérséklet-függők, és egy autóban egyáltalán nem fordul elő olyan, hogy az egy hálózaton lévő csomópontok közül az egyik mondjuk mínusz 30 fokos hidegben, a másik meg 60 fokos melegben dolgozik. Ja, várjunk: de mégis.
Most jön a „lehúzás”
Azt azt hiszem már említettem, hogy a LIN az akkufeszültséget használja, de ha mégsem, akkor most mondom. Ez azért jó, mert nem kell külön feszültség átalakító és stabilizáló kütyü, ergo: „kici-óccó”.
Két állapot lehetséges, a „domináns” és a „recesszív”. Ez veszettül elegánsan hangzik, de valójában a következőt takarja: ha nem történik semmi, akkor a buszon (azaz azon az egy csoffadt szál kábelen) az akkufeszültség mérhető. Egy bit információ úgy jelenik meg, hogy egy bit időtartamára nullára esik a feszültség. Mivel ezt nem paranormális jelenségek okozzák, hanem valamelyik csomópont zárja testre a buszt, ezért azt szoktuk mondani, hogy a csomópont „nullába húzza” vagy „lehúzza” a buszt.
Fizikailag úgy néz ki a dolog, hogy van a mester csomópont (mivel a „csomópont” egy baromi hosszú szó, és még legalább ezerszer le kell írnom, ezért innentől a „node” szót használom helyette, ami csak négy betű, és ugyanazt jelenti, csak „külföldiül”), ez kapcsolja a buszt össze az akkufeszültséggel. Ebben van egy 1 kΩ-os ellenállás, azért, hogy ha egy node nullába húzza a buszt, akkor ne akadály nélkül haladjon az áram a rendszerint elég vékonyka buszkábelen keresztül a test irányába, mert abból csúnya tűzeset lenne. A slave node-okban is van ellenállás, de sokkal nagyobb, 20-47 kΩ-os, ezt kerüli ki az áram, ha a slave node nullába húz. Egyébként ha recesszív állapotban van a busz, akkor 40-200 mA-es áram folyik rajta át ezeken az ellenállásokon, nyilván minél több node van ráakasztva, az áram annál nagyobb.
Az akkufeszültség viszont minden, csak nem állandó, kábé 10,5-től 14,5 voltig bármi lehet, ezért elég nagy toleranciája van a rendszernek, a masternél akkufeszültség 80 %-a felett recesszívnek tekinthető az állapot és 20 % alatt dominánsnak. Ugyanez a slave node-oknál 60 % és 40 %.
Egyébként a LIN-nek brutálisan nagy a feszültség-toleranciája: 8 és 18 V között simán működnek a node-ok, 7 és 18 V között van a belső tápellátás feszültségtartománya, és (most jön a legjobb), 0,3 és 40 V közé esik az a feszültségtartomány, melyben az eszköz nem szenved sérülést. Gondoljunk bele: 40 voltot szinte semmilyen elektromos komponens nem visel el a kocsiban, de már 18 voltnál is pukkannak ki még a hagyományos halogén fényszóróizzók is, a LIN meg vidáman beszélget tovább magában.
Viszont pont az egyszerűségéből adódóan veszett lassú is: a maximális sebessége 20 kbit/s, amit mondjuk egy hétköznapi Ethernet kábel a maga 1 gigabites átviteli sebességével minimum körberöhög. Igen ám, csak az Ethernetben van 8 ér, szegény LIN-nek meg csak egy jutott. De az egy ér csak az egyik oka a lassúságának, a másik az, hogy mindenképp szükséges beleépíteni egy zavarszűrő kondenzátort, ami elnyeli az elektromágneses zavarok egy részét, de egyben lassítja a feszültségszintek változását is. Van még egy hátránya: míg a CAN esetében ha a két kábelből az egyik elszakad, vagy zárlatos lesz, akkor a rendszer csökkentett sebességgel ugyan, de tud tovább működni, a LIN azonban, csak egyeres, így ha azt az egyet elvágjuk, az bizony nagy érvágás.
Na, lássuk végre azt az üzenetet!
Az üzenet így néz ki:
Először egy minimum 13 bit hosszú domináns állapot jön, ez a break signal, ezzel a master node jelzi, hogy „üzenet következik, mindenki figyeljen!”. Aztán egy határoló rész az ún. brake limiter jön, ami jelzi, hogy vége a brake signalnak, ez minimum 1 bit hosszú recesszív állapot, majd jön a szinkronizációs mező. Itt 0 és 1 váltja egymást, hogy ehhez tudjanak szinkronizálni a slave node-ok rezgőkörei.
Aztán jön a PID, azaz a Protected Identifier, azaz tulajdonképpen a címzés. Ez 8 bitből áll, egy jelzi a kezdetét, egy a végét, és hat pedig azt határozza meg, hogy milyen üzenet fog következni. A jobb matekosok már kiszámolhatták, hogy kettő a hatodikon, azaz 64 üzenettípus továbbítható a LIN-en, de a valóság az, hogy ez csak 60, mivel a 61. és 62. típus diagnosztikai üzenet, a 63. és 64. pedig későbbi fejlesztésekre van fenntartva.
A header alapján tudják a slave node-ok eldönteni, hogy melyiküktől és milyen információt kér a master.
Ezzel vége is a fejlécnek, azaz a headernek, az esetek többségében a master node itt elhallgat, és a slave folytatja az adatmezővel, ami 1-8 bájtig bármilyen hosszú lehet.
Az adatmező után jön az ún. checksum, azaz az ellenőrző mező, ami alapján a master el tudja dönteni, hogy volt-e adatátviteli hiba az üzenetben (ill. az adatmezőben), avagy sem. A header hibája ennél egyszerűbben derül ki: nem válaszol rá egyik slave sem adatmezővel.
Előfordulhat olyan is, hogy a master mondjuk vezérlő üzenetet ad ki, ilyenkor ő maga válaszol a saját headerjére adatmezővel. Mivel a klaszter összes node-ja olvas minden a buszon megjelenő üzenetet, nem csak a master tudja felhasználni a slave-től érkező adatmezőt, hanem bármely más slave is, ha az számára releváns.
Bővíthető
A LIN klaszter újabb node-okkal minden további nélkül bővíthető, vagy akár el is távolíthatók csomópontok, hardveres vagy szoftveres változtatás nélkül. Mivel az üzenetek fejléce a node-okat „szólítja meg”, ezért a bővítés vagy ritkítás úgy valósítható meg, hogy az újonnan kapcsolódó node-ot a master node azonosítja, és hozzárendel egy úgynevezett csomópontcímet, avagy NAD értéket. Ezt a folyamatot a hétköznapi életben „feltanításnak” is szokták hívni.
Végül pedig egy érdekesség: végig úgy beszéltünk a LIN-ről, hogy az egy egyvezetékes rendszer. De mi van akkor, ha valójában egy vezeték sem kell? A megoldás egyszerű: ha az adott node-hoz egyébként is kell hogy menjen akkufeszültség (például egy ablakemelő motornál ez kézenfekvő, de sok másnál is), akkor az információt az a kábel is át tudja vinni, valahogy úgy, mint a számítógépes hálózatoknál a 230 V-os otthoni áramhálózaton jelet továbbító powerline adapterek.
A sorozatunk következő része a legelterjedtebb, és legismertebb fedélzeti kommunikációs rendszert, a CAN-bus-t fogja bemutatni.