خانه / پروژه ها / پروژه های Arduino / ارتباط FPGA با Arduino توسط SPI, به همراه کد پیاده سازی SPI در FPGA و کد Arduino .

ارتباط FPGA با Arduino توسط SPI, به همراه کد پیاده سازی SPI در FPGA و کد Arduino .

ارتباط FPGA با Arduino توسط SPI, به همراه کد پیاده سازی SPI در FPGA و کد Arduino .

در مرحله اول بریم سراغ پروتکل SPI و اینکه چطور این پروتکل کار میکند.

کلمه SPI مخفف عبارت Serial Peripheral Interface است که اشاره دارد به یک پروتکل ارتباطی سریال. از این پروتکل در ارتباطات با فاصله کوتاه استفاده می‌شود و نوع ارتباط آن سنکرون است. در کامل‌ترین حالت، چهار سیم یا مسیر ارتباطی برای پیاده‌سازی این پروتکل به کار می‌رود.

همانطور که گفتیم این ارتباط از نوع سنکرون هست و یک سیگنال به عنوان کلاک باید از طرف Master به سمت Slave ارسال شود برای هماهنگ سازی. حتی وقتی که دیتا از سمت Slave به سمت Master ارسال میشود باید کلاک از طرف مستر ارسال شود.

سیگنال MOSI که مخفف Master Output Slave Input است برای انتقال داده‌ها از master به slave و سیگنال MISO که مخفف Master Input Slave Output است برای انتقال داده‌ها از slave به master استفاده می‌شود.

در مورد سیگنال‌های ارتباطی پروتکل SPI به دو نکته توجه کنید. نکته اول اینکه در بعضی از سیستم‌ها، برای برقراری ارتباط SPI از سه سیم به جای چهار سیم استفاده می‌شود. در این حالت، به جای دو سیم برای انتقال داده‌ها بین master و slave، از یک سیم استفاده می‌شود. در نتیجه، پروتکل از حالت full duplex به half duplex تغییر ماهیت می‌دهد.

نکته دوم در مورد سیگنال‌های پروتکل SPI مربوط به نامگذاری آنها است. در مراجع مختلف، ممکن است برای سیگنال SCLK از CLK یا SCK استفاده شود. به جای سیگنال MOSI ممکن است از SDI یا DI استفاده شود و به جای سیگنال MISO از SDO یا DO استفاده شود.

شکل زیر نحوه ارسال دیتا و کلاک را نشان میدهد.

SPI_FPGA

پایه ی SSEL فعال صفر است ( تو FPGA هم ما باید فعال صفر لحاظ کنیم) پس هر زمان که این پایه صفر بشود فرستنده باید دیتا را شروع به ارسال کند و گیرنده با هر کلاک دریافتی باید دیتاهای تکی که دریافت میشود را جمع کند در زمانی که SSEL یک شد دیگه دیتا دریافت نکند ( با یک شیفت رجیستر دیتا دریافت میشود و زمان یک شدن SSEL به یک سیگنال ۸ بیتی منتقل میشود).

برای ارسال و دریافت دیتا بین دو دستگاه باید این سوال ها از فرستنده پرسیده شود.

دیتا های ارسالی چند بیتی هستند :

دیتای ارسالی از طرف فرستنده میتوانند دیتای ۸ بیتی یا ۱۰ یا ۱۶ یا ۳۲ بیتی باشد ( گه اگر ما دیتا را طرف IC مثل ADC دریافت میکنیم داخل دیتاشیت اون IC نوشته شده که دیتای چند بیتی ارسال میکند).
۲٫ فرستنده در چه مود (Mode) کار میکند.

چهار مود کاری برای پروتکل SPI وجود دارد

ارتباط FPGA با Arduino توسط SPI

ارتباط FPGA با Arduino توسط SPI

که نوع مود کاری در دیتاشیت قطعه نوشته شده است. (ما در این مثال ارتباط FPGA با Arduino توسط SPI از مود صفر استفاده کردیم)
۳٫دیتای دریافتی اول MSB است یا LSB ؟

دیتاهای ارسال شده از طرف فرستنده میتوانند اول MSB باشد و به دنبال ان بیت های ارزش بیشتر ارسال شوند . یا اینکه اول LSB باشد

که این هم داخل دیتاشیت IC فرستنده نوشته شده است.

یک مثال ساده از ارتباط FPGA با Arduino توسط SPI

میخایم توسط اردوینو یکسری اعداد به سمت FPGA ارسال کنیم و وقتی به عدد ۱۵ رسید یک عدد LED که روی FPGA است را روشن کنیم

این کد اردوینو است

دانلود کد برنامه

و پایه های اردوینو به ترتیب

SS => 10

MOSI => 11

MISO => 12

SCK => 13

دانلود قسمت دوم کد برنامه

منبع : سایت 5 ولتی ها

درباره ی mostafa khezri

من مصطفی خضری، از بچگی عاشق الکترونیک بودم و عاشق کارهای عملی هستم. حتما نظرات خودتون رو در آخر نوشته ها اعلام کنید. مطمئن باشید در کوتاه ترین زمان به دیدگاههای شما پاسخ داده میشه.

همچنین ببینید

راه اندازی SHT با ARDUINO

SHTxx سنسور دیجیتال ساخت کمپانی Sensirion برای اندازه‌گیری رطوبت است که میزان رطوبت را به صورت …

یک دیدگاه

  1. با عزض سلام و خسته نباشید از سایت و مطالب خوبتون

    لینک دانلود مشکل داره ، اگه امکان داره درست کنید ممنون

دیدگاهتان را بنویسید

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

10 + پانزده =