Magistrala CAN () 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 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
Transferul de mesaje se manifestă și totodată este controlat prin patru tipuri diferite de cadre: Cadrul de date () - transportă date de la transmițător la receptor Cadru de solicitare ()- cadru de solicitare a unui cadru de date (având aceeași valoare a câmpului Id) Cadrul de eroare () - transmis de fiecare nod la detecția unei erori pe magistrală Cadru de supraîncărcare () - solicită un timp suplimentar între cadrul (de cerere sau de date) anterior și cel următor
Cadrul de date Cadrul de date este compus din șapte câmpuri: Startul cadrului () Câmpul de arbitrare () Câmpul de control () Câmpul de date () Câmpul CRC Câmpul de confirmare (ACK) Sfârșitul cadrului ()
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 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 () iar celelalte noduri vor folosi oportunitatea de a se sincroniza (hard synchronization) pe frontul crescător al bitului de start.
Câmpul de arbitrare În cazul cadrului standard este compus din câmpul de Identificare a nodului de 11 biți, Id și din bitul de RTR ().
Câmpul de control 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 ().
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 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) Câmpul de confirmare (ACK) are lungimea de 2 biți și constă în slotul de ACK () și delimitatorul de ACK () 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 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 Interfața serială SPI
Categorie:Interfață (software) Categorie: Transmitere de date