Controller Area Network

De la Wikipedia, enciclopedia liberă
Salt la: Navigare, căutare

Magistrala CAN (engleză Controller Area Network) este o magistrala seriala utilizata în industria de automobile, cu scopul de a asigura comunicarea intre mai multe microcontrolere fără utilizarea unui calculator-gazda. Dezvoltata inițial de către firma Bosch, în anul 1983, specificația a fost lansata oficial în anul 1986 (CAN 1.2) și standardizata sub denumirea de ISO 11898. Ulterior, mai multi producători de semiconductoare (Intel, Philips, Infineon, Texas Instruments, Motorola) au implementat periferice pe baza de CAN. In septembrie 1991, Bosch lansează versiunea a 2-a a specificației (CAN 2.0).

Pe lângă industria de automobile (sisteme de frânare, o gama larga de senzori, lampi de semnalizare, controlul automat al ușilor) protocolul CAN a început sa fie utilizat su succes și în alte ramuri ale electronicii industriale (echipamente medicale, războaie de țesut).

Principial, diferențele dintre versiunea 1.2 și 2.0 a standardului, constau în domeniul de adresare a nodurilor, care a fost extins în noua versiune. Mai exact, CAN 1.2 definește doar un singur tip de mesaj (mesaj standard) având lungimea câmpul de identificare a nodului (Id) de 11 biți, pe când versiunea CAN 2.0 mai introduce, pe lângă tipul de mesaj definit anterior și un mesaj cu lungimea Id-ul de 29 de biți numit mesaj extins. In continuare, dacă nu se specifica altfel, se va face referire doar la noua versiune.

Arhitectura rețelei CAN[modificare | modificare sursă]

Specificația de CAN definește mai multe nivele:

  • nivelul fizic - descrie modul de transmitere a semnalului pe magistrala (reprezentare unui bit, nivele de transmisie a semnalelor, aspecte legate de mediul de transmisie)
  • nivelul transfer - descrie tipurile de mesaje trimise/recepționate de un nod de la nivelul sau superior (obiect); tot în grija acestui nivel țin și aspectele legate de durata unui bit, sincronizare, formatul mesajelor, tehnici de arbitrare, confirmare, detecție de erori precum și mecanisme de restrângere a perturbațiilor
  • nivelul obiect - se ocupa cu aspecte ce țin de filtrarea și manipularea mesajelor
  • nivelul aplicație

Tipurile de cadre[modificare | modificare sursă]

Transferul de mesaje se manifesta și totodată este controlat prin patru tipuri diferite de cadre:

  • Cadrul de date (engleză Data Frame) - transporta date de la transmițător la receptor
  • Cadru de solicitare (engleză Remote Frame)- cadru de solicitare a unui cadru de date (având aceeași valoare a câmpului Id)
  • Cadrul de eroare (engleză Error Frame) - transmis de fiecare nod la detecția unei erori pe magistrala
  • Cadru de supraîncărcare (engleză Overload Frame) - solicita un timp suplimentar intre cadrul (de cerere sau de date) anterior și cel următor

Cadrul de date[modificare | modificare sursă]

Cadrul de date este compus din șapte câmpuri:

  • Startul cadrului (engleză Start of Frame)
  • Câmpul de arbitrare (engleză Arbitration field)
  • Câmpul de control (engleză Control field)
  • Câmpul de date (engleză Data field)
  • Câmpul CRC
  • Câmpul de confirmare (ACK)
  • Sfârșitul cadrului (engleză End of Frame)
Spatiu Inter-Cadre Cadrul de Date Spatiu Inter-Cadre
Începutul cadrului Câmpul de Arbitrare Câmpul de Control Câmpul de Date Câmpul CRC Câmpul de ACK Sfârșitul Cadrului
Începutul cadrului[modificare | modificare sursă]

Acesta marchează începutul unui cadru de date sau de cerere de date și va fi consta într-un singur bit "dominant" (de nivel 0 logic). Pentru a începe o transmisie, un nod trebuie sa verifice dacă magistrala este în starea inactiv (engleză bus idle) iar celelalte noduri vor folosi oportunitatea de a se sincroniza (hard synchronization) pe frontul crescător al bitului de start.

Câmpul de arbitrare[modificare | modificare sursă]

In cazul cadrului standard este compus din câmpul de Identificare a nodului de 11 biți, Id și din bitul de RTR (engleză Remote Transmission Request).

Câmpul de control[modificare | modificare sursă]

Câmpul de control este format din sase biți dintre care primii doi biți sunt rezervați (r0 și r1) iar restul de 4 biți formează Codul de Lungime a Datelor (engleză Data Length Code).

Numărul octeților de date Codul Lungimii Datelor
DLC3 DLC2 DLC1 DLC0
0 d d d d
1 d d d r
2 d d r d
3 d d r r
4 d r d d
5 d r d r
6 d r r d
7 d r r r
8 r d d d
Legenda: d - dominant ('0'), r - recesiv ('1')
Câmpul de CRC[modificare | modificare sursă]

Campul de CRC este format din din doua parți:

  • Secventa de CRC - câmp de 15 biți ce reprezinta restul împărțirii șirului de biți format din câmpurile SOF, arbitrare, control și date la polinomul-generator CRC: X^15 (+) X^14 (+) X^10 (+) X^8 (+) X^7 (+) X^4 (+) X^3 (+) 1 (cod BCH)
  • Delimitatorul de CRC - format dintr-un singur bit "recesiv"
Câmpul de date Câmpul CRC ACK
Secventa CRC Delimitatorul CRC
Câmpul de Confirmare (ACK)[modificare | modificare sursă]

Câmpul de confirmare (ACK) are lungimea de 2 biți si consta în slotul de ACK (engleză ACK Slot) și delimitatorul de ACK (engleză ACK Delimiter) de valoare "recesiv" (bit 1). In schimb, în ceea ce privește valoarea bitului de ACK Slot, transmițătorul va scrie o valoare "recesiva"; dacă mesajul a fost recepționat corect de către o stație, atunci receptorul va suprascrie acest bit cu o valoare "dominanta", informând astfel transmițătorul ca cel puțin un nod a recepționat corect mesajul transmis pe magistrala.

Câmpul CRC Câmpul ACK EOF
Slotul ACK Delimitatorul ACK
Sfarsitul cadrului[modificare | modificare sursă]

Sfarsitul cadrului (EOF) este compus din sapte biti recesivi si este specific cadrelor de Date si de Cerere de date.

Delimitator ACK Sfârșitul Cadrului (EOF) Spatiu Inter-Cadre
1 1 1 1 1 1 1

Vezi și[modificare | modificare sursă]

Interfața serială SPI