CAN ( Controller Area Network ) de date magistrala este un serial sistem de autobuz , care este utilizat pe scară largă în multe industrii, în special industria de automobile .
A fost standardizat cu ISO 11898 .
Aplică o abordare cunoscută sub denumirea de multiplexare și care constă în conectarea la același cablu (un autobuz ) a unui număr mare de computere care, prin urmare, vor comunica pe rând. Această tehnică elimină necesitatea conectării unor linii dedicate pentru fiecare informație de transmis (conexiune punct-la-punct). De îndată ce un sistem (mașină, avion, barcă, rețea de telefonie etc. ) atinge un anumit nivel de complexitate, abordarea punct-la-punct devine imposibilă din cauza cantității imense de cabluri care trebuie instalate și a costului acestuia. masă, materiale, muncă, întreținere).
Introducerea autobuzelor multiplexate (în principal CAN) în automobil a avut ca scop reducerea cantității de cabluri din vehicule (existau până la 2 km de cabluri pe mașină), dar mai ales a permis explozia numărului de computere și senzori distribuiți pe tot vehiculul și serviciile corespunzătoare (reducerea consumului, controlul poluării , siguranță activă / pasivă , confort, detectarea defecțiunilor etc. ), reducând în același timp lungimile cablurilor.
Autobuzul de date CAN este rezultatul colaborării dintre Universitatea din Karlsruhe și Bosch .
A fost utilizat pentru prima dată în sectorul auto , dar este utilizat în prezent în majoritatea industriilor, cum ar fi aeronautica, prin protocoale standardizate bazate pe CAN.
A fost introdus împreună cu Intel în 1985 , dar nu a fost standardizat de ISO până la începutul anilor 1991.
În 1992, mai multe companii s-au reunit pentru a crea CAN in Automation, o asociație care își propune să promoveze CAN.
A fost lansată o primă dezvoltare numită FD pentru „Flexibel Data rate”.
O a doua evoluție purtată de Bosch , numită „XL”, este în curs de dezvoltare.
Există două standarde pentru stratul fizic:
CAN este o magistrală de date serială bidirecțională semi-duplex în industria auto, dar este utilizată unidirecțional - simplex - în aeronautică, pentru a obține un comportament determinist .
Fiecare dispozitiv conectat, numit „nod”, poate comunica cu toate celelalte.
Pentru o magistrală de date CAN „cu viteză mică”, numărul de noduri este limitat la 20. Pentru o magistrală de date CAN cu „viteză mică”, aceasta este limitată la 30.
Fiecare nod este conectat la magistrală printr-o pereche răsucită (ecranată sau nu) .
Cele două capete ale magistralei trebuie blocate înapoi cu rezistențe de 120 Ω ± 10% (toleranță între 108 Ω și 132 Ω).
Accesul la magistrala de date CAN urmează tehnica CSMA / CR (ascultarea fiecărei stații înainte de a vorbi, dar nu vorbi, rezoluția coliziunilor în funcție de prioritate).
Lungimea maximă a autobuzului este determinată de viteza utilizată:
Viteza ( kbit / s ) |
Lungime ( m ) |
---|---|
1000 | 30 |
800 | 50 |
500 | 100 |
250 | 250 |
125 | 500 |
62.5 | 1000 |
20 | 2.500 |
10 | 5.000 |
Codificarea utilizată este de tip NRZ (fără revenire la 0) :
Nodurile sunt cablate pe magistrală prin principiul „SAU cu fir” din punct de vedere electric („cu fir ȘI” din punct de vedere logic), ceea ce înseamnă că, în cazul transmiterii simultane de la două noduri, valoarea 0 suprascrie valoarea 1.
Deci spunem:
Stările logice și nivelurile electrice utilizate între cele două linii ale perechii diferențiale pentru CAN-ul de viteză mică sunt următoarele:
Stare logică | V CANH-GND | V CANL-GND | V CANH-CANL |
---|---|---|---|
Recesiv sau „1” | 1,75 V | 3,25 V | −1,5 V |
Dominant sau „0” | 4 V | 1 V | 3 V |
Stările logice și nivelurile electrice utilizate între cele două linii ale perechii diferențiale pentru ADC de mare viteză sunt după cum urmează:
Stare logică | V CANH-GND | V CANL-GND | V CANH-CANL |
---|---|---|---|
Recesiv sau „1” | 2,5 V | 2,5 V | 0 la 0,5 V |
Dominant sau „0” | 3,5 V | 1,5 V | de la 0,9 la 2 V |
Durata unui bit se numește „Nominal Bit Time”.
Fiecare bit este alcătuit din mai multe segmente tactate de ceasul intern al fiecărui nod:
„Cuantumul timpului” este unitatea de timp construită din perioada oscilatorului intern al fiecărui nod.
Frecvența magistralei fiind de cel mult 1 MHz și cea a oscilatoarelor de câțiva MHz, „Cuantumul timpului” merită în general mai multe perioade de ceas (între 1 și 32 de ori).
Durata fiecărui segment este următoarea:
Segment | Durata în „Time Quantum” |
---|---|
Sincronizare | 1 |
Răspândire | de la 1 la 8 |
Faza tampon n o 1 | de la 1 la 8 |
Faza tampon n o 2 | de la 2 la 8 |
Astfel, durata unui bit poate varia de la 5 la 25 „Time Quantum”.
Cu cât frecvența ceasului intern al nodului este mai mare, cu atât poate fi mai scurtă durata „Time Quantum”, cu atât ultimele trei segmente vor conta „Time Quantum” și cu atât precizia de sincronizare va fi mai bună.
Segment de sincronizareSegmentul de sincronizare este utilizat pentru a sincroniza diferitele noduri.
Trecerea de la 0 la 1 sau de la 1 la 0, efectuată pentru nodul de trimitere, trebuie să aibă loc în acest segment. Dacă pentru un nod receptor această tranziție nu are loc în același segment, se datorează faptului că este desincronizată. Aceasta este o eroare de fază.
Datorită bitului de transparență, această verificare se poate face cel puțin la fiecare 5 biți (pentru primele câmpuri ale cadrului în care este utilizat).
Segment de propagareSegmentul de propagare este utilizat pentru a compensa fenomenele de propagare pe autobuz.
Segmente de fazăSegmentele de fază sunt utilizate pentru a compensa erorile de fază detectate în timpul tranzițiilor.
Durata acestor segmente poate varia în cazul resincronizării.
Punct de prelevarePunctul de eșantionare sau „Punctul de eșantionare” este momentul în care valoarea bitului este citită pe magistrală. Acest lucru se întâmplă între cele două segmente de fază.
SincronizareExistă două tipuri de sincronizare:
Pinout-ul pe magistrala de date CAN este standardizat și folosește un conector DE-9 :
Broşă | Descriere |
---|---|
1 | (Rezervă) |
2 | POT SĂ |
3 | Masa |
4 | (Rezervă) |
5 | Protecție (opțional) |
6 | Masa |
7 | CANH |
8 | (Rezervă) |
9 | Alimentare externă (opțional) |
Există, de asemenea, două standarde pentru stratul de legătură de date:
Există mai multe tipuri de cadre:
Între două cadre, emițătoarele trebuie să respecte o pauză (perioada inter-cadru) echivalentă cu durata a trei biți în timpul căreia magistrala este menținută în stare recesivă.
Cadrul de date este utilizat pentru a trimite informații către alte noduri.
Un cadru de date constă din șapte câmpuri diferite:
Câmpurile sunt transmise în ordine de la SOF la EOF.
În fiecare câmp al cadrului, biții sunt transmiși de la cel mai puternic la cel mai slab.
Câmp de arbitrajCâmpul de arbitraj este compus din 11 biți de identificare pentru CAN 2.0A și 29 de biți pentru CAN 2.0B urmat de bitul RTR (Remote Transmission Request) care este dominant. Acest câmp servește ca un identificator pentru datele transportate în câmpul de date.
Cei 11 biți de CAN 2.0A permit 2 11 = 2048 combinații.
Cei 29 de biți de CAN 2.0B permit 2 29 = 536 870 912 combinații.
Câmp de comandăCâmpul de control este format din șase biți.
Cel mai semnificativ bit este folosit pentru a diferenția tipul de cadru:
Următorul bit nu este utilizat.
Cei patru biți cel mai puțin semnificativi numiți DLC (Data Length Code) reprezintă numărul de octeți ai câmpului de date de la bord (PAYLOAD).
Acest număr de octeți poate varia de la 0 la 8 sau nouă valori stocate cu cei patru biți ai câmpului DLC. Prin urmare, valorile DLC mai mari de 9 nu ar fi utilizate (de la 9 la 15).
Câmp de dateCâmpul de date poate varia de la 0 la 8 octeți.
În cazul unui cadru de cerere, câmpul de date este gol.
Câmp CRCCâmpul este compus din cincisprezece biți de CRC (Cyclic Redundancy Check) și dintr-un așa-numit bit delimitator („delimitator CRC”) care este întotdeauna recesiv.
CRC este calculat din toate câmpurile transmise până acum (adică SOF, câmp de arbitraj, câmp de control și câmp de date; biții de transparență nu sunt luați în considerare). Mulțimea constituie polinomul f ( x ).
Algoritmul constă în primul rând în înmulțirea lui f ( x ) cu 2 15 .
Atunci polinomul f ( x ) este împărțit (modulul 2) la polinomul g ( x ) = x 15 + x 14 + x 10 + x 8 + x 7 + x 4 + x 3 + x 0 .
Odată realizate diviziunile succesive, restul constituie secvența CRC.
Distanța Hamming a algoritmului utilizat este 6, ceea ce înseamnă că pot fi detectate maximum cinci erori.
Datorită acestui sistem de detectare, rata de eroare înregistrată este foarte mică (mai mică de 4,6 × 10 −11 ). În plus, rețeaua este capabilă să diferențieze erorile punctuale de erorile redundante. Astfel, orice dispozitiv defect poate fi deconectat de la rețea pentru a limita perturbările. Rețeaua intră apoi în modul „degradat”.
Câmp de confirmare ACKCâmpul este compus dintr-un bit de confirmare ACK (ACKnowledge) și un așa-numit bit delimitator („ACKnowledge delimiter”) care este întotdeauna recesiv.
Toți receptorii care au primit mesajul cu succes trebuie să-l recunoască prin transmiterea unui bit dominant pe durata bitului ACK, care permite nodului expeditor să știe că cel puțin unul dintre nodurile de recepție a primit mesajul.
Dacă un nod receptor nu a primit sau a primit mesajul incorect, nu poate utiliza acest mecanism pentru a semnaliza eroarea, deoarece o stație de recepție trebuie să trimită doar un bit dominant pentru a masca toți biții recesivi. Pentru a semnaliza defecțiunea, trebuie să trimită un cadru de eroare.
Cadrul de solicitare este utilizat pentru a solicita date de la un alt nod. Este similar cu cadrul de date, cu excepția:
Rețineți că faptul că bitul RTR este recesiv în cazul unui cadru de solicitare înseamnă că, dacă un cadru de date este trimis simultan cu același câmp de arbitraj, acesta este cadrul de date care are prioritate.
Pentru a asigura transmiterea mesajelor, se utilizează metoda „ bit-stuffing ”.
Acesta constă, în cazul în care au fost trimiși cinci biți de aceeași polaritate la rând, adăugând un pic de polaritate opusă secvenței, pentru a sparge șiruri excesiv de mari de biți identici. Această metodă se aplică numai câmpurilor SOF, arbitraj, comandă, date și CRC (delimitator exclus).
De exemplu, „1111 1110” va deveni „1111 1011 0”.
Ce se întâmplă dacă mai multe noduri încearcă să transmită simultan?
Există o procedură de acces la autobuz la care fiecare nod trebuie să trimită:
Astfel, o prioritate este atinsă datorită domeniului arbitrajului.
Cu cât este mai mic, cu atât conține mai mulți biți de ordin mare 0 (dominant), cu atât va avea mai multă prioritate.
Această fază de prioritizare sau arbitraj se încheie la bitul RTR.
De îndată ce este detectată o eroare, nodul nu așteaptă sfârșitul cadrului incriminat, trimite imediat un cadru de eroare pentru a semnala o problemă în transmisie.
Un cadru de eroare constă din două câmpuri diferite:
Cadrul de eroare poate fi:
O serie de erori sunt detectabile de către noduri.
Eroare de bițiDe fiecare dată când un nod emite un pic pe autobuz, acesta recitește autobuzul și trebuie să găsească bitul pe care l-a scris. Dacă la trimiterea unui bit recesiv, acesta recitește un bit dominant, acesta a fost modificat.
Acest mecanism este identic cu cel care permite prioritizarea, motiv pentru care nu trebuie luat în considerare în domeniul arbitrajului.
La fel pentru câmpul de confirmare, dacă bitul recesiv trimis de nodul expeditor devine dominant, pur și simplu unul sau mai multe noduri primitoare au confirmat recepția corectă a cadrului, deci nu este o eroare.
Eroare de lucruriDacă șase biți consecutivi de aceeași polaritate sunt citiți pe magistrală, mecanismul de transparență nu a fost respectat sau un bit a fost modificat.
Eroare CRCDacă valoarea CRC calculată de nodul de primire este diferită de CRC codificată în cadru de către nodul de trimitere, cadrul a fost corupt.
Delimitator CRCDacă bitul „delimitator CRC” citit de nodurile de recepție nu este recesiv, bitul a fost modificat.
ACEroare de cunoaștereDacă bitul ACK recesiv trimis de nodul expeditor nu a fost suprascris de un bit dominant, atunci niciun nod receptor nu l-a primit.
AC Delimitarea cunoștințelorDacă bitul „ACKnowledge delimiter” citit de nodurile de recepție nu este recesiv, bitul a fost modificat.
Eroare de recuperarePrin construcție, cadrul de eroare încalcă regula bit-stuffing , deoarece, oricum se întâmplă, cei șase biți ai steagului de eroare sunt identici.
Când un nod trimite un cadru de eroare, toate celelalte noduri detectează o eroare de tip „Stuff error” și încep, de asemenea, să trimită un cadru de eroare.
În cazul cadrelor de eroare active, numărul de biți dominanți pe rând nu trebuie să depășească doisprezece biți. Dincolo de aceasta, nodurile care nu și-au trimis cadrul de eroare nu trebuie să facă acest lucru.
Ultimul nod care trimite trimite delimitatorul (opt biți recesivi) și pune capăt cacofoniei.
Nodul care a trimis cadrul incriminat își retrage apoi șansa.
Și așa mai departe, până când trece cadrul sau unul dintre contoare de eroare face ca nodul să schimbe modul de eroare.
Contoare de eroriFiecare nod are două contoare de erori:
Contorul de erori de transmisie al unui nod în modul transmițător este:
Contorul de erori de primire al unui nod în modul receptor este:
În funcție de contoare de erori, nodul modifică modul de eroare. Se află trei:
Cadrul de suprasarcină poate fi utilizat în două cazuri:
Un cadru de suprasarcină constă din două câmpuri diferite:
Cadrul de suprasarcină este similar cu un cadru de eroare activ.
Când un nod transmite un cadru de suprasarcină pentru a solicita o întârziere (condiția n o 1), acesta suprascrie cei trei biți recesivi ai perioadei inter-cadre, nodurile rămase detectează supraîncărcarea și ei înșiși emit suprasolicitare cadre (condiția n o 2).
Ca și în cazul cadrelor de eroare active, numărul de biți dominanți pe rând nu trebuie să depășească doisprezece biți. Dincolo de aceasta, nodurile care nu și-au trimis cadrul de suprasarcină nu trebuie să facă acest lucru.
Ultimul nod care trimite trimite delimitatorul (opt biți recesivi) și pune capăt cacofoniei.
Mai multe straturi de aplicații au fost definite pe standardul CAN: