العربية

استكشف بروتوكولي UART و SPI، وهما من بروتوكولات الاتصال التسلسلي الأساسية. افهم مبادئهما، والاختلافات بينهما، وتطبيقاتهما، ومزاياهما، وعيوبهما للأنظمة المدمجة وغيرها.

إزالة الغموض عن الاتصال التسلسلي: نظرة معمقة على بروتوكولي UART و SPI

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

فهم الاتصال التسلسلي

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

الاتصال غير المتزامن مقابل الاتصال المتزامن

يمكن تصنيف الاتصال التسلسلي بشكل عام إلى فئتين: غير متزامن ومتزامن. الاتصال غير المتزامن، مثل UART، لا يتطلب إشارة ساعة مشتركة بين المرسل والمستقبل. بدلاً من ذلك، يعتمد على بتات البداية والتوقف لتأطير كل بايت من البيانات. أما الاتصال المتزامن، مثل SPI و I2C، فيستخدم إشارة ساعة مشتركة لمزامنة نقل البيانات بين الأجهزة.

UART: جهاز الإرسال والاستقبال العالمي غير المتزامن

UART هو بروتوكول اتصال تسلسلي مستخدم على نطاق واسع ويرجع ذلك أساسًا إلى بساطته ومرونته. إنه بروتوكول غير متزامن، مما يعني أن المرسل والمستقبل لا يشتركان في إشارة ساعة مشتركة. هذا يبسط متطلبات العتاد ولكنه يستلزم توقيتًا دقيقًا ومعدل بيانات متفق عليه مسبقًا (معدل الباود).

مبادئ UART

يتضمن اتصال UART نقل البيانات في إطارات، يتكون كل منها مما يلي:

يجب على المرسل والمستقبل الاتفاق على معدل الباود، وبتات البيانات، والتكافؤ، وبتات التوقف لنجاح الاتصال. تشمل معدلات الباود الشائعة 9600 و 115200 وغيرها. يسمح معدل الباود الأعلى بنقل بيانات أسرع ولكنه يزيد أيضًا من الحساسية لأخطاء التوقيت.

تطبيقات UART

مزايا UART

عيوب UART

مثال على UART: أردوينو وشاشة الاتصال التسلسلي (Serial Monitor)

مثال شائع على UART أثناء العمل هو استخدام شاشة الاتصال التسلسلي (Serial Monitor) في بيئة أردوينو التطويرية (IDE). تحتوي لوحة أردوينو على واجهة UART مدمجة تسمح لها بالاتصال بالكمبيوتر عبر USB. يوضح مقتطف كود أردوينو التالي إرسال البيانات إلى شاشة الاتصال التسلسلي:

void setup() {
  Serial.begin(9600); // تهيئة الاتصال التسلسلي عند 9600 باود
}

void loop() {
  Serial.println("Hello, world!"); // إرسال رسالة "Hello, world!" إلى شاشة الاتصال التسلسلي
  delay(1000); // الانتظار لمدة ثانية واحدة
}

يرسل هذا الكود البسيط رسالة "Hello, world!" إلى شاشة الاتصال التسلسلي كل ثانية. تقوم الدالة Serial.begin(9600) بتهيئة واجهة UART بمعدل باود يبلغ 9600، والذي يجب أن يتطابق مع الإعداد في شاشة الاتصال التسلسلي.

SPI: واجهة الأجهزة الطرفية التسلسلية

SPI (واجهة الأجهزة الطرفية التسلسلية) هو بروتوكول اتصال تسلسلي متزامن يستخدم بشكل شائع للاتصال لمسافات قصيرة بين المتحكمات الدقيقة والأجهزة الطرفية. وهو معروف بسرعته العالية ومتطلبات العتاد البسيطة نسبيًا.

مبادئ SPI

يستخدم SPI بنية السيد-التابع (master-slave)، حيث يتحكم جهاز واحد (السيد) في الاتصال ويستجيب جهاز واحد أو أكثر (التابعون) لأوامر السيد. يتكون ناقل SPI من أربع إشارات رئيسية:

يتم نقل البيانات بشكل متزامن مع إشارة الساعة. يبدأ السيد الاتصال عن طريق سحب خط SS/CS للتابع المطلوب إلى المستوى المنخفض. ثم يتم إزاحة البيانات من السيد على خط MOSI وإلى التابع عند الحافة الصاعدة أو الهابطة لإشارة SCK. في الوقت نفسه، يتم إزاحة البيانات من التابع على خط MISO وإلى السيد. هذا يسمح بالاتصال المزدوج الكامل (full-duplex)، مما يعني أنه يمكن نقل البيانات في كلا الاتجاهين في وقت واحد.

أوضاع SPI

