3.25. أساسيات ناقل CAN

صُمّم CAN (Controller Area Network) في الأصل بواسطة شركة Bosch في ثمانينيات القرن الماضي لربط جميع وحدات التحكم الإلكترونية في السيارة على ناقل واحد قصير مشترك. وما زال يهيمن على ضفيرة أسلاك السيارة، لكن المتانة نفسها والسلوك في الزمن الحقيقي وتصميم تعدد المتحكمات تجعله الناقل الميداني الافتراضي في الأتمتة والروبوتات والمعدات الزراعية والصناعية بمختلف أنواعها.

لا يملك CAN "متحكماً" واحداً ومجموعة من "الطرفيات" كما هو الحال في SPI و I2C. فكل عقدة على الناقل هي نظير للأخرى، وبإمكان أي عقدة أن تُرسل متى كان الناقل خاملاً. وما يجعل ذلك قابلاً للتوسع هو تصميم الناقل القائم على البث مع التحكيم.

3.25.1. البث مع التحكيم بحسب الأولوية

تحمل كل رسالة على ناقل CAN معرّفاً (identifier) -- 11 بت للإطار القياسي الكلاسيكي، و29 بت للنسخة الموسّعة. والمعرّف ليس عنواناً؛ بل يوسم موضوع الرسالة (عدد دورات المحرك في الدقيقة، وموضع دواسة الفرامل، وجهد البطارية، إلخ). فعندما تريد عقدة إرسال قيمة، تبثها موسومةً بالمعرّف المناسب، وترى كل عقدة على الناقل هذا البث. ويقوم كل مستقبِل بترشيح الناقل عتاديّاً لانتقاء المعرّفات التي تهمه فقط.

إذا حاولت عقدتان الإرسال في الوقت نفسه، فإن التصميم الكهربائي للناقل يسمح للرسالة ذات المعرّف الرقمي الأدنى بالفوز دون فقدان أي بت.

تكمن الحيلة في حالتي الناقل الكهربائيتين: المهيمنة (dominant، أي 0 منطقياً) والمتراجعة (recessive، أي 1 منطقياً). تبقى أسلاك CAN مرتفعة (متراجعة) بفعل مقاومات الإنهاء عندما لا تتحدث أي عقدة؛ وبإمكان أي عقدة سحب الأسلاك إلى الأسفل (مهيمنة) عبر تمرير تيار من خلال مرسلها المستقبِل. والنتيجة هي AND سلكي: إذا قادت أي عقدة واحدة الناقل إلى الحالة المهيمنة، فإن الخط يُقرأ مهيمناً، ولا يُقرأ متراجعاً إلا حين تكون كل عقدة قد أطلقته. المهيمنة تفوز دائماً. (تسمي بعض المراجع الترتيب نفسه OR سلكياً، معاملةً "المهيمنة" على أنها الإشارة المؤكَّدة بدلاً من AND لبتات متراجعة -- والسلوك الفيزيائي متطابق في كلتا الحالتين.)

A single bus line held high by a termination resistor to Vcc. Three nodes (A, B, C) hang off the bus. Each node's output stage is a diode in series with a switch to ground -- the diode points from the bus down to the switch, so closing the switch pulls the bus low through the diode but no node can drive the bus high.

AND السلكي في صورته المفاهيمية. يُجري CAN الحقيقي المنطق نفسه على زوج تفاضلي (CAN_H / CAN_L) مع توزيع المرسلات المستقبِلة ومقاومات الإنهاء على كلا السلكين، لكن القاعدة على الناقل واحدة: بإمكان أي عقدة السحب إلى الحالة المهيمنة، ولا يُقرأ متراجعاً إلا حين تكون كل عقدة قد أطلقته.

