SPI چیست؟

SPI یک درگاه ارتباط سریال سنکرون برای انتقال اطلاعات است. در این مقاله به صورت مفصل در مورد اینکه SPI چیست، چگونه کار میکند، مزایا و معایب SPI چیست و کاربردهای آن کجاست صحبت کردهایم.
SPI چیست؟
SPI (یا Serial Peripheral Interface) یک درگاه ارتباط سریال سنکرون برای انتقال اطلاعات است. پشتیبانی از ارتباط Full Duplex (ارسال و دریافت همزمان)، سرعت کلاک بالا (معمولا چند ده مگاهرتز) و هزینه پیادهسازی پایین، مهمترین ویژگیهای SPI هستند. ساختار SPI به صورت Master-Slave است و با دارا بودن قابلیت باس امکان ارتباط چند Slave با یک Master وجود دارد. این درگاه در دهه 1980 توسط شرکت موتورلا برای ایجاد ارتباط در سیستمهای embedded طراحی و ساخته شد.
اگر در مورد ماهیت ارتباط سریال، مفهوم سنکرون بودن و یا Full Duplex به اطلاعات بیشتری نیاز دارید میتوانید به مقاله UART چیست؟ مراجعه کنید.
Master و Slave
زمانیکه دو سختافزار بخواهند با هم از طریق SPI ارتباط برقرار کنند نیاز به یک سیگنال کلاک دارند (چون SPI یک ارتباط سنکرون است). یکی از سختافزارها باید وظیفه تولید این سیگنال را به عهده بگیرد. از طرف دیگر تا سیگنال کلاک وجود نداشته باشد ارتباطی هم وجود ندارد پس شروع کننده ارتباط هم باید همان سختافزاری باشد که کلاک را تولید میکند. این سخت افزار اصطلاحا Master نامیده میشود و سخت افزار دیگر را Slave گویند. در برخی دیگر از درگاههای ارتباطی نیز ممکن است با این اسامی برخورد کرده باشید. (مانند I2C).

در سالهای اخیر سعی شده است در راستای مبارزه با نژادپرستی در مباحثی که نام Master وجود داشته از Main به جای آن استفاده شود. همچنین به جای Slave کلمه Subnode پیشنهاد شده است. البته این موضوع فراگیر نیست و به ندرت با آن برخورد میکنید.
پایههای SPI
SPI برای انتقال اطلاعات به 4 پایه نیازمند است:
- SCLK : این پایه برای انتقال کلاک از Master به Slave(ها) است. بنابراین پایه مربوط به SCLK باید در سمت Master خروجی و در سمت Slave(ها) ورودی باشد. سیگنال SCLK در حالت idle (زمانیکه انتقال اطلاعات در حال انجام نیست) میتواند 0 یا 1 باشد. هر سیکل کلاک دارای دو لبه است، یک لبه بالا رونده و یک لبه پایین رونده. اگر کلاک در حالت idle مقدار 0 داشته باشد اولین لبه (Leading Edge) بالا رونده است و لبه دیگر (Trailing Edge) پایین رونده خواهد بود. همچنین اگر کلاک در حالت idle مقدار 1 داشته باشد اولین لبه (Leading Edge) پایین رونده است و لبه دیگر (Trailing Edge) بالا رونده خواهد بود.

- MOSI : پایه Master Output Slave Input مسیر انتقال داده از Master به Slave است. پایه مربوط به MOSI باید در سمت Master خروجی و در سمت Slave(ها) ورودی باشد.
- MISO : پایه Master Input Slave Output مسیر انتقال داده از Slave به Master است. پین مربوط به MISO باید در سمت Master ورودی و در سمت Slave(ها) خروجی باشد.
- SS : پایه Slave Select که با نام CS (یا Chip Select) نیز نامیده میشود وظیفه فعال کردن Slave دارد. از آنجا که در SPI قابلیت اتصال یک Master با چندین Slave روی یک باس وجود دارد باید مکانیزمی برای انتخاب Slave مورد نظر هنگام تبادل داده وجود داشته باشد. این مکانیزم توسط پایه SS تحقق داده شده است. به این گونه که به تعداد Slaveها پایه مجزا از Master به هر Slave میرود و هر Slave که پایه SS آن 0 شود به معنی فعال بودن آن است. این پایه باید در سمت Master خروجی و در سمت Slave(ها) ورودی باشد. وقتی فقط یک Master و یک Slave داریم ممکن است نیاز به کنترل SS از سمت Master نباشد اما باید توجه کرد برخی از Slaveها برای شروع به کار نیاز به دیدن لبه در SS دارند.

