UART چیست؟ – ارتباط سریال
UART یک ارتباط سریال آسنکرون و full duplex است که میتواند دادهها را به صورت سریال بین دو سخت افزار انتقال دهد. اگر میخواهید بدانید UART چیست، چگونه کار میکند، چه مزایا و معایبی دارد و کاربرد آن کجاست در ادامه این مقاله با ما همراه باشید.
UART چیست؟
UART یا همان (Universal Asynchronous Receiver Transmitter) یک ارتباط سریال آسنکرون با توانایی انتقال full duplex است که میتواند دادهها را به صورت سریال بین دو سخت افزار انتقال دهد.
ارتباط سریال و موازی
یک ارتباط سریال ارتباطی است که دادهها را به صورت بیت به بیت و یکی پس از دیگری منتقل میکند. در مقابل ارتباط سریال، ارتباط موازی قرار دارد که دادهها را به صورت موازی (چندین بیت با هم و در چند مسیر) انتقال میدهد.
ارتباط سنکرون و آسنکرون
یک ارتباط آسنکرون ارتباطی است که از سیگنال کلاک برای انتقال دادهها استفاده نمیکند. در مقابل ارتباط آسنکرون، ارتباط سنکرون قرار دارد که برای انتقال دادهها نیازمند مسیر کلاک است. در ارتباط سنکرون فرستنده و گیرنده اطلاعات بر اساس سیگنال کلاک ارسال و دریافت بیتها را تنظیم میکنند به این معنی که فرستنده در لبههای بالارونده (یا پایین رونده) کلاک اقدام به قرار دادن دیتا روی مسیر میکند و گیرنده هم در لبه بالارونده (یا پایین رونده) کلاک اقدام به دریافت دادهها میکند.
در ارتباط آسنکرون، فرستنده و گیرنده باید بر اساس کلاک داخلی خودشان عمل کنند و هردو روی یک نرخ ارسال و دریافت یکسان تنظیم شده باشند. ارتباط صحیح در این نوع، مستلزم دارا بودن دقت کافی در کلاک داخلی دو سخت افزار است. به عبارت دیگر، دقت کلاکهای داخلی دو سختافزار فرستنده و گیرنده تعیین کننده حداکثر سرعت قابل دستیابی در ارتباط آسنکرون است.
ارتباط Full Duplex و Half Duplex
در ارتباط Full Duplex میتوان در هر لحظه از زمان هم ارسال داده و هم دریافت داده را انجام داد. در مقابل ارتباط Full Duplex ارتباط Half Duplex وجود دارد که در آن در هرلحظه از زمان فقط میتوان یا ارسال داده داشت یا دریافت داده و امکان هردو در یک لحظه وجود ندارد.
اصطلاحات UART
هنگام کار با UART با اصطلاحاتی مواجه خواهید شد که اگر ندانید مفهوم آنها در UART چیست، درک عمکرد UART برایتان دشوار خواهد بود. این اصطلاحات عبارتند از RX، TX، Baud Rate، Start Bit، Stop Bit، Data Size، Parity
RX و TX
مسیر ارسال و دریافت داده در UART مجزا است. پایهای از سختافزار که به بخش ارسال داده واحد UART متصل است TX نامیده میشود و پایهای از سختافزار که به بخش دریافت داده واحد UART متصل است پایه RX نامیده میشود. بنابراین هنگامی که دو سختافزار بخواهند از طریق UART تبادل داده کنند باید TX یکی به RX دیگری متصل شود. البته برای همپتانسیل بودن دو سختافزار یک مسیر GND نیز نیاز است (مگر آنکه GND از طریق دیگری متصل شده باشد مانند تغذیه)
Baud Rate
شاید این اصطلاح را قبلا شنیده باشید، در اینجا خواهیم گفت معنی Baud Rate در UART چیست. ارتباط UART آسنکرون است بنابراین دو طرف باید روی یک نرخ ارسال و دریافت یکسان تنظیم شوند. این نرخ ارسال و دریافت Baud Rate نامیده میشود. به عنوان مثال نرخ ارسال 9600 به این معنی است که دادهها با سرعت 9600 بیت در ثانیه ارسال و دریافت شوند. برای Baud Rate اعداد استانداردی مانند 2400، 4800، 9600، 19200، 38400، 115200 وجود دارد که 9600 و 115200 متداولترین آنها است. در ادامه تصویری از Baud Rate های معمول آورده شده است.
از آنجا که کامپیوترها هم ارتباط سریال را پشتیبانی میکنند هنگام ارتباط سخت افزار با کامپیوتر باید یکی از Baud Rate های استاندارد تعریف شده در کامپیوتر برای دو طرف ست شود. اما در ارتباط دو میکروکنترلر میتوان Baud Rate های با نرخ دلخواه و در حد چند مگا بیت بر ثانیه (بسته به میکروکنترلر استفاده شده) تعریف کرد.
Start Bit
در حالت idle (حالتی که هیچ انتقال دیتایی در حال انجام نیست) سیگنال در سطح high است. برای آنکه شروع یک انتقال اطلاعات در سمت گیرنده تشخیص داده شود فرستنده به اندازه یک بیت سطح سیگنال را در حالت low میبرد. این بیت را Start Bit گویند و بیتهای بعد از آن دیتا هستند.
Data Size
پس از Start Bit دیتاهایی که باید انتقال داده شوند قرار دارند. میتوان در تنظیمات UART مشخص کرد که در این بخش چند بیت داده قرار میگیرد. این عدد میتواند بین 5 تا 9 بیت (9 بیت به شرطی است که از امکان Parity استفاده نشود و همچنین فقط برخی از میکروکنترلرها این امکان پشتیبانی میکنند )باشد اما معمولا 8 بیت است. توجه داشته باشید این تنظیم باید برای هردو طرف یکسان ست شود.
Parity
بیت Parity امکان استفاده از یک مکانیزم تشخیص خطا را فراهم میآورد تا اگر دادهها در طول مسیر دچار خرابی شدهاند تشخیص داده شود. مواردی مانند نویز، طول مسیر زیاد، عدم تطابق Baud Rate و … میتوانند باعث انتقال اشتباه دادهها شوند. Parity میتواند در حالت none، even، odd کانفیگ شود. این تنظیم باید برای هردو طرف یکسان ست شود.
- – none: از امکان Parity استفاده نمیشود.
- – even (زوج) : اگر تعداد بیتهای دارای مقدار 1 در داده زوج باشد بیت Parity یک میشود و در غیر این صورت 0 است.
- – odd (فرد) : اگر تعداد بیتهای دارای مقدار 1 در داده فرد باشد بیت Parity یک میشود و در غیر این صورت 0 است.
Stop Bit
برای تشخیص انتهای پکت از Stop Bit استفاده میشود که شامل 1 یا 2 بیت در حالت high است. اینکه تعداد Stop Bit یک عدد باشد یا دو عدد در اتظیمات UART قابل انتخاب است و باید برای هردو طرف یکسان ست شود. پس از Stop Bit مسیر مجددا به حالت idle میرود (در حالت high باقی میماند) یا اینکه انتقال پکت بعدی را شروع میکند.
Packet
به مجموعه بیتهایی که در هر انتقال (شامل Start Bit تا Stop Bit) ارسال میشوند یک پکت گفته میشود. از نظر دیاگرام میتوانید آن را به شکل زیر تصور کنید
از نظر سیگنالی پکت به شکل زیر است:
دقت داشته باشید که اولین بیت داده که پس از start bit ارسال میشود LSB (بیت کم ارزش) است.
ویژگیهای UART چیست؟
ویژگیهای شاخص ارتباط سریال UART به شرح زیر است:
- – UART به علت ماهیت سریال و آسنکرون تنها نیاز به دو سیم (با فرض هم گراند بودن دو طرف) برای برقراری کانال ارتباطی بین دو طرف دارد.
- – نیاز به تولید و انتقال سیگنال Clock وجود ندارد.
- – از ارتباط Full Duplex پشتیبانی میکند.
- – بسیاری از کامپیوترها از ارتباط سریال (پورت COM) پشتیبانی میکنند و در کامپیوترهایی که به صورت سخت افزاری پورت COM ندارند از طریق مبدلهای ارزانقیمت و متنوع USB2Serial این امکان فراهم است.
- – ماهیت پیچیدهای ندارد و پیادهسازی سخت افزاری و نرمافزاری آن ساده است.
- سازگاری بالایی با مبدلهای RS485 دارد و با استفاده از مبدلها میتوان داده را تا 1000 متر انتقال داد.
- – در مقایسه با سایر ارتباطهای سریال (مانند Ethernet، USB، SPI، I2S) سرعت پایینی دارد.
- – سربار نسبتا بالایی دارد. به این معنی که در بهترین حالت نیاز به یک بیت Start و یک بیت Stop برای انتقال 9 بیت داده دارد. به عبارت دیگر از هر 11 بیت که انتقال میدهد تنها 9 بیت داده است و دو بیت سربار دارد که حدود 18% از پهنای باند آن را اشغال کرده است. در مقایسه با ارتباط سریالی مانند Ethernet که در هر 1518 بایت نیاز به 18 بایت سربار دارد (معادل 1.2%) برای ارتباطی که به خودی خود سرعت بالایی نیز ندارد عیب بزرگی محسوب میشود. بماند که در این حالت Parity را نیز فدای انتقال داده کردهایم و هیچگونه فرایند بررسی خطا نداریم.
- – از سیستم Multi Master و Multi Slave پشتیبانی نمیکند. در واقع همواره دو Device وجود دارد.
کاربردهای UART
با توجه به ویژگیهای UART که در بخش قبل مطرح شد میتوان تا حدی کاربردهای آن را حدس زد. در ادامه به برخی از موارد اشاره شده است.
ارتباط میکروکنترلر با کامپیوتر
تا چند سال پیش پورت سریال (RS232) یکی از اجزای جدا نشدنی کامپیوترها بود. امروزه نیز برخی از کامپیوترها مجهز به پورت سریال هستند. در کامپیوترهایی هم که پورت سریال ندارند با استفاده از یک مبدل ارزان قیمت USB به سریال این امکان فراهم است. معروفترین آیسیهای USB به سریال عبارتند از
- – FT232
- – CH340
- – CP2102
- – PL2303
البته با توجه به تفاوت سطح ولتاژ پورت سریال کامپیوتر با واحد UART، نمیتوان به صورت مستقیم این اتصال را ایجاد کرد و نیاز به یک ایسی واسط میباشد. معروفترین آیسیها در این زمینه عبارتند از
- – MAX3232
- – MAX232
- – MAX233
ارتباط بین دو میکروکنترلر
در مواردی که نیاز است دو میکروکنترلر با یکدیگر تبادل داده کنند باید هردو از یک ارتباط مشترک پشتیبانی کنند. ارتباط موازی به علت نیاز به تعداد پایههای بالا (و محدودیت پایه در اکثر میکروکنترلرها) مقبولیت چندانی ندارد. در میان انواع ارتباط سریال، ارتباط UART دارای هزینه پیادهسازی پایینی است و به همین علت تقریبا تمام میکروکنترلرها از ارزانترین تا گرانترین و از کوچکترین تا بزرگترینشان از این ارتباط پشتیبانی میکنند.
ارتباط میکروکنترلر با ماژولهای الکترونیکی
ارزان بودن پیادهسازی سختافزار UART باعث شده بسیاری از ماژولهای الکترونیکی که برای انتقال اطلاعات نیاز به سرعت بالایی ندارند، برای ارتباط با دنیای خارج از آن استفاده کنند. معروفترین این ماژولها عبارتند از
- – ماژولهای GPS
- – ماژولهای GSM
- – ماژولهای RFID
- – ماژولهای Compass
- – ماژولهای بلوتوث
- – ماژولهای WIFI
در حاشیه
UART قدمت زیادی دارد و در زمانی توسعه داده شده است که هنوز ادوات الکترومکانیکی کاربرد فراوانی داشتهاند. کاربرد اولیه آن نیز برقراری ارتباط با همین ادوات از جمله موتورها بوده است. با توجه به ماهیت کند ادوات الکترومکانیک Baud Rate در رنج 300 بیت در ثانیه ست میشده که برای آنها فراتر از کافی بوده است.
همچنین فلسفه قرار دادن start bit فرصت دادن به ادواتی مانند موتور برای راهاندازی و فلسفه stop bit نیز فرصت دادن به آنها برای ریست شدن بوده است. با اینکه امروزه رسالت UART برقراری این ارتباط نیست اما در کنار بالارفتن مقدار Baud Rate در حد چند مگا بیت در ثانیه همچنان ساختار خود را حفظ کرده است.
معمولترین کانفیگ برای UART، مقدار 9600 برای Baud Rate، مقدار 8 برای Data Size، مقدار none برای Parity و مقدار 1 برای Stop Bit است که ممکن است به صورت اختصاری 96008n1 در داکیومنتها آورده شده باشد. اگر در کار با یک سختافزار نتوانستید کانفیگ صحیح را در داکیومنتهای آن بیابید توصیه میکنیم این کانفیگ و یا 1152008n1 را امتحان کنید.
با استفاده از یک Logic Analyzer که دیکد کردن ارتباط سریال را پشتیبانی کند میتوانید ارتباط سریال بین دو سختافزار را مانیتور کنید و اطلاعات با ارزشی از جمله کانفیگ ارتباط توسط Logic Analyzer در اختیار شما قرار داده میشود.
سخت افزار UART علاوه بر پایههای TX و RX پایههای دیگری نیز دارد که نقش کنترلی دارند (مانند RTS و CTS) و در دوران ابتدایی حضور UART کاربرد داشته اند. امروزه به طور معمول با آنها برخورد نمیکنید و نیاز به استفاده از آنها نخواهید داشت.
در پایان
در این مقاله در مورد این که UART چیست، چگونه عمل میکند، مزایا و معایب UART چیست و محل کاربرد آن کجاست صحبت کردیم. اگر کنجکاو هستید اطلاعات بیشتری داشته باشید به میتوانید به منابعی مانند UART-wikipedia مراجعه کنید. بسیار خوشحال خواهیم شد اگر نظرات خود راجع به این مقاله و یا تجربیاتتان در کار با UART را در بخش نظرات این مقاله با ما و دیگر دوستانتان به اشتراک بگذارید.
همچنین اگر علاقهمند به آشنایی با دیگر درگاههای سریال هستید میتوانید به مقالات SPI چیست؟ و I2C چیست؟ مراجعه کنید.
دیدگاهتان را بنویسید