يستخدم التحكيم عدم التماثل هذا مباشرةً. ترسل كل عقدة ناقلة معرّفها بتاً واحداً في كل مرة، بدءاً من البت الأكثر دلالة (MSB)، وتراقب الناقل أثناء الإرسال. فالعقدة التي تضع بتاً متراجعاً على السلك لكنها تقرأ مهيمناً تعلم أن عقدة أخرى ذات معرّف أدنى تُرسل في اللحظة نفسها وقد فازت بموضع ذلك البت. فتتوقف فوراً عن قيادة الناقل وتُنصت. أما العقدة الفائزة فترى بتاتها الخاصة تخرج دون تغيير -- ومن وجهة نظرها لم يحدث شيء غير عادي. ويفوز المعرّف ذو الرقم الأدنى لأن بتاته المهيمنة تتجاوز البتات المتراجعة التي كانت المعرّفات ذات الأرقام الأعلى سترسلها في المواضع نفسها لولا ذلك.

ثم ينتظر الخاسر حتى يصبح الناقل خاملاً ويعيد المحاولة تلقائياً. فلا تصادمات ولا رسائل مفقودة -- بل ترتيب حتمي بحسب الأولوية فقط.

هذا هو أسلوب النشر/الاشتراك (publish/subscribe) الذي يجعل CAN يعمل على نطاق واسع: يمكن للجميع التحدث، ويمكن للجميع الإنصات، وتجعل المعرّفات التوزيع ضمنياً.

3.25.2. الناقل الفيزيائي

لا يقود متحكم CAN في وحدة المعالجة الدقيقة الناقلَ مباشرةً. فهو يعرض دبوسين فقط من نوع CMOS بجهد 3.3 V -- TX (البت الذي يريد إرساله) وRX (البت الذي يراه على الناقل) -- ويذهب هذان الدبوسان إلى شريحة منفصلة تُسمى المرسل المستقبِل (transceiver) أو PHY. يقع المرسل المستقبِل بين المتحكم وأسلاك CAN الفعلية؛ وهو الذي يعرف كيف يتحدث إلى الناقل.

الناقل نفسه عبارة عن زوج تفاضلي بجهد 5 V:

  • CAN_H -- السلك "العالي" في الزوج.

  • CAN_L -- السلك "المنخفض".

في الحالة المتراجعة يستقر كلا السلكين عند نحو 2.5 V (منتصف مصدر تغذية الناقل البالغ 5 V). وفي الحالة المهيمنة يرفع المرسل المستقبِل CAN_H إلى نحو 3.5 V ويخفض CAN_L إلى نحو 1.5 V، منتجاً فرقاً تفاضلياً يقارب 2 V عبر الزوج. وتأخذ المستقبِلات عينة من الفرق بين السلكين، مما يجعل الإشارة محصّنة ضد ضجيج النمط المشترك الملتقَط على امتداد الكابلات الطويلة.

المهمة المزدوجة الاتجاه للمرسل المستقبِل:

  • على جانب TX، يقرأ دبوس TX أحادي الطرف بجهد 3.3 V للمتحكم، ثم إما يدفع CAN_H وCAN_L متباعدين للحالة المهيمنة أو يطلق كليهما للحالة المتراجعة.

  • على جانب RX، يقرأ الزوج التفاضلي CAN_H / CAN_L ويُبلغ بمستوى أحادي الطرف بجهد 3.3 V على دبوس RX الخاص به عائداً إلى المتحكم.

تُبقي مقاومتا إنهاء بقيمة 120 أوم، واحدة عند كل طرف فيزيائي من الكابل، الناقلَ عند منتصف الحالة المتراجعة عندما لا تقوده أي عقدة، وتخمدان الانعكاسات التي قد تُفسد الإشارة التفاضلية على المسافات الطويلة لولا ذلك.

3.25.3. إطار البيانات

يبدو إطار بيانات CAN القياسي على السلك على النحو التالي:

Eight fields drawn in sequence: SOF (1 bit), ID (11 bits), RTR (1 bit), control (6 bits), data (0 -- 8 bytes), CRC (16 bits), ACK (2 bits), and EOF (7 bits).

