فرستنده و گیرنده سریال غیر همزمان جهانی

**فرستنده و گیرنده سریال غیر همزمان جهانی** یا **UART** که  است. انتقال اطلاعات را می‌توان به دو روش کلی، انتقال به روش موازی و انتقال به روش سریال، تقسیم‌بندی نمود. در روش انتقال موازی چند بیت اطلاعات به وسیله چند خط انتقال می‌یابد و در روش انتقال سریال در هر لحظه فقط یک بیت ارسال می‌شود. در مقایسه بین این دو روش می‌توان گفت که در روش انتقال موازی به علت انتقال چند بیت اطلاعات در یک لحظه، سرعت آن نسبت به سریال که در یک لحظه فقط یک بیت را انتقال می‌دهد بیشتر است. همچنین برای فواصل طولانی بکار بردن روش انتقال موازی به علت ازدیاد سیم‌های ارتباطی، دارای هزینه بالا می‌باشد؛ بنابراین در فواصل طولانی انتقال به روش سریال مناسب تر است.

## استاندارد
تبدیل خروجی UART به یک سیگنال فیزیکی در سمت فرستنده و برعکس، با یک مدار جداگانه و با توجه به نوع استاندارد ارتباطی مورد نظر برای انتقال(RS422 ،RS485 ،RS232 و …) انجام می‌شود. هر یک از این استانداردها روش متفاوتی برای تولید سیگنال خروجی ارائه می‌کنند که با سطح ولتاژ TTL ریزکنترلرگرها و مدارات دیجیتالی نیز فرق می‌کند.

## تفاوت USART و UART
بندانگشتی|چپ|300px|(شکل ۱)تفاوت USART و UART
ارتباطات سریال به دو دسته همزمان (Synchronous) و غیر همزمان (Asynchronous) تقسیم می‌شود. تولید سیگنال خروجی جهت ارسال هم به وسیلهٔ یکی از واحدهای UART و USART انجام می‌شود. USART  به معنی واحد ارسال یا دریافت کننده همزمان و غیرهمزمان است. UART نیز  و به معنی ارسال و دریافت غیر همزمان است. همان‌طور که از اسم این دو پیداست USART که هر دو نوع همزمان و غیر همزمان را شامل می‌شود در واقع نسخه کامل تری از UART است که ارتباط همزمان را هم پشتیبانی می‌کند.

نوع همزمان ارتباط سریال، اطلاعات را به صورت همزمان با یک سیگنال کلاک منتقل می‌کند. فرستنده در این حالت سیگنال کلاک را جهت دریافت سمت گیرنده تولید می‌کند. این نوع ارتباط سرعت بالاتری (حدود ۴Mbp/s) نسبت به حالت غیر همزمان دارد با این حال به خاطر سیم کشی بیشتر و مدارات پیچیده تری که مورد نیاز است در عمل از ارتباط غیر همزمان استفاده می‌شود.

## ارتباط بین فرستنده و گیرنده در روش انتقال سریال
اول از همه باید گفت که در حالتی که هیچ ارسال و دریافتی انجام نمی‌شود یا اصطلاحاً خط انتقال در حالت بیکار (Idle) قرار دارد، سطح ولتاژ مربوط به یک منطقی بر روی خط ارسال قرار می‌گیرد. تغییر وضعیت از یک به صفر منطقی به معنی شروع ارسال است و گیرنده آماده دریافت اطلاعات می‌شود. این صفر شدن به مدت یک بیت باید طول بکشد و به آن "**بیت شروع**" گفته می‌شود. بعد از آن یک بایت داده به ترتیب از بیت کم ارزش (LSB) به بیت پرارزش (MSB)ارسال می‌شود. در نهایت یک بیت برای آزمایش شدن درستی داده ارسال شده، روی خط ارسال قرار می‌گیرد که بیت "**[[بیت توازن]]**" نام دارد.

