📡 ما هو SPI؟
SPI هو اختصار لـ Serial Peripheral Interface، أي “واجهة الأجهزة الطرفية التسلسلية”، وهو بروتوكول اتصال عالي السرعة يُستخدم لنقل البيانات بين المتحكمات الدقيقة (مثل Arduino) والوحدات الطرفية (مثل RC522، شاشات، حساسات، إلخ).
يُصنف SPI كبروتوكول تزامني (Synchronous)، أي أن البيانات تُنقل بتزامن مع نبضات ساعة مشتركة بين الأجهزة.

⚙️ مكونات بروتوكول SPI
يتكون SPI من أربع خطوط رئيسية:
| الإشارة | الاسم | الوظيفة |
|---|---|---|
| MOSI | Master Out Slave In | إرسال البيانات من المتحكم إلى الوحدة الطرفية |
| MISO | Master In Slave Out | استقبال البيانات من الوحدة الطرفية إلى المتحكم |
| SCK | Serial Clock | نبضات الساعة التي تُنظم التزامن |
| SS أو SDA | Slave Select | اختيار الوحدة الطرفية النشطة (يُفعّل RC522 عند LOW) |
في حالة Arduino وRC522، يكون Arduino هو Master، وRC522 هو Slave.
🔄 كيف يعمل SPI عمليًا؟
- يبدأ المتحكم (Arduino) بإرسال نبضات الساعة عبر SCK.
- يُفعّل RC522 عبر جعل SS = LOW.
- تُرسل البيانات من Arduino إلى RC522 عبر MOSI.
- تُستقبل البيانات من RC522 عبر MISO.
- عند انتهاء العملية، يُعاد SS إلى HIGH لإلغاء التفعيل.
🧩 لماذا يُستخدم SPI مع RC522؟
- السرعة: SPI أسرع من I2C، مما يسمح بقراءة UID بسرعة واستجابة فورية.
- البساطة: لا يحتاج إلى عناوين أو بروتوكولات معقدة، فقط إشارات مباشرة.
- الدعم الكامل: مكتبة MFRC522 تعتمد على SPI افتراضيًا، مما يجعل التوصيل مباشرًا.
- التحكم الدقيق: باستخدام SS، يمكن التحكم في عدة وحدات SPI على نفس الخطوط.
🛠️ ملاحظات تنفيذية
- تأكد من تفعيل SPI عبر
SPI.begin()في الكود. - لا تستخدم نفس الأرجل مع وحدات أخرى دون إدارة SS بشكل دقيق.
- يمكن استخدام بروتوكولات أخرى (I2C أو UART) مع RC522، لكن SPI هو الأكثر دعمًا في مكتبة Arduino.
[…] البروتوكول […]