دوشنبه, 18 مرداد 1395 ساعت 13:20

آشنایی با پروتکل های ارتباطی: درس اول(پروتکل SPI)

این مورد را ارزیابی کنید
(11 رای‌ها)

زمانی که یک میکروکنترلر را به یک سنسور، نمایشگر و ماژول های مختلف وصل می کنید، آیا تا به حال فکر کردید که این قطعات چگونه با یکدیگر صحبت می کنند؟ دقیقا چه چیزی به یکدیگر می گویند؟ حرف های یکدیگر را چگونه متوجه می شوند؟

 

ارتباط قطعات الکترونیکی دقیقا مانند ارتباط بین انسان هاست. هردو طرف باید به یک زبان صحبت کنند. در الکترونیک به این زبان ها پروتکل ارتباطی می گویند. خوشبختانه چند مورد از این پروتکل های ارتباطی از اهمیت بیشتری برخوردار بوده و در اکثر پروژه های الکترونیکی قابل پیاده سازی هستند. سه نمونه از این پروتکل ها در سه مقاله جداگانه مورد بررسی قرار می گیرند:

Serial Peripheral Interface (SPI)

Inter-Integrated Circuit (I2C)

Universal Asynchronous Receiver/Transmitter (UART)

 

در ابتدا مبانی ارتباط الکترونیکی بررسی می گردد و در ادامه پروتکل SPI به طور دقیق توضیح داده خواهد شد. در درس دوم پروتکل UART و در درس سوم نیز پروتکل I2C  مورد بررسی قرار خواهد گرفت.

سرعت پروتکل های ارتباطی SPI، I2C و UART به مراتب از پروتکل های دیگری مانند USB، ethernet، Bluetooth و WiFi کمتر است، ولی کار با آنها ساده تر و به سخت افزارها و منابع سیستمی کمتری احتیاج دارند. SPI، I2C و UART برای ارتباط بین میکروکنترلرها و  ماژول ها و سنسورهای دیگر که نیاز به انتقال اطلاعات با سرعت بالایی نیست مناسب هستند.

 

ارتباط سریال در مقابل موازی:

قطعات الکترونیکی از طریق ارسال بیت ها به واسطه سیم هایی که بین شان وجود دارد، با یکدیگر صحبت می کنند. هر بیت در واقع یک حرف از یک کلمه است، اما با 26 حرف زبان انگلیسی متفاوت است. بیت فقط می تواند مقدار 0 و یا 1 را اختیار کند و از طریق تغییرات سریعی که در سطح ولتاژ به وجود می آید، از یک قطعه به قطعه ای دیگر منتقل می شوند. برای سیستمی که با منبع 5 ولت کار می کند، بیت صفر از طریق ایجاد یک پالس کوتاه صفر ولت و بیت 1 از طریق ایجاد پالس کوتاه 5 ولت ایجاد می شود.

بیت ها می توانند به صورت سریال و یا موازی بین قطعات منتقل شوند. در حالت موازی تمامی بیت های مربوط به یک داده به صورت یک جا از طریق سیم ها منتقل می شود. شکل زیر نحوه انتقال موازی حرف ‘C’ به صورت باینری(01000011) نشان می دهد.

 

در ارتباط سریال بیت ها یکی یکی و از طریق یک سیم منتقل می شوند. شکل زیر نحوه انتقال سریال حرف ‘C’ را به صورت باینری(01000011) نشان می دهد.

 

 

معرفی پروتکل ارتباطی SPI:

SPI یک پروتکل ارتباطی بوده که توسط بسیاری از ماژول ها استفاده می شود. ماژول SD کارت، ماژول RFID card reader و وایرلس 2.4 گیگاهرتزی گیرنده/فرستنده نمونه هایی از این موارد هستند.

ایتدایی ترین تعریف از SPI انتقال داده ها بدون وقفه می باشد. هر تعداد از بیت ها می توانند به طور پیوسته فرستاده و یا دریافت شوند. در ازتباط I2C و UART داده ها به صورت بسته هایی که به بیت های مشخصی محدود شده، فرستاده می شوند. شرایط شروع و توقف، ابتدا و انتهای بسته ها را مشخص می کند، لذا در طول انتقال داده ها وقفه هایی وجود دارد.

