Ce se întâmplă dacă două segmente de ID de noduri sunt aceleași?
Rețelele CAN-Bus nu permit ca două noduri să aibă același principiu de identificare în principiu, dar ce se întâmplă dacă cele două segmente de identificare a nodurilor sunt aceleași?
Înainte de experiment, trebuie să avem o înțelegere clară a structurii mesajelor CAN și a principiilor arbitrajului.
În primul rând, structura mesajului CAN
Cel mai utilizat standard de rețea CAN-Bus este versiunea V2.0. Acest standard este în continuare împărțit în părți A și B. Principala lor diferență constă în lungimea codului de identificare în zona de arbitraj. Dintre acestea CAN2.0A (cadru standard) este ID-ul de 11 biți, CAN2.0B (extensie cadru) este de 29 biți ID. Tabelul 1 de mai jos prezintă structura mesajului CAN:
Tabelul 1 Structura mesajului CAN
| Numele fazei | Faza lungime / bit | Descriere | |
| FPS | 1 | înseamnă începutul fazei de date și se completează cu un singur bit dominant | |
| Abaterea | Cadrul standard | 12 | Indică prioritatea cadrului, alcătuiesc 11 adrese de identificare și 1 RTR |
| cadru extins | 32 | Indică prioritatea cadrului, alcătuiesc până la 29 de adrese ID, 1 bit SRR, IDE extins și RTR | |
| Faza de control | 6 | înseamnă codul grupului și biți rezervați ai lungimii datelor din segmentul de date | |
| Faza de date | 0 ~ 8 | conținutul de date, controlul fazei de control a lungimii datelor | |
| CRC | 16 | verificați eroarea de transmisie a cadrelor, de la SOF la faza de date, tot conținutul, cu excepția biților de umplere | |
| ACK | 2 | alt nod confirma că acest cadru este recepționat corect | |
| Închidere cadru | 7 | înseamnă capătul cadrului | |
În al doilea rând, principiul arbitrajului
Arbitrajul cu autobuzul CAN se bazează pe "linie și principiu", după cum se arată în figura 1. Atunci când un transmițător emite semnale de niveluri diferite în același timp, nivelul recesiv este întotdeauna acoperit de nivelul dominant. În timp ce trimite mesajul, controlerul CAN va monitoriza dacă starea magistralei este aceeași cu cea trimisă singură. Dacă se întâmplă inconsistența în segmentul ID, va apărea arbitrajul. Dacă apare și în alte zone, eroarea corespunzătoare va fi declanșată.
Următorul este punctul cheie. Ce se întâmplă dacă segmentele de identitate ale celor două noduri sunt aceleași? Am inceput experimentul cu doua carduri CAN si un CANScope. Cardul CAN simulează nodul standard CAN pentru a trimite și primi mesaje, iar CANScope efectuează monitorizarea comunicației, așa cum se arată în figura 2.
Fig.2 Construcția platformei experimentale
În al treilea rând, experimentați unul "Segmentul de identificare este același, dar datele sunt diferite"
O cartelă CAN este folosită pentru a trimite un cadru CAN cu date ID 000H la 01020304050607H și o altă placă CAN pentru a trimite un cadru CAN cu date 000H la 02020304050607H. Datele pe care CANScope le ascultă sunt prezentate în figura 3. Se poate observa că există un număr mare de erori de completare a câmpului de date.

Fig.3 Eroarea umplerii câmpului de date
De ce este așa? Mai întâi obținem semnalele de undă corespunzătoare celor două mesaje de transmisie ale cartelei CAN, așa cum se arată în figura 4. Deoarece mesajul cu două pini este un cadru de date standard și fiecare cadru conține 8 octeți de date, formele de undă corespunzătoare celor două cadre de pachete sunt exact la fel în segmentele segmentului ID, RTR, IDE, R0 și DLC. Prin urmare, rolul arbitrajului este ineficient și ambele noduri se consideră a fi prioritare și continuă să trimită date.
Acum ne concentrăm asupra segmentului de date, datele primului octet sunt aceleași, sunt 00H; datele de al doilea octet sunt diferite, respectiv 01H, 02H. Săgețile din Figura 5 indică faptul că logica biților corespunzători este 0 și, respectiv, 1. Anterior am menționat că nodul CAN va detecta dacă nivelul bus-ului este același cu nivelul pe care l-a trimis la trimiterea mesajului. Dacă inconsistența apare în zona non-arbitraj, eroarea corespunzătoare este declanșată, deci dacă cele două cadre sunt trimise la magistrala în același timp trebuie să apară erori bit. Deoarece eroarea de trimitere a biților va determina nodul să trimită 6 biți dominanți care încalcă regula de umplere (eroarea activă distruge datele cadrului), apare eroarea de umplere a câmpului de date, așa cum se arată în FIG. 3.

Fig.5 Conflictele câmpurilor de date
În al patrulea rând, experimentați două "aceleași date cu același ID"
În același timp, utilizați două carduri CAN pentru a trimite cadre CAN al căror ID este 000H date la 01020304050607H, iar CANScope monitorizează comunicarea. Mai întâi de toate, nu verificăm opțiunea "răspunsul la autobuz" pentru a face CANScope să funcționeze în modul "numai pentru ascultare". Rezultatele experimentale sunt prezentate în Figura 6, iar delimitatorul de răspuns este în format greșit.
Fig.6 Eroare formatare a delimitatorului de răspuns
De ce se întâmplă acest lucru? Nodul care trimite mesajul va trimite doi biți recesivi în segmentul ACK. Dacă se primește un nivel dominant în timpul primului bit, cadrul este considerat a fi primit corect. Deoarece cei doi arbitri cred că au obținut dreptul de arbitraj atunci când au același segment arbitral, ei așteaptă un răspuns în segmentul ACK, dar există doar două noduri în rețea. Prin urmare, nu se poate primi nici un răspuns în segmentul ACK și apare o eroare de delimitare a răspunsului. Pur și simplu, această situație este similară cu faptul că un singur nod din autobuz nu va putea trimite date. Figura 7 prezintă compararea formei de undă atunci când nu există răspuns în segmentul ACK.
Fig.7 Răspunde ACK
Verificăm răspunsul busului și pornim din nou experimentul (în acest moment există 3 noduri în magistrală). În acest moment, așa cum se arată în fig. 8, datele din magistrală sunt transmise și primite în mod normal.
Fig.8 Începeți răspunsul BUS
Rezumat: Atunci când două noduri trimit pachete cu același ID și date în același timp, apare o eroare de completare a câmpului de date. Atunci când două noduri trimit pachete cu același ID și aceleași date, nu apare nici o eroare în cazul în care alte noduri răspund. Alte noduri au răspuns cu o eroare de răspuns. Prin urmare, ar trebui să evităm aceeași situație în segmentul ID atunci când proiectăm magistrala CAN.





