مقدمة موجزة للواجهة الطرفية التسلسلية (SPI):

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

  • MISO (Master In Slave Out) – خط رقيق لإرسال البيانات إلى وحدات التحكم.
  • MOSI (Master Out Slave In) – الخط الرئيسي لإرسال البيانات إلى الأجهزة الطرفية.
  • SCK (Serial Clock) – نبضات الساعة التي تزامن نقل البيانات التي تم إنشاؤها بواسطة وحدات التحكم.

وخط واحد محدد لكل جهاز:

  • SS (Slave Select) – الدبوس على كل جهاز يمكن لوحدات التحكم استخدامه لتمكين وتعطيل أجهزة معينة.

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

 

لكتابة التعليمات البرمجية لجهاز SPI جديد تحتاج إلى ملاحظة بعض الأشياء:

  • ما الحد الأقصى لسرعة SPI التي يمكن لجهازك استخدامها؟ يتم التحكم في هذا بواسطة المعلمة الأولى في SPISettings. إذا كنت تستخدم شريحة مصنّفة بتردد 15 ميجا هرتز، فاستخدم 15000000. سيستخدم الأردوينو تلقائيًا أفضل سرعة تساوي أو تقل عن الرقم الذي تستخدمه مع SPISettings.
  • هل تم إزاحة البيانات في معظم بتات هامة (MSB) أو بتة أقل أهمية (LSB) أولاً؟ يتم التحكم في هذا بواسطة المعلمة SPISettings الثاني ، إما MSBFIRST أو LSBFIRST. تستخدم معظم شرائح SPI طلب البيانات الأول من MSB.
  • هل ساعة البيانات في وضع الخمول عند ارتفاعها أو انخفاضها؟ هل توجد عينات على حافة ارتفاع أو هبوط نبضات الساعة؟ يتم التحكم في هذه الأوضاع بواسطة المعلمة الثالث في SPISettings.

تكون معايير SPI غير محكمة ويقوم كل جهاز بتنفيذها بطريقة مختلفة قليلاً. هذا يعني أنك يجب أن تولي اهتماما خاصا لورقة بيانات الجهاز عند كتابة التعليمات البرمجية الخاصة بك.

 

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

 

بمجرد أن يكون لديك معلمات SPI، استخدم ()SPI.beginTransaction لبدء استخدام منفذ SPI. سيتم تكوين منفذ SPI بكل إعداداتك. الطريقة الأبسط والأكثر كفاءة لاستخدام SPISettings مباشرة داخل () SPI.beginTransaction. مثالا على ذلك:

;SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))

إذا كانت المكتبات الأخرى تستخدم SPI من المقاطعات ، فسيتم منعها من الوصول إلى SPI حتى تقوم بالاتصال () SPI.endTransaction. يتم تطبيق إعدادات SPI في بداية المعاملة، و SPI.endTransaction () لا يغيّر إعدادات SPI. ما لم تبدأ أنت أو بعض المكتبات في إجراء المكالمات مرة ثانية، يتم الحفاظ على الإعدادات. يجب محاولة تقليل الوقت بين قبل استدعاء SPI.endTransaction () للحصول على أفضل توافق إذا تم استخدام البرنامج الخاص بك مع مكتبات أخرى تستخدم SPI.
مع معظم أجهزة SPI ، بعد SPI.beginTransaction () ، ستكتب دبوس تحديد الرقيق LOW ، استدعاء SPI.transfer () أي عدد من المرات لنقل البيانات ، ثم كتابة SS pin HIGH ، وأخيراً استدعاء SPI.endTransaction ().

 

 

التوصيلات:

يعرض الجدول التالي على أي دبابيس يتم كسر خطوط SPI على لوحات الأردوينو المختلفة:

لاحظ أن MISO و MOSI و SCK متاحة في موقع فعلي ثابت على رأس ICSP ؛ هذا مفيد ، على سبيل المثال ، في تصميم درع يعمل على كل لوحة.

 

 

ملاحظة حول دبوس تحديد الرقيق (SS) على لوحات AVR:

تحتوي جميع لوحات AVR على دبوس SS المفيد لتعمل تحت تحكم وحدة التحكم الخارجي. نظرًا لأن هذه المكتبة تدعم الوضع الرئيسي فقط، فيجب تعيين هذا الدبوس دائمًا كـ OUTPUT ، وإلا فقد يتم وضع واجهة SPI تلقائيًا في وضع الرقيق بواسطة الأجهزة، مما يؤدي إلى تعطيل المكتبة.
ومع ذلك ، من الممكن استخدام أي دبوس مثل تحديد (SS) للأجهزة. على سبيل المثال، يستخدم Arduino Ethernet shield دبوس 4 للتحكم في اتصال SPI ببطاقة SD على اللوحة، ويثبّت 10 للتحكم في الاتصال بوحدة تحكم Ethernet.

 

 

أمثلة: