تبليغاتX
الکترونیک ورایانه
بسم الله الرحمن الرحیم

اللهم صلی علی محمد وآل محمد وعجل فرجهم .
ارتباط سریال SPI

ارتباط سریال    SPI ( ( Serial Peripheral interface

 

                                           

این پروتکل برای ارسال سنکرون با سرعت بالا استفاده می‌شود.

این شیوه ارتباط دارای مزایای زیر است:

1. ارسال داده به صورت سنکرون توسط سه سیم

2. عملکرد در حالت‌های Slave , Master

3. هفت سرعت قابل برنامه‌ريزي

4. ايجاد وقفه در پايان ارسال

5. بيدار‌شدن از مد IDEL

6. امكان 2 برابر شدن نرخ ارسال

اما ویژگی  بارز و مورد توجه این  پرتکل در این است که اکثر  لوازم که به صورت سریال به تبادل داده می پردازند آن را پشتیبانی می کنند به عنوان مثال کارت های حافظه  MMC (کارت های حافظه متداول برای تلفن همراه) به راحتی توسط این پرتکل ارتباطی توسط  میکرو درایو می شوند  و حجم وسیع حافظه را در اختیار طراح می گذارند

                                     

البته بعد از اتمام معرفی میکرو کنترلر های AVR  به معرفی این گونه حافظه ها می پردازیم 

این واحد توسط ثبات ها SPCR و SPSR کنترل می شود

       

 

 

بخش های این واحد را می توانید در تصویر زیر مشاهده نماید

زماني كه سيستم Master  پایه ( Slave Select ) SS  را زمين كند سيكل ارتباطي آغاز مي‌شود .در اين حالت كلاک پالس  مورد نياز توسط سيستم  Master  بر روي پايه SCK قرار می‌گیرد وداده‌ها از طریق پایه MOSI  از سيستم اصلي به سيستم كاربر و از طريق پايه MISO  از سیستم کاربر به سیستم اصلی شیفت می‌یابد.

در پایان هر فریم با یک شدن پایه SS دو سيستم سنكرون مي‌شوند.

SPI برای ارسال یک یافر 8 بیتی و برای دریافت 2 یافر 8 بیتی دارد.

در حالت Slave واحد كنترل SPI سیگنال ورودی از پایه SCK را نمونه ‌برداري مي‌كند لذا براي اطمينان از نمونه‌برداري صحيح فركانس SPI نباید بیشتر از 4/1 فرکانس کریستال باشد.

در میکرو کنترلر های AVR تنظیمات این این ارتباط توسط  ثبات  SPCR  انجام می شود

به منظور بکار گیری میکرو در این مد با ید به شیوه زیر عمل کنیم

1) ابتدا برای میکرو مشخص می کنیم که در چه وضعیتی به تبادل اطلاعات می پردازد آیا به صورت میکرو مرکزی (Master )  دیگر میکرو ها را کنترل می کند یا به صورت پیرو (Slave )  با میکرو مر کزی  در ارتباط است

برای این منظور از بیت MSTR در ثبات SPCR استفاده می کنیم با يك شدن اين بيت SPI به صورت Master انتخاب مي‌شود در غير اين صورت Slave تنظیم می‌شود

دقت داشته باشید اگر این بیت یک وپایه SS به صورت ورودي تعريف شده باشد يا صفر شدن پایهSS بین بیت پاک می‌شود و بیت SPIE در ثبات SPSR فعال می‌گردد لذا برای برگشت به مد Master بايد اين بيت را يك كرد .

2) سپس  تعیین میکنیم  داده موجود در بافر  SPDR   به ترتیب از پر ارزش ترین بیت( MSB) شروع به انتقال کند یا از کم ارزش ترین بیت LSB) )

 

 برای این منظور ازا بیت DORD در ثبات SPCRاستفاده می کنیم با یک شدن این بیت ابتدا LSB ارسال مي‌شود و با صفر شدن آن ابتدا MSB ارسال می گردد

3) در صورتی که در مد  Master   کار می کنیم  فرکانس کلاک پالس  پایه SCK را که به منظور تبادل داده به  واحد های پیرو ارسال می گردد را به کمک بیت های  SPR0 و SPR1 در ثبات SPCR تعیین می کنیم در این میان در صورتی که بیت SPI2X در ثبات SPSR  یک باشد این فرکانس دو برابر می شود  لذا فکانس پایه SCK  مطابق جدول زیر تعیین می گردد:

SPI2X

SPR1

SPR0

SCK Frequency

0

0

0

fosc/4

0

0

1

fosc/16

0

1

0

fosc/64

0

1

1

fosc/128

1

0

0

fosc/2

1

0

1

fosc/8

1

1

0

fosc/32

1

1

1