نحوه عملکرد SPI
برای شروع ارتباط ابتدا Master باید پایه SS مربوط به Slave مورد نظر را Low کند و سپس اقدام به ایجاد کلاک روی پین SCLK نماید. با هر سیکل کلاک یک ارتباط دوطرفه شکل میگیرید به صورتی که یک بیت از Master به Slave ارسال میشود (از طریق پایه MOSI) و همزمان یک بیت از Slave به Master فرستاده میشود (از طریق پایه MISO). برای درک موضوع به شکل توجه کنید.

همانطور که در شکل مشخص است SPI از دو شیفت رجیستر تشکیل شده است که یکی درون Master است و دیگری درون Slave قرار گرفته. سیگنال کلاک به هردو شیفت رجیستر اعمال میشود و با هر سیکل کلاک هر دو شیفت رجیستر یک بیت شیفت میخورند. بعد از آنکه تعداد کلاکها به اندازه طول شیفت رجیستر برسد (به عنوان مثال 8 کلاک برای شیفت رجیستر 8 بیتی) محتوای هردو شیفت رجیستر به صورت کامل با یکدیگر تعوض شده است.به عبارت دیگر اطلاعات درون Master به Slave انتقال پیدا کرده و اطلاعات درون Slave وارد Master شده است.
در هر کلاک Master هم داده گذاری میکند و هم داده برداری انجام میدهد و برای Slave هم همینطور است. نکته قابل توجه این است که داده گذاری و داده برداری در دو لبه مخالف کلاک اتفاق میافتد. به عنوان مثال فرض کنید Master و Slave هردو در لبه بالارونده اقدام به داده گذاری کنند و در لبه پایین رونده اقدام به داده برداری نمایند.
CPOL و CPHA در SPI
CPOL و CPHA دو تنظیم در SPI هستند و هرکدام میتوانند 0 یا 1 باشند. در ادامه تاثیر این دو مورد بر عملکرد SPI را مورد بررسی قرار میدهیم.
- CPOL : مخفف Clock Polarity است و تعیین کننده وضعیت کلاک در حالت idle (زمانیکه انتقال اطلاعاتی در حال انجام نیست) است. اگر CPOL مقدار 0 داشته باشد کلاک در زمان idle در حالت low قرار میگیرد و اگر مقدار 1 داشته باشد کلاک در زمان idle در حالت high قرار خواهد داشت.

- CPHA : مخفف Clock Phase است و تعیین کننده لبه داده گذاری و داده برداری است. اگر CPHA مقدار 0 داشته باشد داده گذاری در لبه Trailing Edge کلاک انجام میشود و داده برداری در لبه Leading Edge کلاک صورت میگیرد. گر CPHA مقدار 1 داشته باشد داده گذاری در لبه Leading Edge کلاک انجام میشود و داده برداری در لبه Trailing Edge کلاک صورت میگیرد.

مدهای SPI
بر اساس مقادیر CPOL و CPHA چار حالت مختلف ایجاد میشود که به آنها مدهای SPI گفته میشود.

نحوه اتصال Master و Slave در SPI
اگر فقط یک Master و یک Slave وجود داشته باشد پایههای SCLK, MISO, MISO, SS به صورت یک به یک در سمت Master و Slave به هم متصل میشوند.

اگر چند Slave وجود داشته باشند میتوان آنها را به صورت Independent Slave و یا Daisy Chain به Master متصل نمود. در روش Independent Slave سیگنالهای SCLK, MISO, MOSI به صورت باس هستند و بین تمام Slaveها به اشتراک گذاشته میشوند. اما سیگنال SS مجزا است و به ازای هر Slave یک پین SS در Master وجود دارد تا بتواند Slave مورد نظر را در حالت فعال قرار دهد و باقی Slaveها را غیر فعال کند.
دقت داشته باشید در این روش اتصال، در هر لحظه از زمان فقط یک Slave باید فعال باشد و سایر Slave باید از طریق high کردن پایه SSشان در حالت غیرفعال قرار گرفته باشند. این غیر فعال کردن باعث میشود پایه MISO هر Slave در حالت High Impedance قرار داشته باشد و اتصالی در مدارات به وجود نیاید.

روش دیگر برای اتصال چند Slave با نام Daisy Chain شناخته میشود. در این روش تمام Slaveها باید در حالت فعال باشند. بنابراین تنها یک سیگنال برای SS وجود دارد که بین تمام Slaveها به اشتراک گذاشته شده است. همچنین کلاک نیز بین Slaveها به اشتراک گذاشته میشود اما در مورد MISO و MOSI داستان متفاوت است. پایه MOSI اولین Slave به پایه MOSI در Master متصل است و پایه MISO آخرین Slave به پایه MISO در Master متصل میشود. همچنین پایه MISO هر Slave به پایه MOSI در Slave بعدی وصل میشود.

