SPI و دستورات آن از مواری است که در قسمت به آن پرداخته می شود. همچنین یک پروژه را با هم انجام می دهیم تا بهتر با این دستورات آشنا شویم.
SPI (Serial Peripheral Interface) یک پروتکل همزمان برای ارتباط به صورت سریال است که معمولا بین میکروکنترلرها و لوازم جانبی کوچک مانند سنسور ها و کارتهای SD استفاده می شود. این روش برای مسافت های کوتاه کار آمد می باشد. در ارتباط SPI همیشه یک Master وجود دارد. این نوع ارتباط برای ارسال و دریافت اطلاعات هر کدام یک خط استفاده می کند.همچنین برای ساعت و انتخاب دستگاهی که می خواهد با آن تبادل داده کند نیز، هر کدام یک خط را استفاده می کند.
- MISO (Master In Slave Out) – خط ارسال داده از Slave به Master .
- MOSI (Master Out Slave In) – خط ارسال داده از Master به Slave ها.
- SCK (Serial Clock) – دستگاه Master روی این خط پالس ساعتی ایجاد می کند برای اینکه داده ها با نظم این پالس ها ارسال شوند.
- SS (Slave Select) – این پین رو هر دستگاهی که به عنوان Slave به کار گرفته شده است می باشد. Master از طریق این پین Slave مورد نظرش را فعال یا غیر فعال می کند.
وقتی که پین SS صفر شود، شروع به تبادل داده با Master می کند. ولی وقتی که یک شود، Master را نا دیده می گیرد. از این طریق است که می توان چندین Slave را با یک Master ارتباط داد.
چند نکته را باید در ارتباط از طریق SPI مد نظر داشت:
- سرعت انتقال داده چقدر باید باشد؟ آردوینو خود به طور اتوماتیک سرعت را تنظیم می کند. ما هر سرعتی را بدهیم آردوینو مساوی یا کمتر از آن سرعت را در نظر می گیرد.
- دومین چیزی که می توان تنظیم کرد این که بیتهای با ارزش(MSB) اول فرستاده بشوند یا کم ارزش(LSB). بیشتر دستگاه های دارای SPI اول بیت با ارزش را می فرستند.
- تنظیم هماهنگی ارسال داده با کلاک. در این تنظیم شما تعیین می کنید که با لبه ی پایین رونده داده ها ارسال شوند یا بالا رونده. در کل چهار روش داریم که در جدول زیر آمده است:
Mode | Clock Polarity (CPOL) | Clock Phase (CPHA) | Output Edge | Data Capture |
SPI_MODE0 | 0 | 0 | Falling | Rising |
SPI_MODE1 | 0 | 1 | Rising | Falling |
SPI_MODE2 | 1 | 0 | Rising | Falling |
SPI_MODE3 | 1 | 1 | Falling | Rising |
SPISetting
برای تنظیم این سه موردی که گفته شد از SPISetting استفاده می شود. این گزینه به این صورت مورد استفاده قرار می گیرد.
SPI.beginTransaction(SPISetting(14000000,MSBFIRST,SPI_MODE0))
یا
SPISetting mySetting(speedMaximum, dataOrder,dataMode)
که mySetting را می توان در دل SPI.beginTransaction استفاده کرد.
پین های مربوط به SPI در بردهای مختلف آردوینو:
Arduino / Genuino Board | MOSI | MISO | SCK | SS (slave) | SS (master) | Level |
Uno or Duemilanove | 11 or ICSP-4 | 12 or ICSP-1 | 13 or ICSP-3 | 10 | – | 5V |
Mega1280 or Mega2560 | 51 or ICSP-4 | 50 or ICSP-1 | 52 or ICSP-3 | 53 | – | 5V |
Leonardo | ICSP-4 | ICSP-1 | ICSP-3 | – | – | 5V |
Due | ICSP-4 | ICSP-1 | ICSP-3 | – | 4, 10, 52 | 3,3V |
Zero | ICSP-4 | ICSP-1 | ICSP-3 | – | – | 3,3V |
101 | 11 or ICSP-4 | 12 or ICSP-1 | 13 or ICSP-3 | 10 | 10 | 3,3V |
MKR1000 | 8 | 10 | 9 | – | – | 3,3V |
()SPI.begin
برای شروع کار در اول برنامه از این دستور استفاده می کنیم. تا پین های مربوط به SPI به وضعیت مورد نظر در بیایند.
()SPI.end
برای پایان دادن به ارتباط SPI از این دستور استفاده می شود.
()beginTransaction
برای اعمال تنظیمات ما از این دستور استفاده می شود.
()SPI.trasfer
این دستور هم برای ارسال و هم برای دریافت داده بکار می رود.
SPI.trasfer(Value)
برای ارسال به این شکل نوشته می شود.
Value=SPI.transfer(val)
برای دریافت به این شکل نوسته می شود. val شماره ی بایتی است که می خواهیم. اگر صفر بگذاریم یعنی اولین بایت را لازم داریم.
در ادامه می توانید فیلم آموزشی را مشاهده کنید:
دیدگاه ها :