Home / میکروکنترلر / آموزش میکروکنترلر AVR / آموزش SPI در میکروکنترلر AVR

آموزش SPI در میکروکنترلر AVR

ارتباط SPI در میکروکنترلر AVR:

در این قسمت از آموزش AVR درباره ی SPI در میکروکنترلر AVR توضیحاتی ارائه می شود بعد از این پست راه اندازی ماژول NRF به صورت کامل در پستی جداگانه شرح داده خواهد شد.

SPI چیست ؟

SPI یا serial peripheral interface یک ارتابط سریع سریال است. که بوسیله ی شرکت موتورلا طراحی شده است. SPI به صورت full-Duplex عمل کرده و امکان ارسال و دریافت همزمان را دارد. از واسط SPI برای انتقال اطلاعات با سرعت انتقال بالا و برای فواصل کوتاه استفاده می کنند.

در باس SPI ارتباط دو وسیله به صورت MASTER/SLAVE است. آغاز کننده ی ارتباط همیشه Master است و فقط Master است که می تواند شروع به انتقال کند و Slave باید منتظر دریافت اطلاعات بماند.

هر وسیله ی SPI دارای 4 پایه ی زیر است:

MISO: Master Input Slave Output

MOSI: Master Output Salve Input

SCK:   Serial Clock

SS: Slave Select

خصوصیات SPI در میکروکنترلر AVR به صورت زیر می باشد:

  • Full-Duplex ارسال اطلاعات به صورت سنکرون توسط 3 سیم
  • عملکرد در حالت های Master و Slave
  • ارسال بیت ابتدایی LSB یا MSB
  • هفت سرعت قابل برنامه ریزی
  • ایجاد و قفه در پایان ارسال
  • بیدار شدن از مد Idle
  • امکان دو برابر کردن سرعت ارسال

بلوک دیاگرام SPI:

spi diagram

 

سیستم دارای دو بخش Master وSlave است. در بخش Master سیستم دارای یک شیفت رجیستر 8 بیتی و مولد پالس است و بخش slave فقط شامل یک شیفت رجیستر هشت بیتی است.

کلاک این دو رجیستر از واحد تولید کلاک در وسیله ی Master تامین می شود. با اعمال هر پالس کلاک به طور هم زمان یک بیت از شیفت رجیستر Master خارج شده و وارد شیفت رجیستر Slave می شود. و یک بیت نیز از شیفت رجیستر Slave وارد شیفت رجیستر Master خواهد شد. پایه ی SS فعال ساز شیف رجیستر Slave است و تا زمانی که بوسیله ی Master ضفر نشود بیتی را منتقل نخواهد شد.

در صورتی که محتوای این رجیستر ها 8 بیت شیفت پیدا کند محتویات رجیستر داده ی Master و Slave با یکدیگر تعویض می شود. به صورت چرخشی محتوای master با slave عوض می شود . یعنی محتویات slave به master منتقل شده و در مقابل محتوای master نیز با slave تعویض خواهد شد.

آشنایی با رجیستر های SPI:

رجیستر SPCR:

spcr

SPI Control Register

بیت 7 – SPIE :

این بیت وقفه ی SPI را فعال می کند اگر بیت SPIF در رجیستر SPSR یک شود وقفه روی میدهد.

بیت 6 – SPE :

با یک شدن این بیت SPI فعال می شود.

بیت 5 – DORD:

با یک شدن این بیت ابتدا بیت LSB ارسال  می گردد و اگر صفر باشد اول بیت MSB ارسال می شود.

بیت 4 – MSTR :

اگر این بیت 1 شود SPI در حالت MASTER فعال می شود و اگر صفر یاد در حالت SLAVE تنظیم می شود.

بیت 3 – CPOL :

اگر این بیت 1 باشد در حالت بیکاری پایه ی SCK یک خواهد بود در غیر این صورت این پایه ضفر خواهد بود.

بیت 2 – CPHA :

این بیت مربوط به نحوه ی نمونه برداری از دیتا با توجه به لبه ی کلاک SCK می باشد.

بیت 0 و 1 – SPR0, SPR1:

این دو بیت فرکانشس کلاک پایه ی SCK را در حالت MASTER تعیین می کند طبق جدول پایین

SPI clok

رجیستر SPSR :

spsr

SPI Status Register

بیت 7 – SPIF:

زمانی که ارسال داده تکمیل می شود پرچم SPIF یک میگردد و در صورتی که بیت SPIE در SPCR یک و وقفه ی سراسری فعال باشد وقفه ایجاد می شود.

