Kas atsitinka, jei dviejų mazgų ID segmentai yra vienodi?

Apr 04, 2018 Palik žinutę

Kas atsitinka, jei dviejų mazgų ID segmentai yra vienodi?




CAN-autobusų tinklai neleidžia du mazgus turėti tą patį ID segmentą iš esmės, bet kas atsitinka, jei dviejų mazgų ID segmentai yra vienodi?

Prieš eksperimentą turime aiškiai suprasti "CAN" pranešimų struktūrą ir arbitražo principus.


Pirma, CAN pranešimų struktūra

Dažniausiai naudojamas CAN-bus tinklo standartas yra V2.0 versija. Šis standartas toliau suskirstytas į A ir B dalis. Pagrindinis jų skirtumas yra ID kodo ilgis arbitražo srityje. Tarp jų CAN2.0A (standartinis rėmelis) yra 11 bitų ID, CAN2.0B (išplėsti rėmelį) yra 29 bitų ID. Žemiau pateiktoje 1 lentelėje parodyta CAN pranešimo struktūra:

1 lentelė CAN pranešimų struktūra

Fazės pavadinimas Fazės ilgis / bitas apibūdinimas
SOF 1 reiškia duomenų fazės pradžią ir sudaro vieną dominuojantį bitą
Abtrition Phase Standartinis rėmas 12 Rodo rėmelio prioritetą, sudaro 11 ID adresų ir 1 RTR
pratęstas rėmas 32 Rodo rėmelio prioritetą, sudaro 29 ID adresus, 1 bitų SRR, IDE pratęstas ir RTR
Kontrolės etapas 6 - tai grupės kodas ir rezervuoti duomenų segmento duomenų ilgio bitai
Duomenų fazė 0 ~ 8 duomenų turinys, valdymo fazė kontroliuoja duomenų ilgį
CRC 16 patikrinkite rėmo perkėlimą erro, nuo SOF iki duomenų fazės, visą turinį, išskyrus užpildymo bitus
ACK 2 kitas mazgas patvirtina, kad šis rėmelis yra teisingai gautas
Rėmelio pabaiga 7 reiškia rėmo galą


Antra, arbitražo principas

CAN autobusų arbitražo pagrindas yra "linija ir principas", kaip parodyta 1 paveiksle. Kai radijo siųstuvas tuo pačiu metu skleidžia skirtingų lygių signalus, recesinis lygis visada patenka į dominuojantį lygį. Siunčiant pranešimą, CAN valdiklis patikrins, ar būsenos būsena yra tokia pati kaip ir pats išsiųstas. Jei neatitikimas įvyks ID segmente, atsiras arbitražas. Jei jis įvyks kitose srityse, bus pradėta atitinkama klaida.

Tai svarbiausias dalykas. Ką daryti, jei dviejų mazgų ID segmentai yra vienodi? Pradėjome eksperimentą su dviem CAN korteles ir vieną CANScope. CAN kortelė imituoja CAN standartinį mazgą siųsti ir priimti pranešimus, o CANScope - ryšių stebėsena, kaip parodyta 2 paveiksle.

                                                           

1.jpg

2 pav. Eksperimento platformos statyba


Trečia, eksperimentuokite "ID segmentas yra tas pats, bet duomenys yra skirtingi"

CAN kortele siunčiamas CAN rėmelis su ID 000H duomenimis 01020304050607H ir kita CAN kortele, norėdami siųsti CAN rėmelį su 000H duomenimis į 02020304050607H. Duomenys, kuriuos CANScope išklauso, parodyta 3 pav. Galima pastebėti, kad yra daug duomenų lauko užpildymo klaidų.


2.jpg

3 pav. Duomenų laukas užpildytas erro

Kodėl tai taip? Pirmiausia gauname signalus, atitinkančius du CAN kortelės perdavimo pranešimus, kaip parodyta 4 paveiksle. Kadangi dviejų kontaktų žinutė yra standartinis duomenų rėmelis, o kiekviename rėmelyje yra 8 baitai duomenų, bangos formos, atitinkančios du paketų rėmus, yra ID segmente yra tokie patys, kaip RTR, IDE, R0 ir DLC segmentai. Todėl arbitražo vaidmuo yra neveiksmingas ir abu mazgai laiko save prioritetu ir toliau siunčia duomenis.

3.jpg

Dabar mes sutelkiame dėmesį į duomenų segmentą, pirmieji baitų duomenys yra vienodi, yra 00H; antrojo baito duomenys yra skirtingi, atitinkamai 01H, 02H. 5 rodyklės rodo, kad atitinkamų bitų logika yra atitinkamai 0 ir 1. Anksčiau mes paminėjome, kad CAN mazgas nustatys, ar autobusų lygis yra toks pat kaip ir siunčiamo pranešimo lygis. Jei neatitikimas atsiranda ne arbitražo zonoje, atitinkama klaida yra suaktyvinta, taigi, jei du frontai siunčiami į autobusą tuo pačiu metu, turi atsirasti klaidų klaidos. Kadangi siuntimo klaida siunčia mazgą 6 dominuojančius bitus, kurie pažeidžia užpildymo taisyklę (aktyvioji klaida naikina rėmo duomenis), atsiranda duomenų lauko užpildymo klaida, kaip parodyta fig. 3.


4.jpg

5 pav. Duomenų laukų konfliktai


Ketvirta, eksperimentuokite du "tuos pačius duomenis su tuo pačiu ID"

Tuo pat metu naudokite dvi CAN korteles, norėdami siųsti CAN rėmelius, kurių ID yra 000H duomenys, iki 01020304050607H, o CANScope palaiko ryšių stebėjimą. Visų pirma, mes netikriname "autobuso atsakymo" galimybės, kad "CANScope" veiktų tik klausymo režimu. Eksperimentiniai rezultatai parodyta 6 pav., O atsakymo skirtukas yra neteisingo formato.

5.jpg

6 pav. Atsako formos ribotuvų formato klaida


Kodėl taip atsitiko? Pranešime siunčiamas mazgas atsiųs du recesinius bitus ACK segmente. Jei pirmasis bitas gauna dominuojantį lygį, rėmas laikomas teisingai gautu. Kadangi abu arbitrai mano, kad jie įgijo arbitražo teisę, kai jie turi tą patį arbitražo segmentą, jie laukia atsakymo ACK segmente, tačiau tinkle yra tik du mazgai. Todėl ACK segmente negalima gauti jokio atsakymo ir atsiranda atsakymo delimiterio klaida. Paprasčiau tariant, ši situacija yra panaši į tai, kad vienintelis autobuso mazgas negalės siųsti duomenų. 7 pav. Parodytas signalų palyginimas, kai ACK segmente nėra atsakymo.

6.jpg

Fig.7 ACK Atsakyti


Mes patikriname autobuso atsakymą ir vėl pradedame eksperimentą (šiuo metu autobuse yra 3 mazgai). Šiuo metu, kaip parodyta fig. 8, duomenys apie autobusą yra perduodami ir gaunami įprastai.

7.jpg

Fig.8 Pradėti BUS atsakymą


Santrauka: kai du mazgai vienu metu siunčia paketus su tuo pačiu ID ir duomenimis, atsiranda duomenų lauko įklijavimo klaida. Kai du mazgai siunčia paketus su tuo pačiu ID ir tie patys duomenys, klaida nepasirodo, jei kiti mazgai atsakys. Kiti mazgai atsakė atsakymo klaida. Todėl, projektuojant CAN magistralę, turėtume vengti tokios pačios situacijos ID segmente.


Siųsti užklausą

whatsapp

Telefono

El. paštas

Tyrimo