إطار بيانات CAN قياسي: حقول SOF وID وRTR والتحكم والبيانات وCRC وACK وEOF.

لكل حقل مهمة محددة:

  • SOF (بداية الإطار). بت مهيمن واحد يفيد بأن إطاراً جديداً يبدأ ويزامن ساعة البت لكل عقدة.

  • ID (المعرّف). المعرّف ذو الـ11 بت الذي يحكّم الناقل عليه. رقم أدنى = أولوية أعلى.

  • RTR (طلب إرسال عن بعد). يُضبط عند طلب بيانات بدلاً من تسليم بيانات؛ وتستجيب المستقبِلات ذات المعرّف المطابق بإرسال البيانات بنفسها.

  • التحكم. حقل بطول 6 بتات يرمّز طول البيانات (DLC) وبضع بتات تنظيمية.

  • البيانات. من 0 إلى 8 بايت من الحمولة (CAN Classic؛ ويوسّع CAN FD هذا إلى 64 بايت).

  • CRC. 16 بت إجمالاً: CRC بطول 15 بت على الحقول السابقة بالإضافة إلى محدِّد CRC بطول 1 بت.

  • ACK. بتان إجمالاً. في البت الأول -- خانة ACK -- يطلق المرسِل الخط وتسحبه إلى الأسفل أي عقدة استقبلت الإطار بشكل صحيح؛ أما البت الثاني فهو محدِّد متراجع. ويُخبر غياب ACK المرسِلَ بأن أي عقدة لم تسمع الإطار وأن عليه إعادة المحاولة.

  • EOF (نهاية الإطار). سبعة بتات متراجعة تختم الإطار.

كل ذلك يُولَّد ويُفكَّك ترميزه بواسطة متحكم CAN عتاديّاً؛ فالبرمجيات لا ترى سوى المعرّف والبيانات وبضع رايات.

3.25.4. موضع CAN

تحدد خيارات تصميم CAN مكانته الخاصة:

  • متين. الإرسال التفاضلي على زوج مجدول، وكشف الأخطاء المدمج، والتحكيم الحتمي بحسب الأولوية، وإعادات المحاولة التلقائية تجعل CAN يصمد في البيئات الكهربائية المليئة بالضجيج حيث قد يُفسد UART وSPI البيانات.

  • متعدد المتحكمات. بإمكان أي عقدة التحدث في أي وقت. فلا حاجة إلى متحكم مركزي ولا تشكّل أي عقدة نقطة فشل واحدة.

  • محدود عرض النطاق. يبلغ CAN الكلاسيكي حده الأقصى عند نحو 1 Mbit/s؛ ويوسّع CAN FD هذا. وCAN هو الجواب الصحيح حين تكون الوصلة بين اللوحات أو الوحدات، غالباً على امتداد أمتار من الكابل، مع جعل الموثوقية هي الأولوية.

  • بروتوكولات الطبقة الأعلى. لا يحدد ناقل CAN المجرد ما يعنيه المعرّف ولا كيفية تقسيم رسالة طويلة إلى أجزاء. وتضع بروتوكولات طبقة التطبيق -- CANopen وJ1939 وISO-TP/UDS وNMEA 2000 -- تلك القواعد فوقه. وثمة عنصر منفصل يستحق المعرفة هو ملف DBC: تنسيق نصي خاص بالمورّد يسجل أي المعرّفات تحمل أي إشارات على مستوى البت في مركبة أو نظام بعينه. وملفات DBC هي تنسيق بيانات وصفية يصف تخطيط رسائل ناقل واحد، وليست بروتوكولاً مستقلاً بحد ذاته.

يتعامل المُشغّل في ناقل CAN في الشيفرة مع إطار CAN على مستوى السلك؛ أما ربط المعرّفات بمعانيها فهو مهمة التطبيق.