fosc/64

 

فرکانس پایه SCK د در مد عمل کرد Slave تأثیر ندارند.

4) برای میکرو مشخص می کنیم داده هایی که مابین  واحد اصلی و واحد پیرو  در حال تبادل است در لبه بالا رونده  کلاک SCK نمونه برداری شود یا در لبه پایین رونده

برای این منظور از بیت CPHA استفاده می کنیم  در صورت یک بودن در لبه بالا رونده و در صورت صفر بودن در لبه پایین رونده  نمونه برداری صورت می گیرد

همچنین تعیین می کنیم پایه سزن در هنگام استراحت در حالت یک باشد یا صفر برای این منظور از بیت CPOL استفاده می کنیم با یک شدن این بیت درحالت استراحت پایه SCK يك ودر غير اين صورت صفر مي‌شود .

تر کیب این دو بیت (CPHAو CPOL ) چهار مد ارسال داده را به وجود می آورد

 CPOL and CPHA Functionality

 

Leading Edge

Trailing Edge

SPI Mode

CPOL = 0, CPHA = 0

Sample (Rising)

Setup (Falling)

0

CPOL = 0, CPHA = 1

Setup (Rising)

Sample (Falling)

1

CPOL = 1, CPHA = 0

Sample (Falling)

Setup (Rising)

2

CPOL = 1, CPHA = 1

Setup (Falling)

Sample (Rising)

3

 

در تصاویر زیر می توانید  نحوه کلاک خوردن پایه SCK  در هر کدام ازاین  چهار مد تبادل داده و سنکرون کردن لحظات نمونه بردادری  از پایه  MISO  / MOSI   را که توسط میکرو صورت میگیرد را مشاهد نمایید

) وقفه مربوط به ارسال داده را فعال کنیم برای این منظور بیت SPIE در ثبات SPCR را فعال می کنیم هنگامی که ارسال داده  تکمیل می شود بیت SPLF در ثبات SPSR یک می شود و در صورتی که بیت های I ( در ثبات وضعیت )  و بیت SPIE در ثبات SPCR فعال باشند وقفه روي مي‌دهد و میکرو برای اجرا دستورات به زیر روال وقفه می رود

6) در آخر برای فعال سازی  این واحد بیت SPE در ثبات SPCR را فعال مي‌کنیم تا ارتباط  و تبادل داده برقرار شود

 

در هنگام استفاده از واحد SPI در مورد پایه( Slave Select ) SS باید نکات زیر را مد نظر داشت:

کارکرد پایه SSدر مد Slave :

در این حالت SS به صورت ورودي تعريف شده زماني كه صفر شود SPI فعال می‌گردد پایه MISD بايد به صورت خروجي تعريف شود ( توسط برنامه نويس ) دو پایه دیگر نیز به صورت ورودی‌اند زمانی که SS يك شود SPI بازنشانی شده و غیرفعال میگردد.

کارکرد در مد Master

در اين مد ورودي با خروجي بودن SS توسط برنامه نویس تعیین می‌شود.

اگر خروجی تعریف شود درعملکرد SPI تأثيري ندارد اما اگر ورودي تعريف شود براي اطمينان از عملكرد صحيح باید  به صورت فعال ( يك) نگه داشته شود.

هنگام استفاده از واحد SPI  برای آنکه از امکان  اتصال کوتاه شدن باس جلوگیری به عمل آید

سيستم SPI به صورت زیر عمل می‌کند :

 

1. بیت MSTR در ثبات SPCR صفر می‌شود و سیستم به صورت Slave درمي‌آيد و پايه‌هاي SCK , MOSI ورودی میگردند.

2. پرچم SPIF واقع در ثبات SPSR یک می‌گردد و در صورتیکه وقفه SPI و بيت I از ثبات وضعیت فعلاً فعال شده باشند سرویس وقفه اجرا می‌شود.

بنابراین زمانی که در مد Master از وقفها رسال SPL استفاده می‌گردد احتمال صفر شدن SS وجوددارد لذا در زير روال وقفه اين پايه چك مي‌شود تا همراه با يك باشد.

 

همچنین خطای دیگری که هنگام استفاده از این واحد ممکن است روی دهد باز نویسی داده های ارسالی در ثبات بافر SPDR پیش از اتمام ارسال داده های قبلی از این ثبات است دراین صورت بیت WCOL در ثبات SPSR   به عنوان پرچم بروز خطا یک می شود

اگر اين بيت فعال باشد با خواندن ثبات SPSR بیت های SPIF , WCOL پاك مي‌شوند سپس دسترسي به داده صورت مي‌گيرد.

 

گردآورنده:   

مجتبی نظام هاشمی

 

 

 

/ نوشته شده توسط مجتبی در و ساعت |