Що відбувається, якщо сегменти ідентифікаторів двох вузлів однакові?

Apr 04, 2018 Залишити повідомлення

Що станеться, якщо два сегменти ідентифікатора вузлів однакові?




Мережа CAN-шин не дозволяє двом вузлам мати однаковий сегмент ідентифікатора в принципі, але що станеться, якщо два сегменти ідентифікатора вузлів однакові?

Перед експериментом ми повинні мати чітке розуміння структури повідомлень CAN та принципів арбітражу.


По-перше, структура CAN-повідомлення

Найбільш широко використовуваним стандартом мереж CAN-bus є версія V2.0. Даний стандарт ділиться на частини А та В. Їх основна відмінність - довжина ідентифікаційного коду в арбітражній зоні. Серед них CAN2.0A (стандартна рамка) - 11 біт ID, CAN2.0B (розширення кадру) - 29 біт ID. У таблиці 1 нижче показана структура повідомлення CAN:

Таблиця 1 Структура CAN-повідомлення

Назва фази Довжина фази / біт Опис
SOF 1 означає початок фази даних і складають один домінуючий біт
Фаза аббрітації Стандартна рамка 12 Вказує на пріоритет кадру, складається з 11 адрес ID та 1 RTR
розтягнута рамка 32 Вказує на пріоритет кадру, складається з 29 ідентифікаційних адрес, 1 бітового SRR, розширеного IDE та RTR
Контрольна фаза 6 означає код групи та зарезервовані біти довжини даних сегмента даних
Фаза даних 0 ~ 8 зміст даних, контроль етапу управління довжиною даних
CRC 16 Перевірка кадру transimission erro, від SOF до фази даних, весь вміст, крім наповнення бітів
ACK 2 інший вузол підтверджує, що цей фрейм повинен бути отриманий правильно
Кадр кінця 7 означає кінець рами


По-друге, принцип арбітражу

CAN автобусне арбітраж базується на "лінії та принципі", як показано на малюнку 1. Коли трансивер випромінює сигнали різних рівнів одночасно, рецесивний рівень завжди охоплює домінуючий рівень. Під час відправлення повідомлення контролер CAN перевіряє, чи статус шини такий, як той, який він сам відправив. Якщо невідповідність виникає в сегменті ідентифікаторів, трапляється арбітраж. Якщо це відбувається в інших областях, відповідна помилка буде спрацьовувати.

Ключовим пунктом є наступне. Що робити, якщо два сегменти ідентифікатора вузлів однакові? Ми розпочали експеримент з двома CAN-картками та одним CANScope. CAN-карта імітує стандартний вузол CAN для надсилання та отримання повідомлень, а CANScope здійснює моніторинг зв'язку, як показано на малюнку 2.

                                                           

1.jpg

Рис.2 Будівництво експериментальної платформи


По-третє, експериментуйте один "Ідентифікаційний сегмент ідентичний, але дані різні"

CAN-карта використовується для передачі CAN-камери з даними даних 000H до 01020304050607H та іншою карткою CAN для відправлення CAN-камери з цифрами 000H до 02020304050607H. Дані, які слухають CANScope, показано на рисунку 3. Можна помітити, що існує велика кількість помилок заповнення поля даних.


2.jpg

Рис.3 Поле даних заповнити помилку

Чому це так? Спочатку ми отримуємо сигнали, що відповідають двом повідомленням CAN-картки, як показано на малюнку 4. Оскільки двоконтактне повідомлення є стандартним кадром даних, а кожен кадр містить 8 байтів даних, сигнали, що відповідають двом кадрам пакетів, є точно так само в сегменті ідентифікатора, RTR, IDE, R0 та DLC. Тому роль арбітражу неефективна, і обидва вузли вважають себе пріоритетними та продовжують надсилати дані.

3.jpg

Тепер ми зосереджуємось на сегменті даних, перші дані байтів однакові, це 00H; дані другого байту різні, відповідно 01H, 02H. Стрілки на рисунку 5 вказують на те, що логіка відповідних бітів становить 0 і 1, відповідно. Раніше ми згадували, що вузол CAN виявляє, чи рівень шини такий, як рівень, який він надіслав при відправленні повідомлення. Якщо невідповідність виникає в районі не арбітражу, спрацьовує відповідна помилка, тому, якщо два фрейми відправляються на шину одночасно, мають траплятися помилки. Оскільки помилка відправлення біт викликає вузол відправлення 6 домінуючих бітів, які порушують правило наповнення (активна помилка знищує дані фрейму), відбувається помилка заповнення поля даних, як показано на Фіг. 3.


4.jpg

Рис.5 Конфігурація полів даних


По-четверте, експериментуйте два "однакові дані з тим самим ідентифікатором"

У той же час, використовуйте дві CAN-карти для передачі CAN-кадрів, ідентифікатор яких - 000H даних до 01020304050607H, а CANScope здійснює моніторинг зв'язку. Перш за все, ми не перевіряємо параметр "response bus", щоб CANScope працював у режимі прослуховування. Результати експерименту показані на рисунку 6, а розділювач відповідей знаходиться у неправильному форматі.

5.jpg

Рис.6 Помилка формату розмежування відповідей


Чому це відбувається? Вузол, який надсилає повідомлення, надсилає два рецесійні біти в сегменті ACK. Якщо домінуючий рівень отриманий протягом першого біта, вважається, що кадр отримано правильно. Оскільки два арбітри вважають, що вони отримали арбітражне право, коли вони мають один і той же арбітражний сегмент, вони чекають відповіді в сегменті ACK, але в мережі є лише два вузли. Тому в сегменті ACK не може бути отримана відповідь, і виникає помилка делімітації відповідей. Просто кажучи, ця ситуація схожа на те, що лише один вузол в автобусі не зможе надсилати дані. На рисунку 7 показано порівняння сигналу, коли в сегменті ACK немає відповіді.

6.jpg

Fig.7 ACK Відповідь


Ми перевіряємо відповідь автобуса та починаємо експеримент знову (у цей час в автобусі є 3 вузли). У цей час, як показано на Фіг. 8, дані про шину передаються і отримуються нормально.

7.jpg

Рис.8 Запустіть автовідповідач


Підсумок: коли два вузли одночасно відправляють пакети з однаковими ідентифікаторами та даними, виникає помилка підбиття поля даних. Коли два вузли відправляють пакети з тим самим ідентифікатором та однаковими даними, помилка не відбувається, якщо інші вузли відповідають. Інші вузли відповіли помилкою відповіді. Тому ми повинні уникати такої ж ситуації в ID-сегменті при проектуванні CAN-шини.


Послати повідомлення

whatsapp

Телефон

Електронна пошта

Розслідування