سرخط خبرها
خانه » avr » آموزش avr » ارتباط سریال SPI

ارتباط سریال SPI

ارتباط سریال SPI :
ارتباط سریال SPI (SERIAL ERIPHERAL INTERFACE) یک پروتکل ارتبطی سریال سنکرون با سرعت بالا است که می تواند برای ارتباط میکروهای AVR با یکدیگر و یا با وسیله های دیگر که قابلیت ارتباط با این پروتکل را دارا هستند به کار برده شود.
خصوصیات:
• ارسال داده همزمان (SYNCHRONOUS )سه سیمه
• ارتباط به صورت هایMASTER /SLAVE
• ارسال ابتدای MSB یاLSB
• بیت های قابل برنامه ریزی برای تنظیم سرعت
• پرچم وقفه اتمام ارسال داده
• بیدار شدن از حالت بیکاری
طرز کار ارتباط SPI :
پایه SCK خروجی کلاک برای MASTER و ورودی کلاک برای SLAVE است.با نوشتن رجیستر داده SPI (SPI DATA REGISTER) در MASTER ٬ CPU شروع به تولید کلاک SPI کرده و داده ها از پایه MOSI (MASTER OUT SLAVE IN) خارج شده و به پایه MOSI در SLAVE وارد می شوند.بعد از انتقال کامل داده توسط MASTER ٬ کلاک SPI قطع و پرچم وقفه پایان ارسال داده (SPIF) یک می شودو برنامه وقفه اجرا میگردد.

دو شیفت رجیستر ۸ بیتی در MASTER و SLAVE را می توان به عنوان یک شیفت رجیستر چرخشی ۱۶ بیتی در نظر گرفت.این موضوع در شکل زیر دیده می شود.زمانی که داده ای از MASTER به SLAVE ارسال مشود می تواند در همان حال در جهت مخالف داده ای از SLAVE به MASTER انتقال یابد ٬ به این صورت که در طول هشت کلاک SPI داده های MASTER و SLAVE با هم عوض شود.

طرز اتصال SLAVEو MASTER :
زمانیکه SPI فعال شده باشد جهت پایه های SS ٬ SCK ٬ MISO ٬ MOSI با توجه به جدول زیر تعیین می شوند:

spi-learning

SPI در حالت ارسال ٬ تک بافره و در حالت دریافت٬ دو بافره می باشد.در حالت ارسال زمانی که داده قبلی کاملا ارسال نشده باشد٬ نمی توان در رجیستر داده SPI (SPDR) نوشت.زمانی که دریافت کامل شد٬ داده بلافاصله در بافر قرار می گیرد.
در حالت دریافت٬ داده پیشین قبل از اتمام دریافت بایت جدید٬ بایستی خوانده شود.در غیر اینصورت بایت جدید بر روی بایت قبلی نوشته می شود.
زمانیکه SPI به عنوان MASTER استفاده می شود٬ کاربر می تواند جهت پایه SS را تعیین کند.

اگر SS خروجی تعریف شده باشد٬ از ان به عنوان پایه خروجی عادی استفاده می شود و بدین صورت هیچ تاثیری در ارتباط SPI ندارد.اگر پایه SS ورودی تعریف شود بایستی حتما بالا باشد تا عملیات MASTER با اطمینان انجام شود.اگر این پایه زمانیکه به عنوان ورودی تعریف شده است به وسیله مدار جانبی دیگر(صفر)شود٬ در حالتی که SPI در مد MASTER پیکره بندی شده است سیستم دیگری را به عنوان MASTER برای خود تلقی کرده و به حالت SLAVE می رود.
طرز کار پایه SS در مد SLAVE :
زمانیکه SPI در مد SLAVE پیکره بندی میشود پایه SSهمیشه ورودی است.وقتی پایه SS صفر می شود٬ SPI فعال شده و پایه MISO در صورت تعریف کاربر به عنوان خروجی در نظر گرفته می شود.
زمانیکه پایه SS بالا می رود٬ SPI بیکار است و هیچ گونه داده ای را دریافت یا ارسال نمی کند.اگر پایه SS در هنگان انتقال داده بالا رود٬ SPI ارسال و دریافت را بلافاصله قطع کرده واطلاعات چه دریافت وچه ارسال شده باشد از دست می رود.
از پایه SS میتوان برای انتخاب SLAVE مورد نظر در سیستم هایMulty Slave استفاده کرد.

spi-circuit