ارتباط قطعات از طریق SPI بر اساس رابطه master – slave (استاد و برده) می باشد. master قطعه کنترل کننده(معمولا میکروکنترلر) و slave(معمولا یک سنسور، نمایشگر یا تراشه حافظه) دستورات را از master دریافت می کند. در ساده ترین روش ارتباط SPI یک master و یک slave وجود دارد، در حالی که این امکان هم هست که یک master چند slave  را کنترل کند.

 

 

MOSI (Master Output/Slave Input)  =   خطی برای ارسال داده ها از master به slave

 MISO (Master Input/Slave Output) =   خطی برای ارسال داده ها از slave به master

SCLK (Clock) =   خطی مربوط به سیگنال کلاک

SS/CS (Slave Select/Chip Select) =   خطی برای master برای اینکه انتخاب کند داده به کدام slave منتقل شود.

 

تعداد سیم ها 4
حداکثر سرعت  حداکثر تا 10مگابیت بر ثانیه
همزمان یا ناهمزمان همزمان
سریال یا موازی سریال
حداکثر تعداد master 1
حداکثر تعداد slave به صورت تئوری نامحدود

 

در عمل تعداد slaveها با توجه به میزان ظرفیت بارهایی که به سیستم متصل هستند، محدود می شود. چون باعث کاهش دقت master در سوئیچ کردن بین سطح های ولتاژ خواهد شد.

SPI چگونه کار می کند:

کلاک ساعت:

سیگنال کلاک باعث همزمانی داده های خروجی از master و داده های نمونه از slave می شود. به ازای هر کلاک یک بیت داده منتقل خواهد شد، پس سرعت انتقال اطلاعات به فرکانس سیگنال کلاک بستگی دارد. مقدار دهی اولیه و فرکانس سیگنال کلاک در ارتباط SPI توسط master تعیین می شود.

پروتکل های ارتباطی که از سیگنال کلاک استفاده می کنند، همزمان(synchronous) خوانده می شوند که ارتباط SPI نیز از این نوع می باشد. پروتکل های ارتباطی دیگر که از سیگنال کلاک استفاده نمی کنند، ناهمزمان(asynchronous) خوانده می شوند. برای مثال در ارتباط UART هر دو سمت رابطه از یک نرخ انتقال اطلاعات(baudrate) یکسان برای انتقال داده ها استفاده می کنند.

سیگنال کلاک در ارتباط SPI توسط تنظیمات clock polarity و clock phase در دسترس است. از این دستورات برای تعیین اینکه بیت ها از نوع خروجی و یا نمونه ی داده می باشند، استفاده می شوند. Master از دستور clock polarity برای تعیین اینکه بیت ها در لبه بالا رونده و یا پایین رونده به صورت خروجی و  داده نمونه باشد، استفاده می کند. از دستور clock phase جهت تعیین اینکه داده خروجی و  نمونه در لبه بالارونده و یا پایین رونده اول و یا دوم، بدون توجه به سطح آنها، اتفاق بیافتند، استفاده می شود.

انتخاب slave:

Master از طریق قرار دادن خط انتخاب مربوط به slave (CS/SS) در حالت LOW، می تواند انتخاب کند که با کدام slave می خواهد ارتباط برقرار کند. و اگر این خط در حالت HIGH قرار داشته باشد، هیچ گونه انتقال اطلاعاتی صورت نخواهد گرفت. در صورت وجود چند پین CS/SS  تمامی slave ها به صورت موازی به master متصل خواهند شد و در صورتی که فقط یک پین CS/SS  وجود داشته باشد، اتصال از طریق یک سیم و به صورت شاخه ای خواهد بود.

وجود چند slave:

همان طور که گفته شد در پروتکل SPI امکان برقراری ارتباط یک master با یک  slave و یا یک master با چند slave وجود دارد. دو راه برای اتصال چند slave به یک master وجود دارد، در صورتی وجود چندین پین انتخاب slave ، اتصالات مطابق شکل زیر است:

 

 

و در صورتی که فقط یک پین برای انتخاب slave وجود داشته باشد، اتصالات شاخه ای به صورت زیر خواهد بود:

 

 

MOSI  و  MISO :

داده ها به صورت بیت به بیت و سریال از طریق پین MOSI از master به slave فرستاده می شوند. Slave نیز این داده ها را از طریق پین MOSI دریافت می کند. در این حالت معمولا بیت های با ارزش(MSB) زودتر فرستاده می شوند.

Slave نیز داده های خود را از طریق پین MISO به master می فرستد. در این حالت معمولا بیت های کم ارزش(LSB) زودتر فرستاده می شوند.

