UART Nedir ve Nasıl Çalışır?

Daha önce Seri Haberleşme Protokolleri (UART, SPI, I2C) yazımda küçük bir değinme ile bahsettiğim haberleşme protokollerine biraz daha detaylı olarak girmeye başlayacağımız serimizin ilk yazısı olan “UART Nedir (USART Nedir) ve Nasıl Çalışır?” yazısı ile karşınızdayım.

UART (Universal Asynchronous Receiver Transmitter), bilgisayar ve mikrokontroller veya mikrokontroller ve çevre birimler arasında haberleşmeyi sağlayan haberleşme protokolüdür. Asenkron olarak çalıştığı için herhangi bir “clock” ihtiyacı duymaz. USART (Universal Synchronous Asynchronous Receiver Transmitter) ise hem senkron hem de asenkron olarak çalışabilir. UART’a göre daha gelişmiş bir protokoldür. Haberleşme mantıklı aynı şekilde çalışır ancak USART aynı zamanda senkron haberleşmeleri de gerçekleştirebilir. Yeni çıkan bir mikroişlemcinin datasheet’ine baktığınız zaman bu birimleri genelde USART birimi olarak görüyoruz çünkü USART aynı zamanda UART’ı da kapsayan bir birim olarak tasarlanmıştır.

USART, 5 ve 9 bit arası data uzunluğuna sahip veriyi taşıma özelliğine sahiptir. Ancak genel olarak 8 veya 9 bitlik kullanımlar tercih edilir.

UART – USART Haberleşmesi

UART haberleşmesini gerçekleştirirken ilk olarak baudrate (veri taşıma hızı) ayarlanması gerekir. Veri taşıma hızı çok çeşitli aralıklarda olabilir ancak piyasada yaygın olarak kullanılan baudrate’ler 4800, 9600, 57600, 115200 ve mikroişlemciler için çok fazla tercih edilmese de 921600. (921600 genelde hızlı işlem gerektiren yerlerde kullanılır.) Baudrate bizim verimizin saniyede ne kadarlık byte’ını taşıyacağını belirlememize yarar. Örneğin veri taşıma hızımızı 115200 seçersek bu bizim için saniyede yaklaşık olarak 11520 byte veri iletimi sağlayacaktır.

Veri iletimi için aşağıdaki görseldeki gibi bir yapı kullanılır. Yani haberleşme işlemimiz bir başlangıç bitinden sonra data bitleri, ardından parity biti ve son olarak da bitiş biti gönderilerek sonlandırılır. Bu işlem sırasında data uzunluğu ve parity biti opsiyonel olarak değişkenlik gösterebilir.

Bu haberleşme tipini kullanabilmemiz için alıcı ve vericinin veri taşıma hızlarının (baudrate) aynı olması gerekiyor (veya birbirine çok yakın değerler olması gerekiyor.) Bunun sebebi ise aktarım sırasında oluşabilecek hataları minimuma indirmek. Hata payları tolere edilebilir seviyede olması taktirde bir sorun yaratmayacaktır (~%1-3)

Yukarıdaki görselde gördüğünüz gibi haberleşme gerçekleşmesi için ilk önce verici tarafında logic 1 (HIGH) seviyesinde bulunan iletişim hattı iletişimin başlaması için logic 0 (LOW) seviyesine çekilir ve bu bizim Başlangıç Bit’imizi (Start Bit) temsil eder. Ardından göndermek istediğimiz verileri başlangıç bitinin arkasına ekleriz. Eğer parity bitine sahipsek onu da ekledikten sonra son olarak iletişime sonlandırmak için gerekli olan bitiş bitini (stop bit) HIGH seviyesine çekerek iletişimin sonlandığını alıcıya bildiririz. Biz verici kısmında bu işlemleri yaparken alıcı da aynı şekilde işlem yapar ve sadece bizim gönderdiğimiz dataları kendi UART Data Register’ına yazar.

Nasıl Kullanabiliriz?

USART haberleşmesi yapabilmek için mikroişlemcimizdeki daha önceden tanımlanmış olan pinleri kullanarız. Bunun için ya USB-TTL dönüştürücü ya da RS232 modülü kullanırız. Her iki modülü de RX-TX pinleri mikroişlemcimizin RX-TX pinleri ile ters olarak bağlanacak şekilde bağlantısını yaptıktan sonra iletişimi başlatabiliriz. (Yani mikroişlemci TX —> Modül RX, mikroişlemci RX —> Modül TX). RS232 ile daha ayrıntılı bilgi için ilgili yazımı ( RS232 Nedir? ) inceleyebilirsiniz.

Kaynaklar:

http://enderunix.org/docs/hard_soft-uart.pdf

https://learn.sparkfun.com/tutorials/serial-communication/uarts

https://en.wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter

http s://www.slideshare.net/canezgiaydemir/uart-ve-seri-haberleme

