چه اتفاقی می افتد اگر دو بخش ID گره یکسان باشند؟
شبکه های CAN-bus اجازه نمی دهند که دو گره به طور یکسان بخش ID را داشته باشند، اما اگر دو بخش گره ID یکسان باشند، چه اتفاقی می افتد؟
قبل از آزمایش، ما باید درک روشنی از ساختار پیام های CAN و اصول داوری داشته باشیم.
اول، ساختار پیام CAN
استاندارد شبکه گسترده CAN bus به طور گسترده ای نسخه V2.0 است. این استاندارد بیشتر به قطعات A و B تقسیم شده است. تفاوت اصلی آنها کد طول ID در منطقه داوری است. در میان آنها CAN2.0A (قاب استاندارد) 11 بیتی ID است، CAN2.0B (گسترش قاب) 29 بیت ID است. جدول 1 زیر ساختار پیام CAN را نشان می دهد:
جدول 1 ساختار پیام CAN
| نام فاز | طول فاز / بیت | شرح | |
| SOF | 1 | به این معنی شروع فاز داده است، و با یک بیت غالب بسازید | |
| فاز تطبیق | قاب استاندارد | 12 | اولویت قاب را نشان می دهد، توسط 11 آدرس ID و 1 RTR را تشکیل می دهد |
| قاب فرمت | 32 | اولویت قاب را نشان می دهد، توسط 29 آدرس ID، 1 بیت SRR، IDE گسترش و RTR را تشکیل می دهد | |
| فاز کنترل | 6 | به معنی کد گروه و بیت های ذخیره شده از طول داده های بخش داده است | |
| فاز داده | 0 ~ 8 | محتوای داده ها، فاز کنترل طول داده را کنترل می کند | |
| CRC | 16 | چک کردن transmission خط فریم، از SOF به مرحله داده، تمام مطالب، به جز پر کردن بیت | |
| ACK | 2 | گره دیگر این قاب را تأیید می کند | |
| پایان قاب | 7 | به معنی پایان قاب | |
دوم، اصل داوری
داوری دائمی CAN بر اساس "خط و اصل" است، همانطور که در شکل 1 نشان داده شده است. هنگامی که فرستنده گیرنده سیگنال های سطوح مختلف را همزمان تولید می کند، سطح پایدار همیشه توسط سطح غالب تحت پوشش قرار می گیرد. هنگام ارسال پیام، کنترل کننده CAN کنترل خواهد کرد که آیا وضعیت اتوبوس همان است که فرستاده شده توسط خود است. اگر ناسازگاری در بخش ID رخ دهد، داوری رخ خواهد داد. اگر در مناطق دیگر رخ دهد، خطای مربوطه باعث خواهد شد.
نکات کلیدی زیر است: اگر بخش های دو گره ID یکسان باشند، چه؟ ما آزمایش را با دو کارت CAN و یک CANScope آغاز کردیم. کارت CAN شبیه سازی گره استاندارد CAN برای ارسال و دریافت پیام ها است و CANScope نظارت ارتباطی را انجام می دهد، همانطور که در شکل 2 نشان داده شده است.
شکل 2 ساخت و ساز بستر آزمایش
سوم، آزمایش یک "بخش ID یکسان است، اما داده ها متفاوت است"
کارت 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 که اطلاعات ID 000H به 01020304050607H است استفاده کنید و CANScope نظارت ارتباطی را انجام میدهد. اول از همه، ما گزینه "پاسخ اتوبوس" را بررسی نمی کنیم تا CANScope در حالت گوش دادن فقط کار کند. نتایج تجربی در شکل 6 نشان داده شده است، و ضلع پاسخ در فرمت اشتباه است.
شکل 6 خطای فرمت ضبط پاسخ
چرا این اتفاق می افتد؟ گره ای که پیام را ارسال می کند، دو بیت کاهش یافته در بخش ACK ارسال می شود. اگر سطح غالب در طول بیت اول دریافت شود، قاب دریافت شده به درستی دریافت می شود. از آنجا که دو داور فکر می کنند که حق داوری را در صورت داشتن یک بخش داوری مشابه دارند، منتظر پاسخ در بخش ACK هستند، اما تنها دو گره در شبکه وجود دارد. بنابراین، در بخش ACK هیچ پاسخی دریافت نمی شود و خطای جداساز پاسخ رخ می دهد. به عبارت ساده، این وضعیت شبیه به این واقعیت است که تنها یک گره در اتوبوس قادر به ارسال داده نیست. شکل 7، مقایسه شکل موج را نشان می دهد، زمانی که هیچ پاسخی در بخش ACK وجود ندارد.
شکل 7 جواب ACK
ما پاسخ اتوبوس را بررسی می کنیم و دوباره آزمایش را شروع می کنیم (در این زمان 3 اتوبوس وجود دارد). در این زمان، همانطور که در شکل نشان داده شده است. 8، اطلاعات اتوبوس به طور معمول منتقل و دریافت می شود.
شکل 8 شروع پاسخ BUS
خلاصه: هنگامی که دو گره یک بار بسته های مشابه با یک ID و داده را همزمان ارسال می کنند، یک خطای فیلد پشته داده می شود. هنگامی که دو گره بسته هایی با همان شناسه و داده های مشابه ارسال می کنند، اگر گره های دیگر پاسخ دهند، خطایی رخ نمی دهد. گره های دیگر با یک خطای پاسخ پاسخ دادند. بنابراین، هنگام طراحی درایو CAN باید از وضعیت مشابه در بخش ID جلوگیری کنیم.





