CAN Hataları Nasıl İşler?
Hata işleme CAN protokolünün içine yerleştirilmiştir ve bir CAN sisteminin performansı için büyük önem taşır. Hata işleme, CAN veriyolunda görünen mesajlardaki hataları tespit etmeyi amaçlar, böylece verici hatalı bir mesajı yeniden iletebilir. Bir veri yolu üzerindeki her CAN denetleyicisi bir mesaj içindeki hataları tespit etmeye çalışacaktır. Bir hata bulunursa, keşfeden düğüm bir Hata Bayrağı iletecek ve böylece veri yolu trafiğini yok edecektir. Diğer düğümler Hata Bayrağının neden olduğu hatayı tespit edecek (eğer orijinal hatayı daha önce tespit etmemişlerse) ve uygun eylemi gerçekleştireceklerdir, örneğin mevcut mesajı atacaklardır.
Her düğüm iki hata sayacı tutar: Gönderme Hata Sayacı ve Alma Hata Sayacı. Bu sayaçların nasıl artırılacağını ve/veya azaltılacağını düzenleyen çeşitli kurallar vardır. Temelde, bir hata tespit eden bir verici, İletim Hata Sayacını, dinleyen düğümlerin Alım Hata Sayacını artıracağından daha hızlı artırır. Bunun nedeni, hatalı olanın verici olma ihtimalinin yüksek olmasıdır! Herhangi bir Hata Sayacı belirli bir değerin üzerine çıktığında, düğüm önce “hata pasif” olur, yani bir hata tespit ettiğinde veri yolu trafiğini aktif olarak yok etmez ve ardından “veri yolu kapalı” olur, bu da düğümün veri yolu trafiğine hiç katılmadığı anlamına gelir.
Hata sayaçlarını kullanarak, bir CAN düğümü sadece hataları tespit etmekle kalmaz, aynı zamanda hata hapsi de gerçekleştirebilir.
Hata Tespit Mekanizmaları
CAN protokolü hataları tespit etmek için en az beş farklı yol tanımlar. Bunlardan ikisi bit düzeyinde, diğer üçü ise mesaj düzeyinde çalışır.
CAN veriyolundaki her verici iletilen sinyal seviyesini izler (yani geri okur). Gerçekte okunan bit seviyesi iletilenden farklıysa, bir Bit Hatası bildirilir. (Arbitrasyon işlemi sırasında bit hatası oluşmaz).
Bir düğüm tarafından aynı seviyeden beş ardışık bit iletildiğinde, giden bit akışına karşıt seviyeden altıncı bir bit ekleyecektir. Alıcılar bu ekstra biti kaldıracaktır. Bu, veri yolunda aşırı DC bileşenlerini önlemek için yapılır, ancak aynı zamanda alıcılara hataları tespit etmek için ekstra bir fırsat verir: veri yolunda aynı seviyenin beşten fazla ardışık biti meydana gelirse, bir Stuff Error sinyali verilir.
CAN mesajının bazı bölümleri sabit bir formata sahiptir, yani standart tam olarak hangi seviyelerin ne zaman gerçekleşmesi gerektiğini tanımlar. (Bu kısımlar CRC Sınırlayıcı, ACK Sınırlayıcı, Çerçeve Sonu ve ayrıca Ara’dır, ancak bunun için bazı ekstra özel hata kontrol kuralları vardır). Bir CAN denetleyicisi bu sabit alanlardan birinde geçersiz bir değer tespit ederse, bir Form Hatası bildirilir.
Bir mesajı doğru bir şekilde alan veri yolundaki tüm düğümlerin (içerikle “ilgili” olup olmadıklarına bakılmaksızın) mesajdaki Onay Yuvası olarak adlandırılan alanda baskın bir seviye göndermesi beklenir. Verici burada çekinik bir seviye iletecektir. Verici ACK yuvasında baskın bir seviye tespit edemezse, bir Onay Hatası sinyali verilir.
Her mesajda 15 bitlik Döngüsel Artıklık Kontrol Toplamı (CRC) bulunur ve mesajda kendi hesapladığından farklı bir CRC tespit eden herhangi bir düğüm CRC Hatası sinyali verir.
Hata Sınırlama Mekanizmaları
Bir veri yolu üzerindeki her CAN denetleyicisi, her mesaj içinde yukarıda özetlenen hataları tespit etmeye çalışacaktır. Bir hata bulunursa, keşfeden düğüm bir Hata Bayrağı iletecek ve böylece veri yolu trafiğini yok edecektir. Diğer düğümler Hata Bayrağının neden olduğu hatayı tespit edecek (orijinal hatayı henüz tespit etmedilerse) ve uygun eylemi gerçekleştirecek, yani mevcut mesajı atacaklardır.
Her düğüm iki hata sayacı tutar: Gönderme Hata Sayacı ve Alma Hata Sayacı. Bu sayaçların nasıl artırılacağını ve/veya azaltılacağını düzenleyen birkaç kural vardır. Temel olarak, bir hata tespit eden bir verici, İletim Hata Sayacını, dinleyen düğümlerin Alım Hata Sayacını artıracağından daha hızlı artırır. Daha önce de belirtildiği gibi, bunun nedeni hatalı olanın verici olma ihtimalinin yüksek olmasıdır!
Bir düğüm Hata Aktif modunda başlar. İki Hata Sayacından herhangi biri 127’nin üzerine çıktığında düğüm Hata Pasif olarak bilinen bir duruma girer ve İletim Hata Sayacı 255’in üzerine çıktığında düğüm Veri Yolu Kapalı durumuna girer.
Hata sayaçlarını artırma ve azaltma kuralları biraz karmaşıktır, ancak prensip basittir: iletim hataları 8 hata puanı verir ve alma hataları 1 hata puanı verir. Doğru iletilen ve/veya alınan mesajlar sayaç(lar)ın azalmasına neden olur.
Örnek (biraz basitleştirilmiş): Bir veri yolundaki A düğümünün kötü bir gün geçirdiğini varsayalım. A ne zaman bir mesaj iletmeye çalışsa başarısız olur (herhangi bir nedenle). Bu her gerçekleştiğinde, İletim Hata Sayacını 8 artırır ve bir Aktif Hata Bayrağı iletir. Daha sonra mesajı yeniden iletmeye çalışır ve aynı şey olur.
İletim Hata Sayacı 127’nin üzerine çıktığında (yani 16 denemeden sonra), A düğümü Hata Pasif’e geçer. Aradaki fark, artık veri yolu üzerinde Pasif Hata Bayrakları iletecek olmasıdır. Bir Pasif Hata Bayrağı 6 çekinik bitten oluşur ve diğer veri yolu trafiğini yok etmez – bu nedenle diğer düğümler A’nın veri yolu hatalarından şikayet ettiğini duymazlar. Ancak A, İletim Hata Sayacını artırmaya devam eder. Sayaç 255’in üzerine çıktığında, A düğümü sonunda pes eder ve Bus Off’a geçer.
Diğer düğümler A düğümü hakkında ne düşünüyor? – A’nın ilettiği her aktif hata bayrağı için, diğer düğümler Alıcı Hata Sayaçlarını 1 artıracaktır. A Bus Off’a geçtiğinde, diğer düğümlerin Alıcı Hata Sayaçlarında Hata Pasif sınırının çok altında, yani 127 olan bir sayı olacaktır. Bu sayı, doğru alınan her mesaj için bir azalacaktır. Ancak, A düğümü veri yolu kapalı kalacaktır.
Çoğu CAN kontrol cihazı iki durum için durum bitleri (ve ilgili kesmeler) sağlayacaktır:
Bazıları – ama hepsi değil! – denetleyiciler ayrıca Hata Pasif durumu için bir bit sağlar. Birkaç denetleyici de hata sayaçlarına doğrudan erişim sağlar.
CAN kontrolörünün hata oluştuğunda mesajları otomatik olarak yeniden iletme alışkanlığı zaman zaman can sıkıcı olabilir. Piyasada hata işlemenin tam manuel kontrolüne izin veren en az bir kontrolör (Philips’ten SJA1000) vardır.
Veri Yolu Arıza Modları
ISO 11898 standardı, CAN veri yolu kablosunun çeşitli arıza modlarını sıralar:
1-6 ve 9 numaralı arızalar için veri yolunun azaltılmış S/N oranıyla hayatta kalması ve 8 numaralı arıza durumunda ortaya çıkan alt sistemin hayatta kalması “tavsiye edilir”. Arıza 7 için, azaltılmış bir S/N oranıyla hayatta kalmak “isteğe bağlıdır”.
Pratikte, 82C250 tipi alıcı-vericiler kullanan bir CAN sistemi 1-7 arızalarında hayatta kalamaz ve 8-9 arızalarında hayatta kalabilir veya kalmayabilir.
Yine de TJA1053 gibi tüm arızaların üstesinden gelebilen “hata toleranslı” sürücüler vardır. Normalde bu hata toleransının bedelini kısıtlı bir maksimum hız ile ödersiniz; TJA1053 için bu 125 kbit/s’dir.