Hva skjer hvis to node-ID-segmenter er de samme?
CAN-buss-nettverk tillater ikke to noder å ha samme ID-segment i prinsippet, men hva skjer hvis de to node-ID-segmentene er de samme?
Før forsøket må vi ha en klar forståelse av strukturen til CAN-meldingene og voldgiftsprinsippene.
Først, CAN-meldingsstruktur
Den mest brukte CAN-buss nettverksstandarden er V2.0-versjonen. Denne standarden er videre delt inn i A- og B-deler. Deres viktigste forskjell er ID-kode lengden i voldgiftsområdet. Blant dem CAN2.0A (standard ramme) er 11 bit ID, CAN2.0B (utvide ramme) er 29 bit ID. Tabell 1 nedenfor viser strukturen til CAN-meldingen:
Tabell 1 CAN-meldingsstruktur
| Fase navn | Fase lengde / bit | Beskrivelse | |
| SOF | 1 | betyr datafase start, og utgjør en enkelt dominerende bit | |
| Abtrisjonsfase | Standard ramme | 12 | Indikerer prioriteten til rammen, utgjør 11 ID-adresser og 1 RTR |
| utvidet ramme | 32 | Angir prioritet av rammen, utgjør 29 ID-adresser, 1 bit SRR, IDE utvidet og RTR | |
| Kontrollfase | 6 | betyr gruppekoden og reserverte biter av datalengdenes datalengde | |
| Datafase | 0 ~ 8 | datainnhold, kontrollfase kontroller datalengden | |
| CRC | 16 | sjekk rammeoverføring erro, fra SOF til datafase, alt innhold, unntatt fyllingsbiter | |
| ACK | 2 | andre node bekrefter at denne rammen er mottatt riktig | |
| Rammeavslutning | 7 | betyr rammeenden | |
For det andre, prinsippet om voldgift
KAN-bussarbitrasjon er basert på "linje og prinsipp", som vist på figur 1. Når en transceiver sender signaler fra forskjellige nivåer samtidig, er det recessive nivået alltid dekket av det dominerende nivået. Under sending av meldingen vil CAN-kontrolleren overvåke om busstatusen er den samme som den som sendes av seg selv. Hvis inkonsekvensen oppstår i ID-segmentet, vil voldgift skje. Hvis det oppstår i andre områder, vil den tilsvarende feilen bli utløst.
Følgende er nøkkelpunktet. Hva om de to node-ID-segmentene er de samme? Vi startet eksperimentet med to CAN-kort og en CANScope. CAN-kortet simulerer CAN-standardkoden for å sende og motta meldinger, og CANScope gjør kommunikasjonsovervåking, som vist i figur 2.
Fig.2 Eksperiment Platform Konstruksjon
Tredje, eksperiment ett "ID-segmentet er det samme, men dataene er forskjellige"
Et CAN-kort brukes til å sende en CAN-ramme med ID 000H-data til 01020304050607H og et annet CAN-kort for å sende en CAN-ramme med 000H-data til 02020304050607H. Dataene som CANScope lytter på, er vist i figur 3. Det kan observeres at det er et stort antall datafeltfyllingsfeil.

Fig.3 Datafelt fylle erro
Hvorfor er dette slik? Vi oppnår først bølgeformene som svarer til de to CAN-kortoverføringsmeldingene, som vist i figur 4. Fordi to-pin-meldingen er en standard dataramme, og hver ramme inneholder 8 byte data, er bølgeformene som svarer til de to rammene av pakker, akkurat det samme i ID-segmentet, RTR, IDE, R0 og DLC-segmentene. Derfor er voldgiftens rolle ineffektiv, og begge noder anser seg for å ha prioritet og fortsetter å sende data.
Nå fokuserer vi på datasegmentet, de første byte-dataene er de samme, er 00H; Den andre byte-data er forskjellig, henholdsvis 01H, 02H. Pilene i figur 5 indikerer at logikken til de tilsvarende biter er henholdsvis 0 og 1. Tidligere nevnte vi at CAN-noden vil oppdage om bussenivået er det samme som nivået det sendte da meldingen ble sendt. Hvis inkonsekvensen oppstår i ikke-voldgiftsområdet, utløses den tilsvarende feilen, så hvis de to rammene sendes til bussen samtidig, må det oppstå Bitfeil. Fordi bitleveringsfeilen vil føre til at noden sender 6 dominerende biter som bryter fyllingsregelen (den aktive feilen ødelegger rammedataene), oppstår datafeltfyllingsfeilen, som vist på fig. 3.

Fig.5 Datafeltkonflikter
For det fjerde, eksperimentere to "de samme dataene med samme ID"
På samme tid bruker du to CAN-kort til å sende CAN-rammer hvis ID er 000H-data til 01020304050607H, og CANScope gjør kommunikasjonsovervåking. Først og fremst sjekker vi ikke alternativet "Bussrespons" for å få CANScope til å fungere i lyttemodus. De eksperimentelle resultatene er vist i figur 6, og responsavgrenseren er i feil format.
Fig.6 Feilsøkingsbegrensningsformatfeil
Hvorfor skjer dette? Koden som sender meldingen, vil sende to recessive biter i ACK-segmentet. Hvis et dominerende nivå mottas under første bit, anses rammen for å være riktig mottatt. Fordi de to voldgiftsmennene tror at de har fått voldgiftsretten når de har samme voldgiftssegment, venter de på et svar i ACK-segmentet, men det er bare to noder i nettverket. Derfor kan det ikke mottas noe svar i ACK-segmentet, og det oppstår en responsavgrensningsfeil. Enkelt sagt, denne situasjonen ligner det faktum at bare ett knutepunkt i bussen ikke vil kunne sende data. Figur 7 viser bølgeformsammenligningen når det ikke er noe svar i ACK-segmentet.
Fig.7 ACK Svar
Vi kontrollerer bussresponsen og starter forsøket igjen (nå er det 3 noder i bussen). På denne tiden, som vist på fig. 8, blir bussen data overført og mottatt normalt.
Fig.8 Start BUS Svar
Oppsummering: Når to noder sender pakker med samme ID og data samtidig, oppstår en feltfeltfelningsfeil. Når to noder sender pakker med samme ID og de samme dataene, oppstår det ingen feil hvis andre noder reagerer. Andre noder reagerte med en responsfeil. Derfor bør vi unngå samme situasjon i ID-segmentet når du designer CAN-bussen.





