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

گذرگاه **ارتباط جانبی سریال**   یک پیوند دادهٔ سریال هماهنگ است که توسط موتورولا نامگذاری شده و در حالت کاملا دوطرفه فعالیت می‌کند. این نوع ارتباط در فاصله‌های کوتاه و دارای تنها یک "ارباب" مانند سامانه‌های نهفته، حسگرها و کارت‌های اس دی کاربرد دارد.

در این نوع ارتباطات، دستگاه‌ها به صورت ارباب/برده با هم ارتباط برقرار می‌کنند که در آن دستگاه ارباب فریم‌های داده را به راه می‌اندازد. هم چنین می‌توان با چند برده دارای خط‌های انتخاب قطعه جدا از راه یک خط مشترک ارتباط برقرار کرد. گاهی برای جداسازی 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 می فرستد و ارباب نیز آن را از همان خط دریافت می‌کند.

#### وضعیت و قطبیت پالس ساعت

ارباب، علاوه بر تنظیم کردن فرکانس پالس ساعت باید قطبیت (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 به عنوان بیت با ترتیب پایین‌تر برای هر حالت شماره‌ای می‌دهند.

## منابع
[//en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus ویکی‌پدیا انگلیسی]

رده:گذرگاه (رایانه)
رده:استانداردهای سخت‌افزار رایانه
رده:واسط‌ها
رده:ارتباطات سریال