يحتوي SPI على أربعة أوضاع للتشغيل، يتم تحديدها بواسطة معلمتين: قطبية الساعة (CPOL) ومرحلة الساعة (CPHA). تحدد هاتان المعلمتان حالة إشارة SCK عندما تكون خاملة وحافة إشارة SCK التي يتم عندها أخذ عينات البيانات وإزاحتها.

يجب تكوين أجهزة السيد والتابع لاستخدام نفس وضع SPI لنجاح الاتصال. إذا لم يكن الأمر كذلك، فسينتج عن ذلك بيانات مشوهة أو فشل في الاتصال.

تطبيقات SPI

مزايا SPI

عيوب SPI

مثال على SPI: الاتصال بمقياس التسارع

تستخدم العديد من مقاييس التسارع، مثل ADXL345 الشهير، بروتوكول SPI للاتصال. لقراءة بيانات التسارع من ADXL345، يحتاج المتحكم الدقيق (الذي يعمل كسيد) إلى إرسال أمر إلى مقياس التسارع (الذي يعمل كتابع) لقراءة السجلات المناسبة. يوضح الكود الزائف التالي العملية:

  1. حدد ADXL345 عن طريق سحب خط SS/CS الخاص به إلى المستوى المنخفض.
  2. أرسل عنوان السجل المراد قراءته (على سبيل المثال، عنوان بيانات تسارع المحور السيني X).
  3. اقرأ البيانات من خط MISO (قيمة تسارع المحور السيني X).
  4. كرر الخطوتين 2 و 3 للمحورين الصادي Y والعيني Z.
  5. ألغِ تحديد ADXL345 عن طريق سحب خط SS/CS الخاص به إلى المستوى المرتفع.

ستختلف الأوامر وعناوين السجلات المحددة اعتمادًا على طراز مقياس التسارع. يجب دائمًا مراجعة ورقة البيانات (datasheet) لمعرفة الإجراءات الدقيقة.

مقارنة بين UART و SPI

إليك جدول يلخص الاختلافات الرئيسية بين UART و SPI:

الميزة UART SPI
نوع الاتصال غير متزامن متزامن
إشارة الساعة لا يوجد ساعة مشتركة
عدد الأسلاك 2 (TX, RX) 4 (MOSI, MISO, SCK, SS/CS) + 1 SS/CS لكل تابع
معدل البيانات أقل أعلى
مزدوج كامل عادة نصف مزدوج (على الرغم من أنه يمكن أحيانًا محاكاة المزدوج الكامل ببرمجيات معقدة) مزدوج كامل
كشف الأخطاء بت التكافؤ (اختياري) لا يوجد (يتطلب تنفيذًا برمجيًا)
عدد الأجهزة 2 (نقطة إلى نقطة) متعدد (سيد-تابع)
التعقيد أبسط أكثر تعقيدًا
المسافة أطول أقصر

اختيار البروتوكول المناسب

يعتمد الاختيار بين UART و SPI على متطلبات التطبيق المحددة. ضع في اعتبارك العوامل التالية:

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

اعتبارات متقدمة

I2C (الدوائر المتكاملة المترابطة)

بينما يركز هذا المقال على UART و SPI، من المهم ذكر I2C (الدوائر المتكاملة المترابطة) كبروتوكول اتصال تسلسلي شائع آخر. I2C هو بروتوكول بسلكين يدعم أجهزة سيد وتابع متعددة على نفس الناقل. غالبًا ما يستخدم للاتصال بين الدوائر المتكاملة على لوحة دوائر. يستخدم I2C العنونة، على عكس SPI، مما يبسط شبكات الأجهزة الكبيرة.

TTL مقابل RS-232

عند العمل مع UART، من المهم فهم الفرق بين مستويات الجهد لـ TTL (منطق الترانزستور-ترانزستور) و RS-232. يستخدم منطق TTL جهد 0 فولت و 5 فولت (أو 3.3 فولت) لتمثيل المنطق المنخفض والعالي على التوالي. من ناحية أخرى، يستخدم RS-232 جهودًا تبلغ ±12 فولت. يمكن أن يؤدي توصيل UART TTL مباشرة بـ UART RS-232 إلى إتلاف الأجهزة. يلزم وجود محول مستوى (مثل شريحة MAX232) للتحويل بين مستويات الجهد لـ TTL و RS-232.

معالجة الأخطاء

نظرًا لأن UART و SPI لهما آليات محدودة للكشف عن الأخطاء، فمن المهم تنفيذ معالجة الأخطاء في البرمجيات. تشمل التقنيات الشائعة المجموع الاختباري (checksums)، وفحوصات التكرار الدوري (CRCs)، وآليات المهلة الزمنية (timeouts).

الخاتمة

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