در حال حاضر UART, I2C و SPI پرکاربردترین رابطهای سختافزاری هستند که در میکروکنترلرها بکار گرفته میشوند.
در این نوشتار رابطهای مختلف با هم مقایسه شده و از نظر عوامل مختلفی نظیر پروتکلها و مزایا و معایب هرکدام مورد بررسی قرار گرفته اند. همچنین مثالهایی از کاربردهای مختلف این رابطها در میکروکنترلرها و بخصوص آردوینو آورده شده است.
پایه (پین) های UART، SPI و I2C در آردوینو
شاید قبل از شروع به بررسی این موارد این سوال پیش بیاید که این امکانات ارتباطی در کدام قسمت آردوینو قرار گرفتهاند. محل قرار گیری این پایهها در چند بورد بصورت زیر است:
Arduino Uno REV3
![Arduino Uno Coms](https://wiki.redronic.com/wp-content/uploads/2020/05/1-UNO-Com2-1.png)
بورد آردوینو UNO Rev 3 یک بورد میکروکنترلر براساس ATmega328 است که یک میکروکنترلر 8-بیتی با 32کیلوبایت حافظه فلش و 2کیلوبایت حافظه RAM میباشد.
این بورد دارای 14 پین دیجیتال ورودی/خروجی (که 6 عدد از آنها را میتوان به عنوان خروجی PWM استفاده نمود،) است. همچنین 6 ورودی آنالوگ، یک نوسانگر کریستال 16 مگاهرتزی، یک درگاه ارتباط USB، یک جک تغذیه، یک مجموعه پین ICSP جهت برنامهریزی مستقیم، یک تبدیل UART به USB و یک دکمه ریست است.
رابط UART
UART مخفف Universal Asynchronous Reception and Transmission به معنی «ارسال و دریافت ناهمگام همهکاره» است.
- یک پروتکل ارتباط موازی (Serial) است که اجازه ارتباط دستگاه میزبان با دستگاههای جانبی را فراهم میکند.
- از ارسال داده دوسویه، ناهمگام و موازی پشتیبانی میکند.
- از دو خط داده تشکیل شده که یکی برای ارسال (TX) و دیگری برای دریافت (RX) استفاده میشود. این پایهها معمولا به پین دیجیتال 0 و دیجیتال 1 آردوینو وصل میشوند.
- TX و RX به صورت ضربدری بین دو دستگاه متصل میشوند.
- همچنین این ارتباط میتواند مشکلات مدیریت همگام بودن دو دستگاه را مرتفع کند.
مزایا:
استفاده از این رابط بسیار آسان است و مستندات بسیاری را میتوان در سراسر اینترنت برای استفاده از آن پیدا کرد. این رابط توسط کاربران بسیاری در پروژههای گوناگون بکار گرفته شده است.
برای راهاندازی نیاز به هماهنگی (Clock) ندارد.
ارتباط بصورت همزمان و دو طرفه برقرار است.
معایب:
برای جلوگیری از، خراب شدن دادهها باید نرخ ارسال و دریافت (BaudRate) دو دستگاه نباید بیش از 10 درصد اختلاف داشته باشند.
نمیتوان بصورت همزمان از یک دستگاه بصورت Master تعداد زیادی دستگاه بصورت Slave استفاده کرد.
I2C در آردوینو
- I2C مخفف (Inter-Integrated-Circuit) به معنی ارتباط بین مدارات مجتمع، یک ارتباط سریال است که برای میکروکنترلرها طراحی شده است.
- این روش ارتباطی بسیار مشابه UART است، با این تفاوت که برای ارتباط بین رایانه و دستگاه استفاده نمیشود و برای ارتباط بین دستگاه و حسگرها و ماژولهای وابسته طراحی شده و بکار گرفته میشود.
- یک ارتباط ساده، دو سویه به روش سریال است که تنها از دو سیم (SDA و SCL) برای ارسال و دریافت اطلاعات بین دستگاههای متصل به آن استفاده میکند.
- I2C یک ارتباط مناسب در پروژههایی است که به تعداد زیادی حسگر و ماژول نیاز دارند. با استفاده از این روش ارتباطی، میتوان تا 128 دستگاه را بصورت همزمان به آردوینو متصل نمود و ارتباط لازم بین Master (آردوینو) و Slaveها (سنسورها و ماژولها) را مدیریت کرد.
مزایا:
حتی با وجود تعداد بالای دستگاههای متصل به این خط، نسبت تعداد سیگنال به تعداد پایه استفاده شده بسیار پایین است.
این ارتباط بسیار منعطف است و میتواند از چند Master و چندین Slave پشتیبانی کند.
تنها از 2 سیم استفاده میکند و بسیار ساده است.
معایب:
نسبت به ارتباط SPI (مبحث بعدی) کندتر است و نیاز به استفاده از مقاومت pull-up دارد.
بدلیل استفاده از مقاومت به فضای طراحی بیشتری نیاز دارد.
با افزایش تعداد دستگاههای متصل به خط، ممکن است پیچیدهتر شود.
![I2C LCD LED](https://wiki.redronic.com/wp-content/uploads/2020/05/I2C-Driver-1.gif)
SPI در آردوینو
SPI مخفف (Serial Peripheral Inteface) به معنی رابط جانبی سریال، مشابه ارتباط I2C، نوع دیگری از ارتباط سریال است که بصورت ویژه برای ارتباط بین میکروکنترلرها طراحی شده است.
رابط SPI در حالت کاری Full-Duplex کار میکند و امکان ارسال و دریافت داده بصورت همزمان میسر است.
در مقایسه با UART و I2C، سریعترین درگاه ارتباطی سریال با نرخ ارتباطی 8 مگابیت بر ثانیه یا بیشتر است.
راز سرعت بیشتر SPI در پروتکل بسیار ساده آن است. خطوط داده(Data) و ساعت (Clock) بین دستگاهها مشترک است و هر دستگاه به یک سیم انتخاب مجزا نیاز دارد.
SPI در کاربردهایی مانند نوشتن و خواندن کارتهای حافظه، نمایشگرها و حسگرهایی که داده برداری با نرخ بالا که به سرعت زیادی نیاز دارند مورد استفاده قرار میگیرد.
با اینحال SPI تنها میتواند از یک Master و چهار Slave پشتیبانی کند.
مزایا:
پروتکل بسیار ساده است و مانند I2C به سیستم آدرس دهی Slave پیچیده نیاز ندارد.
در مقایسه با I2C و UART سریعترین روش ارتباطی است.
برخلاف UART نیازی به استفاده از بیت شروع و پایان نیست و میتوان بدون وقفه دادهها را انتقال داد.
معایب:
پایههای بیشتری را اشغال میکند و تعداد دستگاههای متصل عملا بسیار محدود است.(یک دستگاه Masterو چهار دستگاه Slave)
هیچ مکانیزم کنترل جریان دادهای برای آن پیشبینی نشده و برخلاف I2C امکان تایید دریافت داده (Acknowledgement) وجود ندارد.
از چهار خط استفاده میکند: MOSI, MISO, NCLK, NSS
برخلاف UART امکان کنترل خطا وجود ندارد.(Parity Bit ندارد)
امکان استفاده از چند Master وجود ندارد.