تحلیل کتابخانه

تحلیل و بررسی کتابخانه SPI.h

نوشته شده توسط CiferTech
این کتابخانه به شما امکان می دهد با Arduino به عنوان دستگاه اصلی با دستگاه های SPI ارتباط برقرار کنید. Serial Peripheral Interface (SPI) یک پروتکل داده سریال همزمان است که توسط میکروکنترلرها برای برقراری ارتباط سریع با یک یا چند دستگاه جانبی در فواصل کوتاه استفاده می شود. همچنین می تواند برای ارتباط بین دو میکروکنترلر استفاده شود. بعضی اوقات SPI را باس سریال چهار سیمه می نامند و در تقابل با باس سریال سه، دو و یک سیم است. SPI را می توان به طور دقیق به عنوان یک رابط سریال همزمان توصیف کرد. دستگاه های SPI با استفاده از معماری master-slave با یک مستر در حالت دو تایی کامل ارتباط برقرار می کنند. دستگاه اصلی زمینه را برای خواندن و نوشتن ایجاد می کند. چندین دستگاه برده از طریق انتخاب با خطوط انتخاب برده منفرد (SS) که گاهی اوقات تراشه انتخاب می شود (CS) نیز پشتیبانی می شوند. در ادامه آموزش و تحلیل کتابخانه SPI.h با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


اتصالات در برد های مختلف


با اتصال SPI همیشه یک دستگاه اصلی (معمولا میکروکنترلر) وجود دارد که دستگاه های جانبی را کنترل می کند. به طور معمول سه خط مشترک در همه دستگاه ها وجود دارد:
MISO (Master In Slave Out) : خط Slave برای ارسال داده به استاد.
MOSI (Master Out Slave In) : خط اصلی برای ارسال داده به تجهیزات جانبی.
SCK (ساعت سریال) : پالس های کلاک که انتقال داده های تولید شده توسط برنامه را همزمان می کنند.
SS (Slave Select) : پین موجود در هر دستگاه که استاد می تواند برای فعال و غیرفعال کردن دستگاه های خاص از آن استفاده کند.
وقتی پین Slave Select دستگاه کم باشد ، با استاد ارتباط برقرار می کند. وقتی که بالا باشد ، استاد را نادیده می گیرد. این به شما امکان می دهد چندین دستگاه SPI با خطوط MISO ، MOSI و CLK یکسان داشته باشید.

 


پیش تنظیمات SPI


SPISettings برای پیکربندی پورت SPI برای دستگاه SPI شما استفاده می شود. هر ۳ پارامتر در یک SPISettings یک به یک ترکیب می شوند که به ()SPI.beginTransaction داده می شود. زمانی که همه تنظیمات ثابت هستند، SPISettings باید مستقیما در ()SPI.beginTransaction استفاده شود. اگر هرکدام از تنظیمات شما متغیر باشد، می توانید یک آبجکت SPISettings ایجاد کنید تا ۳ تنظیم را داشته باشد. سپس می توانید نام آبجکت را به ()SPI.beginTransaction بدهید. ایجاد یک آبجکت SPISettings با نامگذاری تنظیمات ممکن است کارآمدتر باشد، به خصوص اگر حداکثر سرعت یک متغیر محاسبه شده یا پیکربندی شده باشد، نه عددی که مستقیما در برنامه خود تایپ می کنید.

 

به این شکل از SPI Setting استفاده خواهیم کرد و پارامتر های مدنظر در محل مورد نظر قرار خواهیم داد.

  • SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))
  • SPISettings mySettting(speedMaximum, dataOrder, dataMode)

 


مستندات عملکرد اعضا کتابخانه


  • ;()begin
از این تابع برای شروع استفاده از کتابخانه استفاده می‌شود، با پشوند SPI فراخوانی می‌شود.
SPI.begin()

 

  • ;()end
گذرگاه SPI را غیرفعال می کند (با استفاده از این تابع حالت های پین بدون تغییر خواهند ماند)
SPI.end()

 

  • ;()beginTransaction
گذرگاه SPI را با استفاده از تنظیمات SPISettings تعریف شده آغاز می کند.
SPI.beginTransaction(mySettings);

 

  • ;()endTransaction
استفاده از گذرگاه SPI را متوقف می‌کند. به طور معمول این امر پس از عدم تایید انتخاب تراشه فراخوانی می شود، تا به سایر کتابخانه ها اجازه استفاده از گذرگاه SPI را بدهد.
SPI.endTransaction()

 

  • ;()setBitOrder
ترتیب بیت های تغییر یافته از داخل و در گذرگاه SPI را تنظیم می کند. از این عملکرد نباید در پروژه های جدید استفاده شود. برای پیکربندی پارامترهای SPI از SPISettings با SPI.beginTransaction استفاده کنید.
SPI.setBitOrder(LSBFIRST or MSBFIRST)

 

  • ;()setClockDivider
میزان کلاک SPI را نسبت به کلاک سیستم تنظیم می کند. در برد های مبتنی بر AVR، تقسیم کننده های موجود ۲ ، ۴ ، ۸ ، ۱۶ ، ۳۲ ، ۶۴ یا ۱۲۸ است.
  • SPI_CLOCK_DIV2
  • SPI_CLOCK_DIV4
  • SPI_CLOCK_DIV8
  • SPI_CLOCK_DIV16
  • SPI_CLOCK_DIV32
  • SPI_CLOCK_DIV64
  • SPI_CLOCK_DIV128
SPI.setClockDivider(divider)

 

  • ;()setDataMode
حالت داده SPI را تنظیم می کند.
  • SPI_MODE0
  • SPI_MODE1
  • SPI_MODE2
  • SPI_MODE3
SPI.setDataMode(mode)

 

  • ;()transfer
انتقال SPI براساس ارسال و دریافت همزمان انجام می شود، داده های دریافت شده در receiveVal (یا recepal16) دریافت می شود.
receivedVal = SPI.transfer(val)

 

  • ;()usingInterrupt
اگر برنامه شما در یک وقفه تراکنش های SPI را انجام می دهد، از این تابع استفاده کنید تا شماره یا نام وقفه را در کتابخانه SPI ثبت کنید.
SPI.usingInterrupt(interruptNumber)

 


نکاتی درباره SPI


به طور کلی، چهار حالت انتقال وجود دارد. این حالت ها کنترل می کنند که آیا داده ها بر روی لبه بالا یا پایین آمدن سیگنال کلاک داده (به نام فاز کلاک) به داخل و خارج منتقل می شوند، و یا اینکه آیا کلاک در حالت کم یا زیاد است (قطب ساعت نامیده می شود). چهار حالت مطابق با این جدول قطب و فاز را ترکیب می کنند.

حالت Clock Polarity (CPOL) Clock Phase (CPHA) Output Edge Data Capture
SPI_MODE0 ۰ ۰ Falling Rising
SPI_MODE1 ۰ ۱ Rising Falling
SPI_MODE2 ۱ ۰ Rising Falling
SPI_MODE3 ۱ ۱ Falling Rising

 


جمع بندی


در کلام آخر باید این مورد را ذکر کنم که این پروتکل ارتباطی از موارد محبوب در امبدد است و کتابخانه های این چنینی به ما در راه‌اندازی این پروتکل بسیار کمک می‌کنند. بسیاری از ماژول ها، سنسور ها از این پروتکل پشتیبانی می‌کنند، برای مثال نمایشگر های Oled. این پروتکل همواره هم پای رقبای خود پیش آمده و مزایای خود را دارد.

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

CiferTech

تبادل نظر و رفع عیب با ثبت دیدگاه