UART که مخفف عبارت Universal Asynchronous Receiver/Transmitter (فرستنده/گیرنده ناهمگام جهانی) است، یک پروتکل ارتباط سریال بسیار پرکاربرد و یکی از قدیمی‌ترین و ساده‌ترین روش‌ها برای تبادل داده بین دو دستگاه است. این پروتکل به دستگاه‌ها اجازه می‌دهد تا بدون نیاز به یک سیگنال ساعت مشترک (همگام‌سازی)، داده‌ها را به صورت بیتی و پشت سر هم از طریق تنها دو سیم (یک سیم برای ارسال Tx و یک سیم برای دریافت Rx) با یکدیگر مبادله کنند.

تاریخچه و کاربرد

UART از گذشته تا به امروز، نقش مهمی در ارتباطات سیستم‌های تعبیه‌شده (Embedded Systems)، میکروکنترلرها، رایانه‌ها و انواع ماژول‌های الکترونیکی ایفا کرده است. به عنوان مثال، پورت‌های سریال RS-232 که زمانی برای اتصال موس، مودم و چاپگر به رایانه‌ها استفاده می‌شدند، بر پایه پروتکل UART کار می‌کردند. امروزه نیز در بسیاری از ارتباطات داخلی بین تراشه‌ها، دیباگ (Debug) کردن سیستم‌ها و اتصال به ماژول‌هایی مانند بلوتوث، وای‌فای یا GPS، از UART به طور گسترده‌ای استفاده می‌شود.

نحوه عملکرد پایه UART

عملکرد UART را می‌توان به دو بخش اصلی فرستنده (Transmitter) و گیرنده (Receiver) تقسیم کرد که هر دو باید بر سر پارامترهای ارتباطی مشخصی به توافق رسیده باشند:

  1. نرخ بیت (Baud Rate): سرعتی که داده‌ها ارسال یا دریافت می‌شوند (مثلاً 9600 بیت در ثانیه). این مهم‌ترین پارامتر همگام‌سازی است.
  2. بیت‌های داده (Data Bits): تعداد بیت‌هایی که هر بایت داده را تشکیل می‌دهند (معمولاً 5 تا 9 بیت).
  3. بیت توازن (Parity Bit - اختیاری): یک بیت اضافی که برای تشخیص خطاهای ساده در انتقال داده استفاده می‌شود. می‌تواند زوج (Even) یا فرد (Odd) باشد.
  4. بیت‌های توقف (Stop Bits): یک یا دو بیت که نشان‌دهنده پایان یک فریم داده است.

فرآیند ارسال (توسط فرستنده):

  • داده‌های موازی (معمولاً یک بایت 8 بیتی) از پردازنده یا حافظه دریافت می‌شود.
  • فرستنده ابتدا خط ارتباطی را از حالت بیکار (‘1’) به ‘0’ تغییر می‌دهد که به آن بیت شروع (Start Bit) می‌گویند. این بیت به گیرنده هشدار می‌دهد که داده‌ای در راه است.
  • سپس، بیت‌های داده را یک به یک و به ترتیب از کم‌ارزش‌ترین بیت (LSB) یا پرارزش‌ترین بیت (MSB) ارسال می‌کند.
  • در صورت استفاده از بیت توازن، این بیت نیز پس از بیت‌های داده ارسال می‌شود.
  • در نهایت، فرستنده خط را به حالت ‘1’ برمی‌گرداند و برای یک یا دو دوره زمانی، در این وضعیت نگه می‌دارد که به آن بیت‌های توقف (Stop Bits) می‌گویند. این بیت‌ها نشان‌دهنده پایان فریم داده هستند و به گیرنده زمان می‌دهند تا برای فریم بعدی آماده شود.

فرآیند دریافت (توسط گیرنده):

  • گیرنده خط ارتباطی را به طور مداوم تحت نظر دارد.
  • هنگامی که خط از ‘1’ به ‘0’ تغییر می‌کند (تشخیص بیت شروع)، گیرنده متوجه آغاز یک فریم داده می‌شود.
  • با استفاده از نرخ بیت از پیش تعیین شده و یک ساعت داخلی، گیرنده شروع به نمونه‌برداری از خط در مرکز هر بازه زمانی بیت می‌کند تا بیت‌های داده را به درستی تشخیص دهد.
  • بیت‌های نمونه‌برداری شده در یک شیفت رجیستر جمع‌آوری می‌شوند.
  • پس از دریافت تمام بیت‌های داده (و بیت توازن، در صورت وجود) و بیت‌های توقف، شیفت رجیستر محتوای کامل بایت داده را به صورت موازی برای پردازش بیشتر آماده می‌کند.
  • گیرنده همچنین مسئول بررسی بیت توازن (در صورت فعال بودن) و همچنین تشخیص بیت‌های توقف برای اطمینان از سلامت ارتباط است.

مزایا و معایب UART

مزایا:

  • سادگی: تنها به دو سیم برای ارتباط نیاز دارد و پیاده‌سازی آن نسبتاً آسان است.
  • پشتیبانی گسترده: تقریباً تمام میکروکنترلرها و بسیاری از تراشه‌ها دارای ماژول UART داخلی هستند.
  • بدون نیاز به ساعت خارجی: عدم نیاز به ارسال سیگنال ساعت، پیچیدگی و تعداد سیم‌ها را کاهش می‌دهد.
  • انعطاف‌پذیری در پارامترها: نرخ بیت، تعداد بیت داده و بیت توقف قابل تنظیم هستند.

معایب:

  • عدم وجود ساعت مشترک: این ویژگی اصلی، می‌تواند منجر به چالش‌هایی در همگام‌سازی شود، به خصوص اگر اختلاف زیادی در ساعت‌های دو دستگاه وجود داشته باشد. برای رفع این مشکل، از تکنیک‌هایی مانند “نمونه‌برداری چندگانه” در گیرنده استفاده می‌شود.
  • عدم پشتیبانی از ارتباط چندگانه (Multi-drop): UART تنها برای ارتباط دو دستگاه (نقطه به نقطه) طراحی شده است.
  • سرعت محدود: در مقایسه با پروتکل‌های سریالی مانند SPI یا I2C، سرعت UART معمولاً پایین‌تر است، به خصوص در مسافت‌های طولانی.
  • بدون قابلیت آدرس‌دهی (Addressing): نمی‌توان به دستگاه‌های مختلف روی یک خط UART آدرس داد.

با وجود این محدودیت‌ها، سادگی و کارایی UART آن را به یک ابزار ضروری در بسیاری از پروژه‌های الکترونیکی و سیستم‌های تعبیه‌شده تبدیل کرده است. در بخش‌های بعدی به نحوه طراحی دقیق‌تر یک گیرنده UART بر روی FPGA خواهیم پرداخت.

کلیدواژه ها : UART-Universal Asynchronous Receiver/Transmitter-پروتکل سریال-ارتباط ناهمگام-Baud Rate-بیت شروع-Start Bit-بیت توقف-Stop Bit-بیت داده-Data Bit-بیت توازن-Parity Bit-فرستنده-Transmitter-گیرنده-Receiver-سیستم تعبیه‌شده-Embedded Systems-RS-232-FPGA-Digital Communication-Serial Port