Bu yazımda CAN protokolünün yapısını ve çalışma mantığını donanımdan bağımsız olarak sizlere anlatmayı planlıyorum.Burdaki bilgiler ARM, AVR, PIC vb gibi işlemcilerin hepsi için geçerlidir.Burada yazdıklarım zamanında LPC2000 programlama klavuzu adlı e-kitabımı hazırlarken internetten araştırıp edindiğim bilgilerin derlemesidir.Bu kadar kapsamlısını başka yerde bulamassınız :) Bu yazımda donanıma girmeden sadece CAN sisteminin işleyisini ve mantığını anlatacağım.Eğer kelimeler öğretir örnekler yol gösterir diyenlerdenseniz, donanım ve kod incelemek istiyorsanız LPC2000 Programlama Klavuzu adlı e-kitabımdaki CAN başlığına bakabilirsiniz, burdaki bilgiler de kitabımdan alıntıdır.
Controller Area Network (CAN) protokolü 1983 yılında omototiv sektöründe kullanılmak üzere Robert Bosch tarafından geliştirilmeye başlanmıştır ve resmi olarak 1986 yılında kullanılmaya başlanmıştır. Araçlarda bulunan kablo ağının azaltılması amaçlanmıştır.Bu protokol sayesinde motor, frenler, klima, çeşitli sensörler gibi birimler arasında 10 larca kablo yerine sadece 2 kablo kullanılmaktadır.CAN protokolü başta otomotiv alanında kullanılsada veri iletim hızı,hata oranının düşüklüğü ve uygulama kolaylığı gibi sebeplerden dolayı mikroişlemcili sistemlerde de çoğu kişi tarafından bireysel uygulamalarda kullanılmaktadır.İletişim hızı 40m de 1Mbit/sn iken 1km uzaklıklarda 40Kbit/sn ye düşmektedir.Yapılan olasılık hesaplarına göre sağlıklı çalışan bir CAN sisteminin tespit edilemeyen hata yapma olasılığı bir asırda bir dir.
CAN diğer protokollerden farklı olarak adress temelli değil mesaj temelli çalışmaktadır.Her mesaja özgü bir ID numarası vardır.Mesajlar çerçeveler ile iletilirler ve veri ve istek mesajları olarak ikiye ayrılırlar.İstek mesajlarında veri bulunmaz. Veri mesajlarında ise en fazla 8 bytle lık veri aktarılır.CAN2.0A ve CAN2.0B olmak üzere 2 tane standartı vardır.Bunlar arasındaki fark mesaj uzunluklarının farklı olmasıdır.Bunlar ilerleyen kısımlarda anlatılacaktır.