بیت 6 – WCOl :

اگر رد حین انتقال داده داده ی جدیدی در رجیستر داده ی SPI نوشته شود بیت WCOL  یک می شود. با خواندن رجیستر وضعیت SPI بیتهای WCOL و SPIF پاک می شوند و سپس دسترسی به رجیستر داده ی SPI صورت می گیرد.

بیت های 1 تا 5:

این بیت ها رزرو شده هستند و کاربرد خاصی ندارند.

بیت 0 – SPI2X :

زمانی که SPI در حالت master باشد با یک کردن این بیت سرعت SPI دو برابر خواهد شد.(فرکانس SCK دو برابر می شود.

رجیستر SPDR :

spdr

رجیستر داده SPI یک رجیستر R/W است. که برای انتقال داده بین فایل رجیستر و شیفت رجیستر به کار میرود با نوشتن بر روی این رجیستر داده ارسال می شود و خواندن این رجیستر هم باعث خواندن بافر مربوط به دریافت شیفت رجیستر می شود.

تعیین جهت پایه های SPI در حالت Master و Slave:

ارتباط سریال دارای 4 پایه ی MOSI , MISO , SCK و SS است در حالت Master  باید پایه ی MOSI ورودی باشد و بقیه ی پیاه ها خروجی شوند. و در حالت Slave باید پایه ی MISO خروجی و سایر پایه ها ورودی باشند. تنظیم تمام پایه ها به طور خودکار توسط واحد SPI انجام نمی شود و تنها جهت پایه هایی که باید خروجی باشند را به طور خودکار تنظیم می کند.

spi pin

تنظیم این پایه ها در میکروکنترلر ATmega32 به صورت زیر می باشد:

در حالت Master :

و در حالت Slave:

برنامه نمونه برای میکروکنترلر در حالت Master:

برنامه نمونه برای میکروکنترلر در حالت Slave:

در نوشتن این برنامه ها از کتابخانه spi.h استفاده شده تابع spi هم عمل فرستادن دیتا و هم عمل دریافت دیتا را انجام می دهد. اگر مشکلی در مورد برنامه داشتید در قسمت نظرات بنویسید تا بیشتر توضیح دهم.

مدار لازم برای تست برنامه :

SPI-الکترولب-آموزش
SPI-الکترولب-آموزش

 دانلود پروژه و فایل شبیه سازی پرتیوس:

دانلود

About علی عزتی

علی عزتی هستم. رشته ی مهندسی برق الکترونیک رو خوندم. علاقه ی من به یادگیری و به اشتراک گذاشتن چیز هایی که یاد گرفتم. باعث شد تا الکترولب ایجاد بشه. علاقه ی زیادی به الکترونیک دارم. و دوست دارم چیزهای جدید یادبگیرم و بسازم ... :))

Check Also

راه اندازی SD کارت با آردوینو

اگر لازم باشد تا در پروژه ی خود از ویدیو عکس یا ذخیره ی اطلاعات ...

7 comments

  1. با عرض سلام وخسته نباشید. لطفا نحوه متصتل شدن ماژول +nrf 24L01 توسط پورت spi به میکرو را هم شرح دهید.

  2. سلام و خسته نباشید.
    دوست عزیز من در یکی از برنامه هایی که در مورد SPI نوشته شده بود دیدم برای ارسال و دریافت اطلاعات از دستوراتی مثل :
    SPDR=PIND;
    PORTC=SPDR;
    استفاده کرده بود.
    تفاوت این کد با کد شما چیه و معادل اون در برنامه شما کدوم خط میشه؟
    این خط هم اگر امکانش هست در موردش بفرمایید چیه و این دستور SPI را در کجا تعریف کردید که اینجا ازش استفاده کردید؟
    data_get=spi(data_send);

    • من به طور مستقیم با رجیستر های SPI کار نکردم و با کتابخانه ی SPi که در خود کدویژن هست کار کردم. SPDR دیتا رجیستر SPI هست که در بالا توضیح دادم که هرچیزی در اون نوشته شده باشه رو می فرسته
      توابعی که کتابخانه SPI.h در اختیار فرار داده تابع های data_get و data_send هست که عمل فرستادن و گرفتن دیتا رو از طریق SPI فراهم می کنه

  3. سلام من میخوام پروتکل spi رو با اینتراپت راه اندازی کنم تو کد ویژن میشه ؟

  4. سلام علی اقا د رمورد ارتباط ماژل rc522مایفر به میکرو اطلاعات یا برنامه امادشو میخاستم.ممنون کمک کنید

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *