RS232, bir seri haberleşme standartıdır. Bu standart, sinyal düzeyleri, hata düzeltme yöntemleri ve diğer ayrıntıları belirler. RS232, 1960’larda geliştirilmiş bir standarttır ve halen birçok cihazda kullanılmaktadır.
RS232 standartı, elektronik eşyaların birbirleriyle iletişim kurmasını sağlar. Bu standart, bir cihazın (örneğin bir bilgisayarın) diğer bir cihaza (örneğin bir yazıcının) veri göndermesini ve almasını sağlar. RS232, seri haberleşme yöntemini kullanarak bu işlemi gerçekleştirir.
RS232, birçok farklı cihazda kullanılır. Örneğin, bir bilgisayarın bir yazıcıya veri göndermesi için RS232 kullanılır. Ayrıca, bir klavyenin bir bilgisayara veri göndermesi için de bu standart kullanılır. Günümüzde ise, RS232 yerine daha gelişmiş seri haberleşme standartları kullanılmaktadır.
60’larden kalma bir protokol olan RS-232’in anlaşılması ve kullanılması aşina olmayanlar için zordur. Çıktığı yıllarda yeterli olduğu düşünülse de zamanla birkaç kez güncelleme geçirmiştir. Orijinal halinde herhangi bir hata kontrolü yapılmaksızın verici ve alıcı arasında senkronize veri iletişimi yapılıyordu. O zamanki veri boyutları birkaç kilobyte hatta byte’lar ile ölçülecek kadar küçük olduğundan 600 baud gibi hızlar oldukça yeterliydi. Elbette o yıllarda gelecekteki bilgisayarların, yazıcıların, test ekipmanlarının, post cihazları ve diğer cihazların ne şekilde gelişeceği öngörülememiş ve standart sadece o zaman kendi işlerini görecekleri kadarıyla şekillenmiştir. ( Electronic Industries Association – EIA)
Yıllar içince teknolojik ilerlemelere bağlı olarak aktarılan veri boyutları arttıkça daha yüksek hızlara ihtiyaç duyulmaya başlamıştır. Bu da verilerin daha da sıkıştırılarak gönderilmesine neden olmaya başlamıştır. Veri aktarım hızı yükseldikçe fiziksel şartlar nedeniyle veride bozulmalar meydana gelmeye başlamış ve alıcıya hatalı bilgi gitme tehlikesi ortaya çıkmıştır. Bunun sonucunda çözüm olarak, parite biti eklenmesi, handshake ile akış kontrolü yapılması gibi yollara gidilmiştir. Bunlara rağmen bu protokol günümüzde veri aktarımı için çok yavaştır ve ana görevi artık bu değildir. Yine de birçok cihazın üzerinde bu portu bulmak mümkün. Hatta modern cihazlarda bile temel konsol işlemlerini ve hata ayıklama işlerini doğrudan bu port üzerinden yapabiliyoruz. IP adresi belli olmayan, hatta ethernet portu olmayan, ekransız, klavyesiz, neredeyse kapalı kutu gibi duran bazı endüstriyel cihazlarda bazen bu tek yöntem olabiliyor. Arduino ile hata ayıklama için de bu tür bir bağlantı kullanılmaktadır.
Voltaj seviyeleri önemlidir
RS-232 standardı, veri iletimi ve kontrol sinyali hatları için mantıksal bir ve mantıksal sıfır seviyelerine karşılık gelen voltaj seviyelerini şu şekilde tanımlamıştır. Geçerli sinyaller “Ortak Zemin” (GND) pinine göre +3 ila +15 volt aralığında veya -3 ila -15 volt aralığındadır; Sonuç olarak, −3 ila +3 volt arasındaki aralık geçerli bir RS-232 seviyesi değildir.
±5 V, ±10 V, ±12 V ve ±15 V sık kullanılan voltaj seviyeleridir. İki uç arasındaki sinyaller GND pinine göre bu aralıklarda ve birbirleriyle dengeli olmalıdır. İki uç birbirine mümkün olduğunca yakın olmalıdır. Eğer mesafe uzunsa GND gerilimleri farklı olabilir. İki uçtaki cihazlar farklı güç kaynaklarında besleniyorsa bu durum daha da kritik hale gelir. Mümkün olduğunca GND gerilimlerinin birbirine yakın olması ile bu çözülebilir. İyi topraklama yapmak buna iyi bir çözümdür.