پیکره بندی SPI در محیط BASCOM
در BASCOM پایه های SPI به و صورت نرم افزاری و سخت افزاری پیکره بندی
می شوند.در پیکره بندی به صورت سخت افزاری پایه ای پیش فرض MOSI,MISO,SCK,SS به کار می روند و نمی توان انها را تغییر داد.
با استفاده از پیکره بندی نرم افزاری می توان هر کدام از پایه های میکرو را به جای پایه های فوق استفاده نمود.در این پروژه از پیکره بندی سخت افزاری استفاده شده است.

پیکره بندی سخت افزاری SPI

CONFIG SPI=HARD,INTERRUPT=ON|OFF,

DATAORDER=LSB|MSB,MASTER=YES|NO,POLARITY=HIGH|LOW,

PHASE=0|1,CLOCKRATE=4|16|64|128,NOSS=0|1

INTERRUPT=ON|OFF در صورت استفاده از وقفه در ارتباط SPI از گزینه ON استفاده می شود.
DATAORDER=LSB|MSB :در صورت انتخاب LSB ابتدا بایت کم ارزش و سپس بایت پر ارزش ارسال می شود.
MASTER=YES|NO :اگر میکرویی که در حال برنامه ریزی ان هستیم MASTER باشد گزینه YES واگر SLAVE باشد ٬ گزینهNO انتخاب میگردد.
POLARITY=HIGH|LOW :اگر بخواهیم زمانیکه SPI در حالت بیکاری است پایه کلاک بالا باشد٬ گزینهHIGH انتخاب می شود.انتخاب LOW باعث پایین قرار گرفتن پایه کلاک در مدIDLE می شود.
NOSS=0|1 :انتخاب ۱ باعث می گردد که در حالت MASTER سیگنال SS ایجاد نشود.

دستورات مربوط به ارتباط SPI :

دستورSPIINIT :
توسط ین دستور پایه های به ار برده شده در ارتباط SPI ٬ INITIAL می شوند.ین دستور باید بعداز پیکره بندی SPI نوشته شود.

دستور SPIIN :SPIIN var,n توسط این دستور به تعداد n بایت از باس SPI داده دریافت می شودودر متغیرvar قرار می گیرد.

دستور SPIOUT :SPIOUT var,n
با این دستور تعداد n بایت داده از متغیرvar به باس SPI ارسال می شود.

استفاده از وقفه SPI :
برای استفاده از وقفه در ارتباط SPI ابتدا باید وقفه سراسری میکروکنترلر توسط دستور
ENABLE INTERRUPTS فعال شود.سپس دستور ENABLE SPI وقفه SPI را فعال می کند.زمانیکه وقفه اتفاق می افتد٬ سیستم اجرای برنامه عادی را متوقف کرده و به برچسبی که برای وقفه تعریف شده است پرش می نماید.با استفاده از دستورON SPI lable

می توان برچسب وقفه SPI را تعریف کردکه lable نام وقفه است و میتواند تا ۳۲ کاراکتر طول داشته باشد.بعد از پایان اجرای برنامه وقفه ٬ دستور RETURN موجب بازگشت به برنامه اصلی می گردد.

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

avr dos

یکی از خواسته ها هر فردی که با زبان بیسیک کار میکنه استفاده از کارت ...

۱۱ دیدگاه

  1. بسیار متشکر.اگر امکان دارد این وقفه را در codevision به صورت کد برنامه نویسی توضیح دهید.
    متشکرم.

  2. سلام و خسته نباشید . به مطالب نظرداده شده که نگاه کردم دیدم بارها تقاضا شده نمونه برنامه برای ارتباط اس پی ای رو توی سایت بگذارید ولی تاثیری نداشته
    شاید هم زمان زیادی از تقاضاها میگذره بنابراین باز هم ازشما سوال میکنم که آیا امکان داره
    یک نمونه برنامه عملی در مورد ارتباط ۲ میکرو باهم با استفاه از اس پی ای که بتونه محتویات یک متغییر رو از یک میکرو به دیگری انتقال بده در دسترس علاقمندان قرار بدهید

  3. مگه نباید مستر اوت master out به salve in مصل باشه?

  4. سلام
    خوب بود مرسی اگه امکانش هست یه مثال عملی در این مورد برای ارتباط چند میکرو بزنید ممنون میشم

  5. عالی بود امکانش هست یه مثال یا پروژه عملی در این مورد مث :flower: :flower: ال بزنی ..یااگه بشه به ایمیل من بفرستستی
    متشکرم

  6. میشه سورس (ارتباط spi)رو توسایت بذارید.ممنونم :۲confused:

پاسخ دهید