Controller Area Network

Magistrala CAN (engleză Controller Area Network) este o magistrală serială utilizată în industria de automobile, cu scopul de a asigura comunicarea între mai multe microcontrolere fără utilizarea unui calculator-gazdă. Dezvoltată inițial de către firma Bosch, în anul 1983, specificația a fost lansată oficial în anul 1986 (CAN 1.2) și standardizată sub denumirea de ISO 11898. Ulterior, mai mulți producători de semiconductoare (Intel, Philips, Infineon, Texas Instruments, Motorola) au implementat periferice pe bază de CAN. În 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 gamă largă de senzori, lampi de semnalizare, controlul automat al ușilor) protocolul CAN a început să fie utilizat cu 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. În continuare, dacă nu se specifică altfel, se va face referire doar la noua versiune.

Arhitectura rețelei CAN

modificare

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

  • nivelul fizic - descrie modul de transmitere a semnalului pe magistrală (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 ocupă cu aspecte ce țin de filtrarea și manipularea mesajelor
  • nivelul aplicație

Tipurile de cadre

modificare

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

  • Cadrul de date (engleză Data Frame) - transportă 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 magistrală
  • Cadru de supraîncărcare (engleză Overload Frame) - solicită un timp suplimentar între cadrul (de cerere sau de date) anterior și cel următor

Cadrul de date

modificare

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)
Spațiu Inter-Cadre Cadrul de Date Spațiu 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

Acesta marchează începutul unui cadru de date sau de cerere de date și va consta într-un singur bit "dominant" (de nivel 0 logic). Pentru a începe o transmisie, un nod trebuie să 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

În 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

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

Câmpul de CRC este format din două părți:

  • Secventa de CRC - câmp de 15 biți ce reprezintă 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
Secvența CRC Delimitatorul CRC
Câmpul de Confirmare (ACK)
modificare

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

Câmpul CRC Câmpul ACK EOF
Slotul ACK Delimitatorul ACK
Sfârșitul cadrului
modificare

Sfârșitul cadrului (EOF) este compus din șapte biți recesivi și este specific cadrelor de Date și de Cerere de date.

Delimitator ACK Sfârșitul Cadrului (EOF) Spațiu Inter-Cadre
1 1 1 1 1 1 1

Vezi și

modificare

Interfața serială SPI