Yukarıdaki örnekte bir Siemens CNC makinesinden RS-232 ile alınan dosyaya aittir. Dosyanın ilk satırı olan başlıkta bazı bilgiler bulunur. Yukarıdaki iki örnekten birincisi PC Format, diğeri Punched Tape olarak alındı. Punched tape olan insan için daha anlaşılır görülüyor.
Dosyanın ilk satırı dosya adı, ikinci satırı alındığı konumu belirtiyor. Ayrıca dosya sonu da 25(HEX) karakteri ile belirleniyor. Bu dosya tek MPF programı içeriyor.
WPD olarak tüm klasörü aldığımda da tüm program ve yolları görülüyor. Bu 3 program aynı dosyanın içinde bir öncekinin devamı şeklinde sıralanmış haldedir.
Bu WPD dosyasını geri yüklersek, makineye doğru dizin yapısı ile tekrar yüklenir.
Bu resimde J harfinin RS232 ara birimi üzerinden gönderilişi sırasındaki sinyal şeklini teorik olarak gösteriyor. Gerçek hali ise daha çok eğriler şeklinde oluyor. Şekilde 0V ve 5V lojik seviyelerindeki bit akışı mikroişlemcinin out pininden gönderilmiş . MAX232 gibi bir çevirici ile ± 12 volta yükseltilmiş. -12V lojik 1 ve +12V lojik 0 olarak tekabül eder. Çıkış gerilimleri ± 5V ile ± 25 V arasında olabilir. Uzun mesafeli iletimlerde yüksek gerilim daha kullanışlıdır.
Bu şeklin içindeki 1 bitin periyodu 1/frekans . 9600 bps için 1/9600 yani 104,166 mikrosaniye olarak görülüyor.
Seri haberleşmede bilgiler sıralı olarak gönderilir. RS-232 8 bit data ve 1 bit parite biti ile 1 Byte bilgiyi göndermiş olur. Bitlerin nerede başlayıp bittiğini gösterecek bir sinyal yoktur. Alıcı ile gönderici tarafların aynı hız ile çalışması gerekir. Burada hızdan kast edilen baud rate olarak bilinen değerdir. Örneğin 9600 bps , saniyede 9600 bit hız anlamındadır.
Data bitleri 5,6,7,8,9 olarak ayarlanabilir. Start bitinden sonra sırayla gelirler. Genelde 7 veya 8 bit olarak kullanılır ve lsb önce sönderilir (bkz :least significant bit). 7 veya 8 seçmekteki ilk neden şu olabilir: alfabedeki ASCII karakterlerin hepsi (ve kontrol karakterleri de tabi ki) ilk 7 bit ile kodlanabilir. 8. bit ise grafik semboller veya çalıştırılabilir ikili kodlar (binary , RAW) için kullanılır. Sadece yazı göndermek için 7 bit uzunluk kullanabilirsiniz bu 1 bit, akış hızının bir miktar artmasına yardımcı olur.
Baud rate ile sinyal frekansı arasındaki ilişkiyi açıklamak gerekirse, baud rate kısaca saniyede aktarılan bit sayısıdır. Bu her bir bitin periyodunu tanımlamak için kullanılır. 2400 bps için frekans 2400 Hz. ve bit periyodu 1/2400 saniye olacaktır. Bu bilgi alıcı cihazın gelen bitleri çözmesi için gereklidir.
Bu protokol bir saat (Clock : dijital elektronikte kullanılan senkronizasyon sinyali) olmadan asenkron olarak tüm bilgiyi aktarabilir. Aktarımın başında, takip eden bitlerin bir data baytını getireceğini belirten bir Start biti alıcıya gönderilir. Idle (Boş) durumunda bekleyen RS232 hattı düşük (-12V) durumundan yüksek (+12) durumuna geçer ve 1 bit periyodunca böyle kalır. Alıcı için bunun anlamı data taramasının ilk yükselen kenarını aldığı ve bilginin gelmeye başlayacağıdır.
Bu bitle birlikte alıcı her bitin ortasında kendi clock sinyalini üretir. Başlangıç biti bir kere bulunduktan sonra, alıcı her bitin uzunluğunu (period) hesaplar. Bunu baud rate değerini kullanarak yapar. Bu neden alıcı ile göndericinin Baud rate, stop, data, parite ayarlarını aynı yapmamız gerektiğini açıklıyor. Yoksa hiç birşey alamayız, ya da garip karakterler aktarılır.
Parite (Eşlik, Parity) tüm data bitlerinin kaç tanesinin 1 olduğundan üretilir. Parite ayarı Çift (Odd) ise ve 1 olan bitlerin sayısı çift ise parite biti 1 olur. Tek (Even) ayarı kullanılırsa, 1 olan bitlerin toplam adedi tek ise parite biti 1 olur. Amacı iletişimde aksaklık olup olmadığını kontrol etmektir. Parity error diye bilinen hataların çoğu sinyal kesintisi olduğuna veya voltaj seviyesi uyumsuzluğuna işaret eder.
Bu şekilde hata kontrolü yapmanın bir eksikliği vardır. 2 bit birden yanlış aktarılırsa doğruymuş gibi sonuç verir ve hatalı aktarım yapılmış olur. Çünkü herhangi bir çift sayılı bit toplamı aynı sonucu verir. Kısa kablo kullanılan sistemlerde (5-10 M) bu bir soruna neden olmaz ve belki hiçbir parite hatası ortaya çıkmaz.
Uzun bir kablo üzerinden aktarım yapılan sistemlerde veya gürültülü ortamlarda RS232 ile haberleşme yapmadan önce ve sonra bir çevrim testi yapmak ve ortamın uygunluğunu test etmek daha iyi olacaktır. (CRC: Cyclic redundancy check)
Stop biti, bir sonraki karaktere geçmeden önce ara verilmesi için kullanılır. Byte bittikten sonra gönderilir. Uzunluğu 1, 1.5 veya 2 olabilir. Yüksek hızlarda stop ile start bitinin arasındaki boşluk çok kısa olabilir. Örneğin 1/115200 = 8.26 mikro saniye olur. Yükselen kenarın ve düşen kenarların uzunluklarının toplamı ise 6 mikro saniye kadardır. Böylece stop bitinin algılanabilmesi için sadece 2.26 mikro saniyelik bir zaman aralığı kalır ki kritik bir değer olduğundan veri iletişiminde sorunlar ortaya çıkabilir. Stop bitini 2 kullanarak bunu 16.5 milisaniyeye çıkarabiliriz. Böylece 10 mikro saniyeden biraz daha fazla zaman kalır. Bu alıcının gelen ascii karakterlerini daha iyi ayırmasına yardımcı olur. Ayrıca yüksek hızlarda haberleşme yapıldığında hat kapasitesi, kare dalga şeklinin bükülmesine neden olur. Bu sanki tellere paralel kondansatör bağlanmış gibi etki göstermektedir. Osiloskopta kare dalga yerine CR deşarj eğrisine benzer bir şekil görülür. Hızın yavaşlatılması, dolayısı ile periyodun uzatılması daha fazla kapasitif yüklemeye izin verir yani aktarımı kolaylaştırır. Alıcı ve göndericinin donanımsal özellikleri de buna etki eder. Bazı durumlarda MAX232 entegresinin kapasite değerlerini azaltmak (örnek: 0.1 nF ) daha kararlı haberleşmeye imkân tanır.
Baud rate | 9600 |
Data bitleri | 8 |
Parite | None |
Stop biti | 1 |
Flow Control (Akış Kontrolü) | None |
Tipik aktarım değerleri tabloda görülüyor.
Handshake sinyali: Data akışının durdurulması içim kullanılan metoda verilen addır. Eğer alıcı meşgul veya dolu ise ve daha fazla bit alamıyorsa hattın diğer ucuna akışı durdurması için bilgi verir. Yoksa bilgi kaybı olacaktır. Temelde Hardware ve Software olarak iki türlü handshake metodu kullanılır. Bu metotlar birlikte de kullanılabilir.
- DTR – Data Terminal Ready.
- DSR – Data Set Ready.
- RTS – Request To send.
- CTS – Clear To Send.
Bu sinyaller hardware handshake ile kullanılır. Bunlar TX ve RX sinyalleri ile aynı voltaj seviyelerinde olmalı ve RS232 çipi tarafında üretilmelidir. Bu protokol modem çalışma mantığı üzerine kurulmuştur. (DCE) Telefon çaldığında, telefon hattına bağlı olan modem otomatik olarak data akışını kabul eder.
PC modeme bilgi göndermek için RTS’yi kullanır. Modem data almak için CTS’yi kullanır. İkisi de 1 olduğunda modeme doğru akış yapılabilir. Modem CTS’yi 0 yaptığında PC gönderimi durdurur ve beklemeye başlar.
Modem PC ye bilgi göndermek isterse DSR yi 1 yapar. PC DTR yi 1 yaparak izin verir.
Software handshake sadece 3 kablo ile haberleşebilir. Hardware handshake için kullanılan uçlar birbirine köprülenmiştir. XON ve XOFF adı verile özel ASCII karakterleri ile gönderici cihaza durdurma sinyali XOFF iletilir. Alıcı ara belleğini (Buffer) boşalttığında tekrar aktarıma devam etmesi için XON sinyalini göndericiye iletir.
Genel olarak XON=H17 XOFF=H19 olarak kullanılır. (Hexadecimal)