Bir önceki makale olan Controller Area Network Nedir ile CAN’e kısa bir giriş yapmıştık. Bu yazıda ise biraz daha derinlere inmeye çalışacağım. CAN’ in katmanlarını, frame yapısını , modül şemasını ve hata tespitini inceleyeceğiz.
Kısaca hatırlamak istersek özellikle otomotiv alanı ve endüstriyel haberleşmede sistemlerinde kullanılır. Topoloji olarak özellikle bus topoloji ile star ve ring topolojileri kullanır. Baseband iletim yapaken; CSMA/CR algoritmasını kullanır. Neden kullanılıyor diye düşünürsek de 3 temel sebebi var. Düşük hata oranı, uygulama kolaylığı ve kapsamlı hata tespiti.
Controller Area Layer (CAL)
Katman der demez benim aklım OSI ye gidiyor. Sanırım pek çoğumuzun da öyledir. CAN’ ın katman yapısı ise OSI’ den oldukça farklı.
CAN 3 katmandan meydana gelmektedir. Ve Frame bazında işlem yaptığı için OSI ile karşılaştıracak olursak ilk 2 katmana karşılık gelir.Nesne katmanında (Object Layer) temel olarak paket ayıklama ve öncelik belirleme işlemleri gerçekleşir. Transfer katmanında (Transfer layer) hata tespiti(error handling), arbitration dediğimiz bit çekişmesi ve onay (ACK) işlemleri gerçekleşirken ; fiziksel katmanda (pyhscial layer) sinyal seviyesi ve zamanlama, bit gösterimi gibi kavramlar karşımıza çıkmaktadır.
Modül yapısı
CAN ‘ın modül yapısında CAN kontrolcüsü(CAN controller), CAN sürücüsü(CAN driver), mikrodenetleyici(microcontroller) bulunur. Mikrodenetleyici ile CAN kontroller aynı entegrede bulunabileceği gibi farklı aynı entegrede de bulunabilir. Driver sadece sinyal seviyesi ile ilgilenir. CAN ise mikrodenetleyici tarafından kontrol edilir.Çünkü CAN düşük seviyeli bir protokoldür ve bu sebeple yazılım ile kontrole ihtiyaç duyar.
Çalışma prensibi olarak mesajını bütün ağa iletir. Mesajlar bit bit gönderilir. En az iki düğümden oluşurken; gönderen dahil bütün düğümler haberleşme esnasında aktif rol alırlar ve her paket her düğüme ulaştırılır yani herkes her frameden haberdardır. Ve her düğüm kendisine gelen mesajı kaydederek kullanıp kullanmayacağına karar verir.
Frame Yapısı ve Çeşitleri
4 tane frame çeşidi vardır.
- Data Frame (bilgi)
- Remote Frame(istek)
- Error Frame(hata)
- Overload
Aşağıda data ile remote frame farkı gözetmeksizin temel bir CAN frame yapısı yer almaktadır.
Framedeki alanlara bakarsak.
Arbitration Field : 11-29 bitten meydana gelen ve her frame özelolan ID ile RTR alanını içerir. RTR alanı 1 ise remote frame olurken; 0(sıfır) ise data frame halini alır.
Kontrol Alanı(Control Field) : Veri uzunluğu kodu DLC yi içerirken 2 biti extented frame tarafından kullanılır.
Veri Alanı(Data Field): 8 byte veri alanıdır. Yani bilginin bulunduğu kısımdır. Fullde olabilir; boş da olabilir.
CRC Alanı (CRC Field) : Verinin checksum bitleridir. Mesajın tipine göre optimize edilir. Checksum yöntemi bildiğimiz gibi veri uzunluğunun yarısını kapsayan uzunluktadır. Bir hata kontrol yöntemidir.
Onay -ACK- Alanı (Acknowledgement Field) : Mesajın alındığına dair verilen onay paketidir. Mesaj alındığında 1 den 0 durumuna geçer.
EOF Alanı : End Of Frame dedğimiz frame in sonu olduğun belirten alandır. Hemen akabinde gelen int ise 2 frame arası 3 bit boşluktur.
Senkronizasyon – Stuff Biti Nedir ?
Birbirini farklı izleyen bitlerde senkronizasyon düşen kenar ile tespit edilir. Alıcı düşen kenar gördüğünde bit ayrımını yapabilir. Ancak sürekli aynı değerde veri gelmesi ihtimali de vardır. Örneğin: ethernette manchester kodlama dediğimiz 1 bitin 2 bit ile ifade edilmesi yöntemi vardır ve senkronizasyon bu şekilde sağlanır. CAN için ise stuffing dediğimiz yöntem vardır. Stuffing her 5 aynı bitte 6.bitin ters bit şeklinde gelmesidir. Bu yöntemin olumsuz yanı ise stuff bitlerinin gereksiz yere uzamalara sebep olmasıdır.
CAN Hata Tespiti ve Hata Tipleri
CAN deki her mesaj ciddi önemler taşır. Sistemin düzgün işlemesi için hata olmaması çok önemlidir. Bu nedenle farklı hata yakalama yöntemi varken 5 te farklı hata tipi vardır.
Hata Tespit Yöntemleri:
- Gönderici tarafından bit kontrolü
- Stuff kural kontrolü
- Frame kontrolü
- CRC kontrolü
- ACK kontrolü
Hata Tipleri :
- Bit hatası
- Stuff biti hatası
- Form(frame) hatası
- CRC hatası
- ACK hatası
Hata halinde bir sonraki hata bayrağı(error flag) çeker.
Not : Yazıya ait ilk resim CAN için kendi oluşturduğum zihin haritasıdır.**