گذرگاه ارتباط جانبی سریال

گذرگاه SPI
گذرگاه ارتباط جانبی سریال یک پیوند داده سریال هماهنگ است که توسط موتورولا نامگذاری شده و در حالت کاملا دوطرفه فعالیت می‌کند. این نوع ارتباط در فاصله‌های کوتاه و دارای تنها یک "ارباب" مانند سامانه‌های نهفته، حسگرها و کارت‌های اس دی کاربرد دارد.
در این نوع ارتباطات، دستگاه‌ها به صورت ارباب/برده با هم ارتباط برقرار می‌کنند که در آن دستگاه ارباب فریم‌های داده را به راه می‌اندازد. هم چنین می‌توان با چند برده دارای خط‌های انتخاب قطعه جدا از راه یک خط مشترک ارتباط برقرار کرد. گاهی برای جداسازی SPI از گذرگاه‌های سریال ۳ سیمه، دو سیمه و یک سیمه، به آن گذرگاه سریال ۴ سیمه نیز می‌گویند.
رابط
SPI، چهار سیگنال منطقی دارد:
SCLK: ساعت سریال (خروجی از طرف ارباب).
MOSI: خروجی ارباب، ورودی برده (خروجی از طرف ارباب).
MISO: ورودی ارباب، خروجی برده (خروجی از طرف برده).
SS: انتخاب برده (فعال پایین، خروجی از طرف ارباب)
این پورت‌ها به نام‌های زیر نیز شناخته می‌شوند:
SCLK: SCK, CLK.
MOSI: SIMO, SDO, DO, DOUT, SI, MTSR.
MISO: SOMI, SDI, DI, DIN, SO, MRST.
SS: nCS, CS, CSB, CSN, nSS, STE, SYNC.
سیگنال Chip Select کمتر به صورت Active High دیده می‌شود و در این صورت نشانه‌گذاری پایه‌ها آن را مشخص می‌کند(مانند CS یا SS به جای nCS و nSS، به سطح منطقی مراجعه شود).
سیگنال انتخاب برده به جای آدرس دهی استفاده می‌شود.
کارکرد
گذرگاه SPI می‌تواند با یک ارباب و یک یا چند دستگاه برده کار کند.
اگر از یک برده استفاده شود، ممکن است سیگنال SS روی حالت منطقی پایین ثابت باشد. بعضی برده‌ها به یک لبه‌ی سقوط سیگنال انتخاب قطعه نیاز دارند تا فعالیت خود را شروع کنند. برای نمونه مبدل آنالوگ به دیجیتال MAX1242 از شرکت مکسیم اینتگریتد، تبدیل سیگنال‌های آنالوگ به دیجیتال را با تبدیل high→low شروع می‌کند. برای کار با چند دستگاه برده، باید از خط‌های SS مستقل برای هر کدام انتخاب کرد.
بیشتر دستگاه‌های برده دارای خروجی‌های سه حالته هستند که باعث می‌شود تا هنگامی که قطعه انتخاب نشده پین MISO روی حالت امپدانس بالا قرار بگیرد و از مدار حذف شود. دستگاه‌هایی که دارای خروجی‌های سه حالته نیستند برای استفاده هم‌زمان با چند برده‌ی دیگر مناسب نیستند و دستگاه ارباب فقط باید به یکی از آن‌ها وصل شده باشد.
تبادل داده
برای شروع تبادل داده‌ها، دستگاه ارباب نخست پالس ساعت را با فرکانسی کمتر یا برابر با حداکثر مقداری که دستگاه برده پشتیبانی می‌کند تنظیم می‌کند که معمولا در حد چند مگاهترس است. سپس یک سیگنال ۰ منطقی از خط انتخاب قطعه به برده می‌فرستد. برای این به دستگاه ۰ می‌فرستیم که سطح فعال آن ۰ است (Active Low) یعنی سطح خاموش آن، ۱ منطقی است. اگر نیازی به وقفه بود (مانند در قطعه‌های تبدیل آنالوگ به دیجیتال) دستگاه ارباب باید حداقل به آن میزان صبر کند و سپس پالس ساعت را به برده بفرستد.
در هر دوره‌ی پالس ساعت SPI، یک تبادل داده کاملا دوطرفه رخ می‌دهد:
ارباب داده از خط MOSI می‌فرستد و برده نیز آن را از همان خط دریافت می‌کند.
برده داده را از خط MISO می‌فرستد و ارباب نیز آن را از همان خط دریافت می‌کند.
وضعیت و قطبیت پالس ساعت
یک نمودار زمانی برای نشان دادن قطبیت و فاز پالس ساعت. خط قرمز عمودی نشانگر CPHA=0 و خط عمودی آبی رنگ نمایانگر CPHA=1 است.
ارباب، علاوه بر تنظیم کردن فرکانس پالس ساعت باید قطبیت (polarity) ساعت و فاز آن را نیز نسبت به داده‌ها مشخص کند. راهنمای قطعات شرکت Freescale ، این دو گزینه را به ترتیب CPOL و CPHA نامگذاری کرده و بیشتر شرکت‌ها نیز آن را پذیرفته‌اند.
در سمت چپ نمودار زمانی را میبینیم.
در CPOL=0 مقدار پایه‌ای و اولیه‌ی پالس ساعت ۰ است
در CPHA=0، داده‌ها در لبه‌ی بالارونده (از 0 به 1) خوانده و در لبه‌ی پایین رونده (از 1 به 0) پالس ساعت پخش می‌شوند.
درCPHA=1، داده‌ها در لبه‌ی پایین رونده خوانده و در لبه‌ی بالارونده پخش می‌شوند.
در CPOL=1 برعکس حالت بالا مقدار پایه‌ای پالس ساعت ۱ است
در CPHA=0 داده‌ها در لبه‌ی بالارونده خوانده و در لبه‌ی پایین رونده پالس ساعت پخش می‌شوند.
در CPHA=1، داده‌ها در لبه‌ی پایین رونده خوانده و در لبه‌ی بالارونده پخش می‌شوند.
به عبارت دیگر، CPHA=0 به این معناست که داده‌ها روی اولین لبه‌ی پالس ساعت و CPHA=1 به این معناست که داده‌ها روی لبه‌ی دوم پاس ساعت بدون توجه به اینکه پالس ساعت در حال بالا رفتن است یا پایین رفتن، خوانده می‌شوند.
شماره‌ی حالت‌ها
گاهی قطبیت و فاز را با هم می‌آمیزند و با قرار دادن CPOL به عنوان بیت با ترتیب بالاتر و CPHA به عنوان بیت با ترتیب پایین‌تر برای هر حالت شماره‌ای می‌دهند.
حالت
CPOL
CPHA
0
0
0
1
0
1
2
1
0
3
1
1