"**بیت توازن**" در واقع XOR تک تک بیت‌های داده‌است که اگر تعداد ۱های داده فرد باشد این مقدار ۱ و در غیر اینصورت صفر خواهد بود. گیرنده با دریافت داده، یک بار دیگر این XOR را محاسبه می‌کند و اگر با مقدار "**بیت توازن**" دریافت شده متفاوت باشد، متوجه خطای آن شده و آن بسته را کلا نادیده می‌گیرد. این بیت را با اسم **Parity Bit** هم می‌شناسیم.

در نهایت، خط ارسال به حالت Idle خود که همان ۱ شدن خروجی بود بازمی‌گردد که stop bit نامیده می‌شود. پس همان‌طور که مشخص است هر بسته ارسالی ۱۱ بیتی است که ۸ بیت (یک بایت) داده را منتقل می‌کند.

به‌طور کلی سه روش برای ارتباط بین فرستنده و گیرنده قابل بررسی می‌باشد:

۱- **روش یک طرفه یا ساده**
در این روش، اطلاعات فقط در یک جهت انتقال می‌یابند. مانند ارسال داده به چاپگر، که رایانه تنها می‌تواند داده بفرستد.

۲- **روش نیم دو طرفه**
در این روش، اطلاعات می‌تواند در دو جهت انتقال یابد. اما در هر لحظه فقط یک جهت امکانپذیر است. از این روش انتقال، در برخی از ریزکنترلگرها مانند خانواده ۸۰۵۱ استفاده شده‌است.

۳- **روش دو طرفه**
در این روش اطلاعات در یک لحظه در هر دو جهت انتقال می‌یابد. از این روش انتقال در ریزکنترلگرهای AVR, ARM, STM32، LPC و … استفاده می شود.

## روش‌های مختلف ارسال سریال
دو روش کلی برای انتقال سریال وجود دارد که عبارتند از:

۱- **انتقال سریال به روش سنکرون یا همزمان** در این روش، انتقال اطلاعات بین دو سیستم، به ازای هر پالس ساعت، یک بیت ارسال می‌شود. به طوری که فرستنده همزمان با ارسال اطلاعات، پالس ساعت را نیز ارسال می‌کند و گیرنده به کمک پالس ساعت که از فرستنده ارسال شده، خود را تنظیم و همزمان می‌کند تا از روی خط داده، اطلاعات را به درستی بردارد. (در شکل ۱) نمونه برداری در لبه بالارونده صورت می‌پذیرد و با هر لبه بالارونده پالس ساعت یک نمونه برداشته می‌شود. به کمک یک شیفت رجیستر SIPO براحتی این داده‌ها به داده‌های موازی تبدیل می‌شوند. این نوع ارتباط سریال به دلیل اینکه دارای پالس‌های همزمانی می‌باشد در سرعت‌های بالا قابل استفاده است.

**الف) ارتباط سریال سنکرون یا همزمان Master** در این حالت پالس‌های همزمانی توسط خود ریزکنترلگر (روی پایه XCK) تولید و به عنوان پالس ساعت از تراشه (فرستنده) به گیرنده همراه و همزمان با اطلاعات فرستاده می‌شود تا گیرنده به وسیله آن خودش را تنظیم کند.

**ب) ارتباط سریال سنکرون یا همزمان Slave** در این حالت ریزکنترلگر نقش گیرنده را بر عهده دارد و پالس‌های همزمانی که از فرستنده ارسال شده‌است، از طریق پایه XCK دریافت می‌شود.

۲- **انتقال سریال به روش آسنکرون یا غیر همزمان** (در شکل ۲ و ۳) یک نمونه از ارسال سریال اطلاعات به روش آسنکرون را نشان می‌دهد. در این روش، یک کاراکتر همراه با یک بیت توازن، بیت پایانی و بیت شروع جمعاً به تعداد ۱۰ بیت فرستاده می‌شود. لازم است ذکر شود که تمام بیت‌های حاوی اطلاعات مفید نیستند. در حقیقت فقط ۸ بیت حاوی این اطلاعات می‌باشند. بیت توازن نشان می‌دهد که آیا اطلاعات به‌طور صحیح دریافت شده یا خیر. بیت‌های شروع و پایان بجای سیگنال ساعت که به همراه اطلاعات ارسال نمی‌شوند، بکار گرفته می‌شوند. در عوض، فرض می‌شود که اطلاعات با فرکانسی در محدوده، ۱۰٪ فرکانس از پیش تعریف شده ارسال می‌شود.
300px|بندانگشتی|(شکل ۲) ارسال در روش غیر همزمان

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

