Какво се случва, ако два сегмента ID възли са еднакви?
Мрежите CAN-bus не позволяват на два възела да имат един и същ идентификационен сегмент по принцип, но какво се случва, ако двата сегмента ID възли са еднакви?
Преди експеримента трябва да имаме ясно разбиране за структурата на посланията на CAN и принципите на арбитража.
Първо, CAN съобщение структура
Най-широко използваният мрежов стандарт CAN-bus е версия V2.0. Този стандарт се разделя допълнително на части А и Б. Основната им разлика е дължината на идентификационния код в арбитражната област. Сред тях CAN2.0A (стандартен кадър) е 11 бита ID, CAN2.0B (разгънете рамката) е 29 битов ID. Таблица 1 по-долу показва структурата на съобщението CAN:
Таблица 1 структура на съобщение на CAN
| Име на фазата | Фаза дължина / бит | описание | |
| SOF | 1 | означава стартиране на фазата на данните и допълване от единичен господстващ бит | |
| Фаза на отслабване | Стандартна рамка | 12 | Показва приоритета на рамката, съставен от 11 идентификационни адреса и 1 RTR |
| разширена рамка | 32 | Показва приоритета на рамката, съставен от 29 идентификационни адреса, 1 бит SRR, разширен IDE и RTR | |
| Контролна фаза | 6 | означава кода на групата и запазените битове на дължината на данните на сегмента данни | |
| Фаза на данните | 0 ~ 8 | съдържанието на данните, контролната фаза контролира дължината на данните | |
| CRC | 16 | проверка на трансмизирането на рамката грешка, от SOF до фаза на данните, цялото съдържание, с изключение на бита за пълнене | |
| ACK | 2 | друг възел потвърждава, че тази рамка ще бъде приета правилно | |
| Край на рамката | 7 | означава края на рамката | |
На второ място, принципът на арбитраж
Арбитражът на CAN bus се основава на "линия и принцип", както е показано на фигура 1. Когато трансивър излъчва сигнали на различни нива едновременно, рецесивното ниво винаги се покрива от доминиращото ниво. Докато изпраща съобщението, контролерът на CAN ще следи дали статусът на шината е същият като този, който е изпратен сам. Ако несъответствието възниква в сегмента на ИД, ще възникне арбитраж. Ако се появи в други области, ще се задейства съответната грешка.
Следното е ключовият момент. Какво ще стане, ако двата сегмента ID възли са еднакви? Стартирахме експеримента с две карти CAN и един CANScope. Картата CAN симулира стандартен възел CAN за изпращане и получаване на съобщения, а CANScope прави наблюдение на комуникацията, както е показано на фигура 2.
Фиг.2 Изграждане на експериментална платформа
Трето, експериментирайте един "Идентификационният сегмент е същият, но данните са различни"
Канада CAN се използва за изпращане на CAN кадър с данни ID 000H на 01020304050607H и друга CAN карта за изпращане на кадър CAN с 000H данни до 02020304050607H. Данните, които CANScope слуша, са показани на фигура 3. Може да се види, че има голям брой грешки при попълването на полета.

Фиг.3 Грешка при попълване на поле за данни
Защо е така? Най-напред получаваме вълните, съответстващи на двете съобщения за предаване на карти от CAN, както е показано на фигура 4. Тъй като двупосочното съобщение е стандартна рамка за данни и всеки кадър съдържа 8 байта данни, вълните, съответстващи на двете пакети пакети, са точно в сегментите на ID сегмента, RTR, IDE, R0 и DLC. Следователно ролята на арбитража е неефективна и двете възли се смятат за приоритетни и продължават да изпращат данни.
Сега ние се фокусираме върху сегмента данни, данните от първия байт са еднакви, са 00H; втората байт данни са различни, съответно 01H, 02H. Стрелките на фигура 5 показват, че логиката на съответните битове е съответно 0 и 1. По-рано споменахме, че възелът на CAN може да открие дали нивото на шината е същото като нивото, което е изпратено при изпращане на съобщението. Ако несъответствието се случи в района, който не е арбитраж, съответната грешка се задейства, така че ако двете кадри са изпратени към шината в същото време трябва да се появят грешки с битове. Тъй като грешката при изпращането на битове ще причини възела да изпрати 6 господстващи битове, които нарушават правилото за пълнене (активната грешка унищожава данните на рамката), възниква грешка при попълване на полето, както е показано на ФИГ. 3.

Фиг.5 Конфликти в областта на данните
Четвърто, експериментирайте две "едни и същи данни със същия идентификационен номер"
В същото време използвайте две CAN карти за изпращане на кадри CAN, чийто идентификационен номер е 000H до 01020304050607H, а CANScope осъществява мониторинг на комуникацията. На първо място, не проверяваме опцията "отговор на автобуса", за да може CANScope да работи в режим само за слушане. Експерименталните резултати са показани на Фигура 6, а разделителят за отговор е в грешен формат.
Фиг.6 Грешка в формата на разделител на отговора
Защо се случва това? Токът, изпращащ съобщението, ще изпрати два рецесивни битове в сегмента ACK. Ако се получи доминиращо ниво по време на първия бит, рамката се счита за правилно приета. Тъй като двамата арбитри смятат, че са получили правото на арбитраж, когато имат същия арбитражен сегмент, те чакат отговор в сегмента ACK, но в мрежата има само два възела. Следователно, не може да се получи отговор в сегмента ACK и възникне грешка на разделител на отговора. Просто казано, тази ситуация е подобна на факта, че само един възел в автобуса няма да може да изпраща данни. Фигура 7 показва сравнението на формата на вълните, когато няма отговор в сегмента ACK.
Фиг.7 Отговор на ACK
Проверяваме реакцията на шината и започваме експеримента отново (по това време в автобуса има 3 възли). По това време, както е показано на ФИГ. 8, данните на шината се предават и приемат нормално.
Фиг.8 Стартирайте отговора на BUS
Резюме: Когато два възела изпращат едновременно пакети със същия идентификационен номер и данни, възниква грешка при попълване на полето за данни. Когато два възела изпращат пакети със същия идентификационен номер и едни и същи данни, не възниква грешка, ако други възли отговарят. Други възли отговориха с грешка на отговора. Ето защо трябва да избягваме същата ситуация в ID сегмента, когато проектираме CAN шината.





