با سلام و عذر خواهی بابت دیر جواب دادن... مطلب زیر را بخونید. در مورد spi اینو بخونید:
اطلاعات بیشتر در مورد خود پروتکل SPI : ارتباط SPI – معرفی پروتکل ارتباطی سریال SPI
و برای SPI میکروکنترلر AVR ادامه مطب را بخوانید.
این پرتکل پرسرعت ترین ارتباط سریال می باشد که می توان از آن در پیکربندی LCD های موبایل وماژول سنسورها و یا ارتباط با SD کارتها استفاده کرد
که در آینده مثال هایی از این ارتباط را خواهیم زد
با توجه به شکل زیر در این ارتباط برخلاف UART می توان چندین Device , که می تواند میکرو , سنسور ,و... باشد را به صورت مستر/ اسلیو (Maser/Slave) را اندازی کرد
طبق شکل هر slave توسط یک PIN از Master به صورت جاگانه کنترل می شود
یعنی هر وقت Master بخواهد باهر یک از Slave ها ارتباط برقرار کند باید پایه متناظر باSlave را low کند تا slave در گاه ورودی و خروجی را برای ارتباط با master باز کند
در ارتباط SPI هر Device دارای یک شیفت رجیسترSISO (سریال ورودی و سریال خروجی) 8بیتی می باشد
که طبق شکل بالا خروجی شیفت رجیستر Master به ورودی Slave وصل می شود و همچنین خروجی رجیستر Slave به ورودی Master وصل می شود
بنابراین هر بیتی که وارد یکی از شیفت رجیستر ها شود آخرین بیتش از همان شیفت رجیستر خارج شده و به شیفت رجیستر دیگری انتقال می یابد.
جهت انتقال و یا شیفت دادن اطلاعات درون ثبات نیاز به کلاک پالس می باشد بنابراین هر Device داخل خودش یک مولد کلاک دارد ,ولی جهت هم زمانی بین
دو Device فرستنده و گیرنده کلاک اصلی را Master تولید می کند و انشعابی از همان کلاک را به Slave می دهد پس می توان گفت مولد کلاک slave غیر فعال باقی می ماند
پس برای تکمیل این بخش :
ابتدا Maser جهت ارتباط , پایهSSموجود روی Slave را LOw (صفر) می کند.
سپس دیتا را در رجیستر قرار می دهد , 8 عدد پالس برای شیفت دادن بیت به بیت اطلاعات تولید می کند
با این کار دیتای master از طریق پایه MOSI وارد شیفت رجیستر slave می شود و در مقابل نیز اطلاعات Slave از طریق پایه MISO به شیفت رجیستر Master وارد می شود
مستر کلاک را از طریق پایه SCLK به اسلیو می رساند
کلا 3 تا رجیستر برای برقراری این ارتباط در AVR موجود می باشد
1) SPDR یک رجیستر 8 بیتی که داده درون آن قرار می گیرد
در واقع همون رجیستر سریال ورودی و سریال خروجیمون هستش که در پست قبلی توضیح دادم
2) SPCR برای کنترل این پروتکل می باشد
3) SPSR رجیستر وضعیت SPI می باشد
رجیستر SPDR
نیاز به توضیح نداره ,مشخصه, داده رو درونش بریز تموم شد و رفت و همچنین در مد دریافت داده را از توش بخون
رجیستر SPCR
serial peripheral control خب این یکی یه کم نیاز به تشریح داره
SPIE: برای فعال کردن وقفه SPI ( هنگامی که فرایند ارسال یا دریافت کامل می شود این وقفه رخ می دهد به شرطی که وقفه سراسری بیت I در رجیستر SREG فعال باشد)
SPE:یا SPI Enable برای فعال کردن این پروتکل می باشد
DORD: یا Data Order اگر 0 باشد اولین بیت MSB ارسال می شود یعنی اطلاعات از سمت MSB شیفت و خارج می شوند
اگر 1 نوشته شود اولین بیت LSB ارسال می شود
MSTR: اگر 0 باشد مد slave فعال می شود
اگر 1 باشد مد master فعال می شود
CPOL: اگر 0 باشد اولین لبه کلاک بالا رونده یعنی در مد بی کاری که هیچ اطلاعاتی ارسال دریافت نمی شود پایه SCK در سطح صفر نگه داشته می شود
اگر 1 باشد اولین لبه کلاک هنگام ارسال پایین رونده می باشد یعنی در مد بی کاری پایه SCK در سطح یک نگه داشته می شود
CPHA: این بیت نحوه Setup (شیفت و یا تغییرات دیتا در کلاک) و asmple (نمونه برداری از سیگنال معتبر در کلاک)
برای قرار دادن اطلاعات در باس داده و همچنین نمونه برداری ازاطلاعات هر کدام را می توان در یک لبه از کلاک قرار داد یعنی وقتی در اولین لبه کلاک دیتا را در باس قرار می دهیم در دومین لبه کلاک مبی توانیم نمونه برداری یا به اصطلاح بخوانیم
اگر 0 باشد در اولین لبه کلاک sample رخ می دهد یعنی device می تواند از دیتا معتبر نونه برداری کند و در دومین لبه کلاک Setup رخ می دهد یعنی Device می تواند در لبه دیتای خودش را تغییر دهد
اگر 1 باشد در اولین لبه Setup و در دومین لبه Sample
SPR1:0 برای تعیین نرخ ارسال یا دریافت با توجه به فرکانس CPU یا Ocilator
رجیستر SPSR:
SPIF:هر گاه ارسال دریافت کامل شود این بیت 1 می شود که اگر بیت I از رجیستر SREG و بیت SPIE از رجیستر SPCR فعال باشد روتین وقفه مربوط به ارسال دریافت SPI اجرا می شود
با اجرا شدن روتین وقفه این بیت خود به خود پاک می شود
در صورتی که وقفه فعال نباشد برای پاک کردن این بیت ابتدا رجیستر SPSR و سپسSPDR خوانده شود مثلا داخل یه متغیر ریخته شوند
WCOL:هنگامی که ارسال اطلاعات کامل نشده یعنی Device در حال ارسال می باشد اگر داده ای درون SPDR نوشته شود این بیت یک می شود برای پاک کردن آن ابتدا رجیستر SPSR و سپسSPDR خوانده می شود
SPI2X: اگر یک نوشته شود نرخ ارسال در MASTER می تواند دو برابر شود البته باید به این نکته توجه داشت که نرخ ارسال در Device ها باید یکی باشد
سایر بیت ها رزرو می باشند
تمام
نکته هر گاه SPDR مقداردهی شود کلاک SCK شروع شده و ماژول SPI شروع به شیفت اطلاعات می کند بنابراین لازم است قبل از مقدار دهی SPDR برای ارسال داده ,Slave مورد نظر را فعال کنیم (صفر کردن پایه SS)
اطلاعات بیشتر در مورد پروتکل SPI : ارتباط SPI – معرفی پروتکل ارتباطی سریال SPI