برای این کار از رشته اطلاعات نمونه برداری شده تا یک منطق صفر بدست آید، بعد از آن نیمی از زمان یک بیت سپری شده تا مجدداً از آن نمونه برداری گردد. بعد از نمونه برداری در وسط بیت شروع، بترتیب ۹ بار دیگر به فواصل زمانی یک بیت از اطلاعات نمونه برداری می‌شود. اطلاعات نمونه برداری شده در یک ثبات انتقالی جمع شده تا به صورت یک بایت اطلاعات موازی درآید. سپس با بررسی بیت توازن، بررسی خطاها و بیت پایانی آزمایش می‌گردد. اگر بیت پایانی موجود باشد، اطلاعات قابل قبول است و در غیر این صورت یک خطای قالب بندی نشان داده خواهد شد. خطای قالب بندی معمولاً در صورتی اتفاق می‌افتد که اطلاعات با نرخ انتقال (Baud Rate) اشتباه دریافت گردد؛ که در شرایط عادی نباید بیفتد.

## عملکرد
دستگاه ارسال کننده UART داده‌ها را از گذرگاه داده (data bus) دریافت می‌کند. گذرگاه داده برای ارسال داده‌ها به UART توسط قطعاتی مانند CPU، حافظه یا ریزکنترلگر استفاده می‌شود. داده‌ها به صورت موازی از گذرگاه داده به UART فرستاده شده، دستگاه ارسال کننده با اضافه کردن بیت‌های شروع، توازن و پایان یک بسته داده ایجاد می‌کند. در ادامه این بسته به صورت سریال و بیت به بیت از طریق پایه TX ارسال می‌شود. دستگاه دریافت کننده داده‌های سریال را از طریق پایه RX دریافت و به حالت موازی تبدیل کرده و بیت‌های شروع، تعادل و پایان را حذف می‌کند. در انتها این داده‌ها به گذرگاه داده در دستگاه دریافت کننده فرستاده می‌شوند.

## نرخ انتقال
نرخ انتقال‌های که به صورت قراردادی بین فرستنده و گیرنده در یک ارتباط سریال، مشخص می‌شود مقادیر خاصی می‌توانند داشته باشند که مقدارهای ۴۸۰۰، ۱۹۲۰۰ ،۹۶۰۰، ۳۸۴۰۰، ۵۷۶۰۰، ۱۱۵۲۰۰ (بیت بر ثانیه) از معمول‌ترین این مقادیر اند. مثلاً نرخ انتقال ۹۶۰۰ به این معنی است که در هر ثانیه ۹۶۰۰ بیت منتقل می‌شود. پس هر بیت در فاصلهٔ زمانی ۱۰۴٫۱۶۶ میکروثانیه باید منتقل شود و در تمام این مدت مقدار خود را حفظ کند تا گیرنده نمونه برداری مناسبی انجام دهد.

## مزایا و معایب روش UART
عدم وجود پروتکل ارتباطی جالب به نظر می‌رسد ولی UART با توجه به نحوه عملکردش بسیار مناسب و کاربردی است.

**۱- مزایا:**
* استفاده از فقط دو سیم
* ضرورتی به استفاده از سیگنال کلاک وجود ندارد (پایه XCK)
* وجود بیت توازن برای بررسی خطا
* ساختار بسته‌های داده با توجه به تنظیمات دو سمت قابل تغییر است
در اختیار بودن مستندات و اطلاعات مفید و روش‌های گسترده استفاده

**۲- معایب:**
* اندازه داده‌های ارسالی حداکثر به ۹ بیت محدود شده
* عدم پشتیبانی از چند master (کنترل‌کننده) و چند slave (کنترل‌شونده)
* میزان نرخ انتقال دو سمت حداکثر می‌توانند ۱۰٪ با یکدیگر اختلاف داشته باشند.

## پیوند به بیرون

## منابع

رده:انتقال داده