استكشف بروتوكولي UART و SPI، وهما من بروتوكولات الاتصال التسلسلي الأساسية. افهم مبادئهما، والاختلافات بينهما، وتطبيقاتهما، ومزاياهما، وعيوبهما للأنظمة المدمجة وغيرها.
إزالة الغموض عن الاتصال التسلسلي: نظرة معمقة على بروتوكولي UART و SPI
في عالم الإلكترونيات والأنظمة المدمجة، تعد قدرة الأجهزة على التواصل مع بعضها البعض أمرًا بالغ الأهمية. يوفر الاتصال التسلسلي طريقة موثوقة وفعالة لنقل البيانات بين المتحكمات الدقيقة والمستشعرات والأجهزة الطرفية وحتى أجهزة الكمبيوتر. اثنان من أكثر بروتوكولات الاتصال التسلسلي شيوعًا هما UART (جهاز الإرسال والاستقبال العالمي غير المتزامن) و SPI (واجهة الأجهزة الطرفية التسلسلية). سيتعمق هذا الدليل الشامل في تعقيدات كل من UART و SPI، مستكشفًا مبادئهما واختلافاتهما وتطبيقاتهما ومزاياهما وعيوبهما.
فهم الاتصال التسلسلي
الاتصال التسلسلي هو طريقة لنقل البيانات بمعدل بت واحد في كل مرة عبر سلك واحد (أو بضعة أسلاك لإشارات التحكم)، على عكس الاتصال المتوازي الذي يرسل بتات متعددة في وقت واحد عبر أسلاك متعددة. في حين أن الاتصال المتوازي أسرع للمسافات القصيرة، فإن الاتصال التسلسلي يُفضل عمومًا للمسافات الطويلة والحالات التي يكون فيها تقليل عدد الأسلاك أمرًا بالغ الأهمية. وهذا يجعله مثاليًا للأنظمة المدمجة، حيث غالبًا ما تكون المساحة والتكلفة من القيود المهمة.
الاتصال غير المتزامن مقابل الاتصال المتزامن
يمكن تصنيف الاتصال التسلسلي بشكل عام إلى فئتين: غير متزامن ومتزامن. الاتصال غير المتزامن، مثل UART، لا يتطلب إشارة ساعة مشتركة بين المرسل والمستقبل. بدلاً من ذلك، يعتمد على بتات البداية والتوقف لتأطير كل بايت من البيانات. أما الاتصال المتزامن، مثل SPI و I2C، فيستخدم إشارة ساعة مشتركة لمزامنة نقل البيانات بين الأجهزة.
UART: جهاز الإرسال والاستقبال العالمي غير المتزامن
UART هو بروتوكول اتصال تسلسلي مستخدم على نطاق واسع ويرجع ذلك أساسًا إلى بساطته ومرونته. إنه بروتوكول غير متزامن، مما يعني أن المرسل والمستقبل لا يشتركان في إشارة ساعة مشتركة. هذا يبسط متطلبات العتاد ولكنه يستلزم توقيتًا دقيقًا ومعدل بيانات متفق عليه مسبقًا (معدل الباود).
مبادئ UART
يتضمن اتصال UART نقل البيانات في إطارات، يتكون كل منها مما يلي:
- بت البداية (Start Bit): يشير إلى بداية إطار بيانات جديد. عادة ما يكون إشارة منخفضة (0).
- بتات البيانات (Data Bits): البيانات الفعلية التي يتم نقلها، عادة 8 بتات (بايت واحد)، ولكن يمكن أن تكون أيضًا 5 أو 6 أو 7 بتات.
- بت التكافؤ (Parity Bit) (اختياري): يستخدم للكشف عن الأخطاء. يمكن أن يكون زوجيًا أو فرديًا أو لا شيء.
- بت التوقف (Stop Bit): يشير إلى نهاية إطار البيانات. عادة ما يكون إشارة عالية (1). ومن الشائع استخدام بت توقف واحد أو اثنين.
يجب على المرسل والمستقبل الاتفاق على معدل الباود، وبتات البيانات، والتكافؤ، وبتات التوقف لنجاح الاتصال. تشمل معدلات الباود الشائعة 9600 و 115200 وغيرها. يسمح معدل الباود الأعلى بنقل بيانات أسرع ولكنه يزيد أيضًا من الحساسية لأخطاء التوقيت.
تطبيقات UART
- توصيل المتحكمات الدقيقة بأجهزة الكمبيوتر: يُستخدم UART بشكل شائع لإنشاء اتصال تسلسلي بين متحكم دقيق (مثل أردوينو أو راسبيري باي) وجهاز كمبيوتر للبرمجة وتصحيح الأخطاء وتسجيل البيانات.
- وحدات GPS: تستخدم العديد من وحدات GPS بروتوكول UART لنقل بيانات الموقع إلى متحكم دقيق مضيف أو كمبيوتر.
- وحدات البلوتوث: غالبًا ما تستخدم وحدات البلوتوث بروتوكول UART كواجهة اتصال مع متحكم دقيق.
- الطابعات التسلسلية: تستخدم الطابعات التسلسلية القديمة بروتوكول UART لتلقي أوامر الطباعة والبيانات.
- إخراج وحدة التحكم (Console Output): غالبًا ما تستخدم الأنظمة المدمجة بروتوكول UART لإخراج معلومات تصحيح الأخطاء ورسائل الحالة إلى وحدة تحكم تسلسلية.
مزايا UART
- البساطة: يعتبر UART بسيطًا نسبيًا في التنفيذ على مستوى العتاد والبرمجيات.
- المرونة: يدعم UART معدلات بيانات وأطوال بتات بيانات وخيارات تكافؤ متنوعة.
- مدعوم على نطاق واسع: UART هو معيار مدعوم على نطاق واسع مع تطبيقات عتادية وبرمجية متاحة بسهولة.
- لا يتطلب إشارة ساعة: هذا يقلل من عدد الأسلاك المطلوبة.
عيوب UART
- سرعة أقل: مقارنة بالبروتوكولات المتزامنة مثل SPI، عادة ما يكون لدى UART معدل نقل بيانات أقل.
- قابلية حدوث الأخطاء: بدون إشارة ساعة موثوقة، يكون 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 من أربع إشارات رئيسية:
- MOSI (Master Out Slave In): البيانات المرسلة من السيد إلى التابع.
- MISO (Master In Slave Out): البيانات المرسلة من التابع إلى السيد.
- SCK (Serial Clock): إشارة الساعة التي يولدها السيد، وتستخدم لمزامنة نقل البيانات.
- SS/CS (Slave Select/Chip Select): إشارة يستخدمها السيد لتحديد جهاز تابع معين للتواصل معه. عادة ما يكون لكل جهاز تابع خط SS/CS مخصص له.
يتم نقل البيانات بشكل متزامن مع إشارة الساعة. يبدأ السيد الاتصال عن طريق سحب خط SS/CS للتابع المطلوب إلى المستوى المنخفض. ثم يتم إزاحة البيانات من السيد على خط MOSI وإلى التابع عند الحافة الصاعدة أو الهابطة لإشارة SCK. في الوقت نفسه، يتم إزاحة البيانات من التابع على خط MISO وإلى السيد. هذا يسمح بالاتصال المزدوج الكامل (full-duplex)، مما يعني أنه يمكن نقل البيانات في كلا الاتجاهين في وقت واحد.
أوضاع SPI
يحتوي SPI على أربعة أوضاع للتشغيل، يتم تحديدها بواسطة معلمتين: قطبية الساعة (CPOL) ومرحلة الساعة (CPHA). تحدد هاتان المعلمتان حالة إشارة SCK عندما تكون خاملة وحافة إشارة SCK التي يتم عندها أخذ عينات البيانات وإزاحتها.
- الوضع 0 (CPOL=0, CPHA=0): تكون SCK منخفضة عندما تكون خاملة. يتم أخذ عينات البيانات على الحافة الصاعدة وإزاحتها على الحافة الهابطة.
- الوضع 1 (CPOL=0, CPHA=1): تكون SCK منخفضة عندما تكون خاملة. يتم أخذ عينات البيانات على الحافة الهابطة وإزاحتها على الحافة الصاعدة.
- الوضع 2 (CPOL=1, CPHA=0): تكون SCK عالية عندما تكون خاملة. يتم أخذ عينات البيانات على الحافة الهابطة وإزاحتها على الحافة الصاعدة.
- الوضع 3 (CPOL=1, CPHA=1): تكون SCK عالية عندما تكون خاملة. يتم أخذ عينات البيانات على الحافة الصاعدة وإزاحتها على الحافة الهابطة.
يجب تكوين أجهزة السيد والتابع لاستخدام نفس وضع SPI لنجاح الاتصال. إذا لم يكن الأمر كذلك، فسينتج عن ذلك بيانات مشوهة أو فشل في الاتصال.
تطبيقات SPI
- بطاقات الذاكرة (بطاقات SD، بطاقات microSD): غالبًا ما يستخدم SPI للتفاعل مع بطاقات الذاكرة في الأنظمة المدمجة.
- المستشعرات: تستخدم العديد من المستشعرات، مثل مقاييس التسارع والجيروسكوبات ومستشعرات درجة الحرارة، بروتوكول SPI لنقل البيانات.
- الشاشات: يستخدم SPI بشكل شائع للتحكم في شاشات LCD و OLED.
- المحولات من التناظرية إلى الرقمية (ADCs) والمحولات من الرقمية إلى التناظرية (DACs): يستخدم SPI للتواصل مع ADCs و DACs لتطبيقات الحصول على البيانات والتحكم.
- مسجلات الإزاحة (Shift Registers): يمكن استخدام SPI للتحكم في مسجلات الإزاحة لتوسيع عدد دبابيس الإدخال/الإخراج الرقمية المتاحة على متحكم دقيق.
مزايا SPI
- سرعة عالية: يوفر SPI معدلات نقل بيانات أعلى بكثير مقارنة بـ UART.
- اتصال مزدوج كامل: يمكن نقل البيانات في كلا الاتجاهين في وقت واحد.
- توابع متعددة: يمكن لسيد واحد التواصل مع أجهزة تابعة متعددة.
- عتاد بسيط نسبيًا: يتطلب SPI أربعة أسلاك فقط (بالإضافة إلى خط SS/CS واحد لكل جهاز تابع).
عيوب SPI
- لا يوجد نظام عنونة: يعتمد SPI على خطوط SS/CS لتحديد الأجهزة التابعة، وهو ما يمكن أن يصبح مرهقًا مع وجود عدد كبير من التوابع.
- مسافة قصيرة: يقتصر SPI بشكل عام على مسافات قصيرة بسبب تدهور الإشارة عند السرعات العالية.
- لا يوجد كشف للأخطاء: لا يحتوي SPI على آليات مدمجة للكشف عن الأخطاء. يجب تنفيذ فحص الأخطاء في البرمجيات.
- تنفيذ برمجي أكثر تعقيدًا: على الرغم من أن العتاد بسيط نسبيًا، إلا أن التنفيذ البرمجي يمكن أن يكون أكثر تعقيدًا من UART، خاصة عند التعامل مع توابع متعددة وأوضاع SPI مختلفة.
مثال على SPI: الاتصال بمقياس التسارع
تستخدم العديد من مقاييس التسارع، مثل ADXL345 الشهير، بروتوكول SPI للاتصال. لقراءة بيانات التسارع من ADXL345، يحتاج المتحكم الدقيق (الذي يعمل كسيد) إلى إرسال أمر إلى مقياس التسارع (الذي يعمل كتابع) لقراءة السجلات المناسبة. يوضح الكود الزائف التالي العملية:
- حدد ADXL345 عن طريق سحب خط SS/CS الخاص به إلى المستوى المنخفض.
- أرسل عنوان السجل المراد قراءته (على سبيل المثال، عنوان بيانات تسارع المحور السيني X).
- اقرأ البيانات من خط MISO (قيمة تسارع المحور السيني X).
- كرر الخطوتين 2 و 3 للمحورين الصادي Y والعيني Z.
- ألغِ تحديد 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 أكثر ملاءمة.
- عدد الأجهزة: إذا كانت هناك حاجة إلى تواصل أجهزة متعددة مع سيد واحد، يُفضل SPI.
- التعقيد: إذا كانت البساطة أولوية، فإن UART أسهل في التنفيذ.
- كشف الأخطاء: إذا كان كشف الأخطاء أمرًا بالغ الأهمية، ففكر في استخدام 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 اتصالًا عالي السرعة للتطبيقات قصيرة المدى، مثل التفاعل مع المستشعرات وبطاقات الذاكرة والشاشات. إن فهم مبادئ ومزايا وعيوب كل بروتوكول يسمح لك باتخاذ قرارات مستنيرة عند تصميم نظامك المدمج أو مشروعك الإلكتروني التالي. مع تقدم التكنولوجيا، سيتطور أيضًا تطبيق طرق الاتصال التسلسلي هذه. سيضمن التكيف والتعلم المستمر أن يتمكن المهندسون والهواة على حد سواء من الاستفادة من هذه البروتوكولات إلى أقصى إمكاناتها.