در روش Daisy Chain دادهها درون یک حلقه بزرگ شامل همه Slaveها و Master در حال گردش هستند. به عبارت دیگر داده اولین Slave برای آنکه به Master برسد باید از درون تمام Slaveهای دیگر عبور کند تا در نهایت به Master برسد. همچنین دیتاهای Master برای آنکه به Slave آخر برسد باید باید از تمام Slaveها عبور کند.
مزایا و معایب SPI چیست
SPI هم مانند دیگر درگاهها مزایا و معایب خاص خود را دراد و با توجه به این موارد میتوان تصمیم گرفت برای یک کار مشخص، SPI انتخاب مناسبی هست یا نه.
مزایای SPI
- پشتیبانی از ارتباط Full Duplex
- خروجی high و low قوی (به علت استفاده از طبقه push pull در خروجی) که امکان استفاده از نرخ کلاک بالا را در SPI فراهم کرده است
- سرعت کلاک بالا
- امکان انتقال هر تعداد بیت به صورت پشت سر هم و بدون سربار
- بدون نیاز به سخت افزار خارجی
- پیاده سازی سختافزاری ارزان
- پیادهسازی نرم افزاری آسان
معایب SPI
- – نیاز به 4 سیم (در مقایسه با UART و I2C که دوسیمه هستند)
- – نداشتن مکانیزم تشخیص خطا
- – نداشتن acknowledge از طرف مقابل
- – عدم پشتیبانی از چند مستر (به صورت معمول)
- – قابل استفاده در فواصل کوتاه
کاربردهای SPI
- برنامهریزی سختافزارها
- مسیر ارتباطی اکثر آیسیهای حافظه
- مسر ارتباطی بسیاری از سنسورها
- ارتباط بین دو میکروکنترلر
- مسیر ارتباطی بسیاری از LCDها
- استفاده فراوان برای انتقال اطلاعات ADCها
Dual SPI و Quad SPI
همانطور که در بخشهای قبلی توضیح داده شد SPI یک پایه برای انتقال دیتا از Master به Slave و یک پایه برای انتقال دیتا از Slave به Master دارد و با این دو مسیر جداگانه امکان ارتباط Full Duplex را فراهم کرده است. مواردی وجود دارد که در آنها امکان Full Duplex کاربردی ندارد اما سرعت انتقال اطلاعات بسیار مهم است. از جمله این موارد میتوان به ارتباط میکروکنترلر با آیسیهای حافظه اشار کرد.
در چنین مواردی دور از ذهن نیست با یک تغییر در ساختار SPI بتوان از حالت Full Duplex صرفنظر کرده و از هردو پایه MISO و MOSI برای انتقال دیتا از Master به Slave و از Slave به Master استفاده کرد. در این صورت ارتباط از نوع Half Duplex است اما نسبت به SPI دارای نرخ انتقال دیتای 2 برابر است چون در هر کلاک 2 بیت دیتا منتقل میشود. این درگاه را Dual SPI یا به اختصار DSPI میگویند و نام پایههای MOSI و MISO به ترتیب IO0 و IO1 است.

Quad SPI یا به اختصار QSPI هم از همان فلسفه Dual SPI پیروی میکند با این تفاوت که دو پایه اضافهتر دارد و از 4 پایه دیتا با نامهای IO0, IO1, IO2, IO3 استفاده میکند. بنابراین QSPI هم Half Duplex بوده اما نسبت به SPI دارای نرخ انتقال دیتای 4 برابر است چون در هر کلاک 4 بیت دیتا را منتقل میکند. QSPI در ارتباط با آیسیهای حافظه بسیار پرکاربرد است.

در پایان
در این مقاله در مورد اینکه SPI چیست، چگونه کار میکند، مزایا و معایب SPI چیست و اینکه موارد کاربرد آن کجاست صحبت کردیم. اگر به اطلاعات بیشتری نیاز دارید میتوانید به منابعی مانند SPI-wikipedia مراجعه کنید. بسیار خوشحال خواهیم شد اگر نظرات خود در مورد این مقاله و یا تجربیاتتان در مورد SPI را در بخش نظرات این مقاله با ما بو دیگر دوستانتان به اشتراک بگذارید.
دیدگاهتان را بنویسید