مراحل انتقال داده از طریق پروتکل SPI:

1 – master سیگنال کلاک را ارسال می کند.

 

2 – master جهت فعال کردن slave پین SS/CS را در حالت LOW قرار می دهد.

3 – master داده ها را به صورت بیت به بیت از طریق پین MOSI ارسال کرده و slave نیز آن را از طریق همین پین دریافت می کند.

4-  در صورتی که به اطلاعات slave احتیاج باشد، داده ها به صورت بیت به بیت از طریق پین MISO به master فرستاده خواهند شد:

مزایا و معایب SPI :

با توجه به مزایا و معایب این پروتکل و مقایسه با پروتکل های دیگر شما می توانید انتخاب درست را در پروژه های خود داشته باشید:

مزایا:

  • بیت شروع و پایانی وجود ندارد، لذا داده ها بدون وقفه منتقل خواهند شد.
  • سییتم پیچیده آدرس دادن slave مانند I2C وجود ندارد.
  • سرعت بالاتر انتقال اطلاعات نسبت به I2C(تقریبا دو برابر)
  • با توجه به دو خط جدا برای MISO و MOSI امکان دریافت و ارسال داده به صورت هم زمان وجود دارد.

 

معایب:

  • استفاده از چهار سیم(در صورتی که I2C و UART از دو سیم استفاده می کنند)
  • هیچ علامتی مبنی بر دریافت صحیح داده وجود ندارد(I2C این امکان را دارد)
  • هیچ گونه روش تشخیص خطا ندارد مانند پریتی در UART
  • فقط امکان استفاده از یک master وجود دارد.

 

امیدواریم که این مقاله اطلاعات خوبی در اختیار شما قرار داده باشد. در مقالات بعدی پروتکل های UART و SPI مورد بررسی قرار خواهند گرفت.


 

ترجمه شده توسط صنعت بازار | منبع: سایت circuitbasics

خواندن 4707 دفعه

دیدگاه‌ها   

+4 #1 میلاد 1395-06-04 17:21
سلام.امکانش هست راجع به انتقال داده از fpga با پروتکل spi توضیح بدین؟
ممنون
نقل قول کردن | گزارش به مدیر
+3 #2 پشتیبان الکترونیک 1395-06-09 07:50
سلام. انشاالله در اسرع وقت مقاله ای در این رابطه آماده میشود...
نقل قول کردن | گزارش به مدیر
+5 #3 moga 1395-11-20 11:53
مفید بود
نقل قول کردن | گزارش به مدیر
+5 #4 moga 1395-11-20 11:53
مفید بود
نقل قول کردن | گزارش به مدیر
+4 #5 حسین 1395-12-03 17:48
ممنون
مقاله مفیدی بود
نقل قول کردن | گزارش به مدیر
+4 #6 الكترون 1396-02-18 14:11
سلام
انصافا خيلي لذت بردم. عالي بود
نقل قول کردن | گزارش به مدیر
+1 #7 eleccom 1396-05-17 05:13
مقاله هاتون بسیار مفیده و خیلی خوانا هست ممنون ولی من فک میکنم که در مورد یکی از عیب های spi "هیچ گونه روش تشخیص خطا ندارد مانند پریتی در UART" خیلی درست نیست چون spi از سیستم crc برای تشخیص خطا استفاده می کنه
نقل قول کردن | گزارش به مدیر
0 #8 بطالبلو 1396-05-25 18:17
به نقل از eleccom:
مقاله هاتون بسیار مفیده و خیلی خوانا هست ممنون ولی من فک میکنم که در مورد یکی از عیب های spi "هیچ گونه روش تشخیص خطا ندارد مانند پریتی در UART" خیلی درست نیست چون spi از سیستم crc برای تشخیص خطا استفاده می کنه

ممنون از نظرتون
اگر ممکنه در این رابطه توضیح بیشتری بدید و اگر منبعی هم در این رابطه دارید ممنون میشیم با ما در میان بگذارید تا همگی از آن استفاده کنیم.
با تشکر
نقل قول کردن | گزارش به مدیر

نوشتن دیدگاه


تصویر امنیتی
تصویر امنیتی جدید


محتوای آموزشی استفاده شده در این سایت ثبت شده می باشد و هرگونه کپی برداری از محتواهای تولید شده توسط تیم صنعت بازار موجب پیگرد خواهد بود.
کپی رایت | 2017