Vad händer om två nod-ID-segment är desamma?
CAN-bussnät tillåter inte att två noder har samma ID-segment i princip, men vad händer om de två nod-ID-segmenten är desamma?
Före experimentet måste vi ha en tydlig förståelse för strukturen i CAN-meddelandena och principerna om skiljeförfarande.
Först, CAN-meddelandestrukturen
Den mest använda CAN-busnätverksstandarden är V2.0-versionen. Denna standard är vidare uppdelad i A- och B-delar. Deras huvudsakliga skillnad är ID-kodlängden i skiljeområdet. Bland dem CAN2.0A (standardram) är 11 bit ID, CAN2.0B (expandera ram) är 29 bit ID. Tabell 1 nedan visar strukturen för CAN-meddelandet:
Tabell 1 CAN-meddelandestruktur
| Fasnamn | Faslängd / bit | Beskrivning | |
| SÅ F | 1 | betyder datafasstart och utgörs av en enda dominerande bit | |
| Abtritionsfas | Standardram | 12 | Anger prioritet för ramen, utgörs av 11 ID-adresser och 1 RTR |
| utökad ram | 32 | Indikerar ramens prioritering, utgörs av 29 ID-adresser, 1 bit SRR, IDE förlängd och RTR | |
| Kontrollfas | 6 | betyder gruppkoden och reserverade bitar i datasegmentets datalängd | |
| Datafas | 0 ~ 8 | datainnehåll, kontrollfas styr datalängden | |
| CRC | 16 | kolla ramtransformering erro, från SOF till datafas, allt innehåll, förutom fyllningsbitar | |
| ACK | 2 | annan nod bekräftar att denna ram är korrekt mottagen | |
| Ramänden | 7 | betyder ramänden | |
För det andra, principen om skiljeförfarande
KAN-bussavgörelsen är baserad på "linje och princip", som visas i Figur 1. När en transceiver emitterar signaler av olika nivåer samtidigt, är den recessiva nivån alltid täckt av den dominerande nivån. När meddelandet skickas kommer CAN-regulatorn att övervaka om busstatusen är densamma som den som skickats av sig själv. Om inkonsekvensen uppträder i ID-segmentet kommer skiljeförfarande att ske. Om det inträffar i andra områden kommer motsvarande fel att utlösas.
Följande är huvudpunkten. Vad händer om de två nod-ID-segmenten är desamma? Vi startade experimentet med två CAN-kort och en CANScope. CAN-kortet simulerar CAN-standardnoden för att skicka och ta emot meddelanden, och CANScope gör kommunikationsövervakningen, som visas i Figur 2.
Fig.2 Experimentplattformkonstruktion
Tredje, experimentera en "ID-segmentet är detsamma, men uppgifterna är olika"
Ett CAN-kort används för att skicka en CAN-ram med ID 000H-data till 01020304050607H och ett annat CAN-kort för att skicka en CAN-ram med 000H-data till 02020304050607H. De data som CANScope lyssnar på visas i figur 3. Det kan observeras att det finns ett stort antal fel på datafältet.

Fig.3 Datafält fyller erro
Varför är det så? Vi erhåller först de vågformar som motsvarar de två CAN-kortöverföringsmeddelandena, som visas i figur 4. Eftersom tvåpinnarmeddelandet är en standard dataram och varje ram innehåller 8 byte data, är vågformerna som motsvarar de två paketramarna exakt densamma i ID-segmentet, RTR, IDE, R0 och DLC-segmenten. Skiljedomsrollen är därför ineffektiv och båda noderna anser sig vara prioriterade och fortsätter att skicka data.
Nu fokuserar vi på datasegmentet, den första byte-data är densamma, är 00H; Den andra byte-data är olika, respektive 01H, 02H. Pilarna i figur 5 indikerar att logiken hos motsvarande bitar är 0 respektive 1. Tidigare nämnde vi att CAN-noden kommer att upptäcka om bussenivåen är densamma som den nivå som skickades när meddelandet skickades. Om inkonsekvensen uppträder i icke-skiljeområdet, utlöses motsvarande fel, så om de två ramarna skickas till bussen samtidigt måste bitfel uppstå. Eftersom bitöverföringsfelet kommer att orsaka att noden skickar 6 dominerande bitar som bryter mot fyllningsregeln (det aktiva felet förstör ramdata) uppstår datafältets fyllningsfel, såsom visas i FIG. 3.

Fig.5 Datafältskonflikter
För det fjärde, experimentera två "samma data med samma ID"
Samtidigt använder du två CAN-kort för att skicka CAN-ramar vars ID är 000H-data till 01020304050607H och CANScope gör kommunikationsövervakning. Först och främst kontrollerar vi inte alternativet "Bussrespons" för att göra CANScope-arbetet i läget för lyssna. Experimentella resultat visas i Figur 6, och svaravgränsaren är fel format.
Fig.6 Svarsfel för responsavgränsning
Varför händer detta? Noden som skickar meddelandet skickar två recessiva bitar i ACK-segmentet. Om en dominerande nivå tas emot under den första biten anses ramen vara korrekt mottagen. Eftersom de två skiljemännen anser att de har erhållit skiljedomsrätten när de har samma skiljedomssegment väntar de på ett svar i ACK-segmentet, men det finns bara två noder i nätverket. Därför kan inget svar tas emot i ACK-segmentet och ett svarsfel uppstår. Enkelt uttryckt, liknar denna situation det faktum att endast en nod i bussen inte kommer att kunna skicka data. Figur 7 visar vågformsjämförelsen när det inte finns något svar i ACK-segmentet.
Fig. 7 ACK-svar
Vi kontrollerar bussen svaret och startar experimentet igen (det finns 3 noder i bussen vid det här tillfället). Vid denna tidpunkt, såsom visas i FIG. 8, sänds bussdata och mottas normalt.
Fig.8 Starta BUS Svara
Sammanfattning: När två noder skickar paket med samma ID och data samtidigt, uppstår ett fel på datafältet. När två noder skickar paket med samma ID och samma data, inträffar inget fel om andra noder svarar. Andra noder svarade med ett svarsfel. Därför bör vi undvika samma situation i ID-segmentet när CAN-bussen designas.