http://www.mcu-turkey.com/wp-content/uploads/2012/11/maximsoftuartfig1.jpg

http://www.bb-elec.com/Images/whitepaper-images/DataByte.aspx

Seri Haberleşme Protokolleri (UART, SPI, I2C)

Seri haberleşme için geçerli, standartlaşmış bazı senkron ve asenkron protokoller vardır. Bunlar cihazların birbiriyle veya  bir ana kontrolcüyle haberleşmesini sağlar. Yazımıza öncellikle senkron ve asenkron haberleşme hakkında bilgi vererek başlamak istiyorum.

Senkron Haberleşme Nedir?

Senkron haberleşme gerçekleştirilirken, gönderilen veri biti ve alınan veri biti birbiriyle uyum içerisinde olmalıdır. İletişimi gerçekleştirecek olan aygıtlar eş zamanlı olarak çalışmak zorundadır. Yani alıcı ve verici aynı saat (clock) üzerinde olmalıdır.

Asenkron Haberleşme  Nedir?

Asenkron haberleşme yapmak için belirli bir clock’a ihtiyaç duyulmaz. Veri herhangi bir anda iletilebilir. Belirli standartlar kullanılarak gerçekleştirilir ve Senkron haberleşmeye göre daha yavaş bir iletim olur. [1][2]

Seri Haberleşme Protokolleri - Serial Communication Protocols

Haberleşme protokolleri

Yazımız içerisinde değineceğimiz haberleşme protokolleri UART, USART, SPI ve I2C protokolleridir. Protokoller hakkında temel bilgiler, nerelerde ve ne çeşitte kullanıldığı hakkında bilgilendirme yapacağım. Embedded.com üzerinde yazılan bir yazıda haberleşme protokolleri birbirleri ile çok güzel karşılaştırılmış. [11]

UART Haberleşmesi (Universal Asynchronous Receiver Transmitter)

Adından da anlaşılacağı üzere Asenkron bir haberleşme gerçekleştiren bir yapıdır. Aslında bir protokol değildir, bir çiptir. Ama bu çip programlanabilir olduğu için belirli prokollere sahiptir. Aslında bir bilgisayarın (ya da mikrodenetleyici diyebiliriz) seri portlarını kullanarak haberleşme sağlayan bir gömülü devredir. Data tipi ve hızı değiştirilebilir, programlanabilir bir çiptir. Bizim çift taraflı olarak asenkron bir haberleşme yapmamızı sağlar. Gelen seri veriyi paralel veriye veya paralel veriyi seri veriye çevirerek iletimi gerçekleştirebilir. USART Haberleşmesi (Universal Synchronous and Asynchronous Receiver Transmitter) ise UART’ın yaptığı işin senkron haberleşme ile birlikte yapılmış halidir. Hem senkron hem de asenkron veriler iletilebilir. [3][4][5]

SPI Protokolü (Serial Peripheral Interface)

Senkron haberleşme protokollerinden bir tanesidir.  Fully duplex (eş zamanlı çift yönlü çalışabilen) olarak çalışabilir. Haberleşme gerçekleştirilecek cihazlar arasında master-slave ilişkisi vardır. Birden fazla slave cihazla haberleşme sağlanabilir. Senkron olarak çalıştığı için mutlaka bir clock sinyaline ihtiyaç duyulur. Kısa mesafeli iletimde kullanılır. [6][7][8]

I2C Protokolü (Inter-Integrated Circuit)

Senkron haberleşme protokollerinden diğer bir tanesidir. Half-duplex (yarı eş zamanlı çift yönlü çalışabilen) olarak çalışır. Yani veri iletimi çift yönlü olur ancak aynı anda hem veri gönderilip hem de alınamaz. Buna telsizleri örnek verebiliriz. Minimum bilgi alışverişi gerçektirilecek yerlerde tercih edilir. İletişim için bant genişliği oldukta düşüktür. SPI’da olduğu gibi master-slave yapısını kullanır. [9][10]

Kaynaklar:

1 – http://web.itu.edu.tr/~sgunduz/courses/mikroisl/slides/d8.pdf

2 – www.elektrikport.com/teknik-kutuphane/veri-iletimi-1-bolum-elektrikport-akademi/17252

3 – http://support.usr.com/support/s-cour/s-cour-docs/10589.htm

4 – https://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter

5 – https://www.slideshare.net/canezgiaydemir/uart-ve-seri-haberleme

6 – https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus

7 – https://learn.sparkfun.com/tutorials/serial-peripheral-interface-spi

8 – http://ramazansural.blogspot.com/2009/09/spi-nedir-nasil-calisir-spi.html

9 – https://en.wikipedia.org/wiki/I²C

10 – https://learn.sparkfun.com/tutorials/i2c

11 – http://www.embedded.com/design/connectivity/4023975/Serial-Protocols-Compared