Süleyman Demirel Üniversitesi, Fen Bilimleri Enstitüsü Dergisi, 12-2(2008),149-153 Mikrodenetleyiciler İçin Kontrol Alan Ağı Üzerinden Sistem İçi Programlayıcı Tasarımı Akif KUTLU 1*, İlker ÜNAL 2 1 Süleyman Demirel Üniversitesi,Teknik Eğitim Fakültesi, Elektronik-Bilgisayar Eğitimi Bölümü / ISPARTA 2 Mehmet Akif Ersoy Üniversitesi, ikmet Tolunay Meslek Yüksek Okulu, BURDUR Alınış tarihi:21.10.2007, Kabul tarihi:04.09.20008 Özet:Bu çalışmada, endüstriyel ortamlardaki mekanik ve elektronik sistemlerin kontrolü için kullanılan mikrodenetleyicilerin, ana bilgisayar kullanılarak Kontrol Alan Ağı (CAN) üzerinden Sistem İçi programlanması gerçekleştirilmiştir. Sistemin donanımı ana bilgisayar, CAN arabirimi ve CAN ile haberleşebilen PIC tabanlı mikrodenetleyicilerden oluşur. Sistemin tasarlanan yazılımı, hedef mikrodenetleyicilerin kaynak kodlarını CAN üzerinden transfer edebilmekte, böylece farklı yerlerdeki mikrodenetleyicilerin tek noktadaki ana bilgisayar ile programlanabilmesini sağlamaktadır. Sistem içi programlama (ISP) özelliği, mikrodenetleyicilerin çalışan sistemden sökülmesine gerek duyulmadan programlanabilmesine imkân tanımaktadır. Anahtar Kelimeler: Kontrol Alan Ağı, Sistem İçi Programlama, Mikrodenetleyiciler In System Programmer Design for Microcontrollers Via Controller Area Network Abstract:This paper presents a method of In System programming (ISP) microcontrollers, which is mainly used for controlling mechanical and electronic systems of industrial environments, using a host computer via Controller Area Network (CAN). ardware of the designed architecture consist of a host computer, PCI CAN interface and PIC based microcontrollers that can communicate over CAN. The Designed software of the system enables source codes to be transferred for target microcontrollers via CAN and hence, provides programming multiple microcontrollers, located at different points, using a central host computer. Furthermore, there is no need to remove microcontrollers from the circuit for programming, since it has In System Programming facility. Keywords: Controller Area Network, In System Programming, Microcontrollers Giriş Mikrodenetleyiciler, endüstriyel otomasyon için gerekli olan giriş çıkış ünitelerini içermesinin yanında, bu ünitelerin nasıl çalışması gerektiğini belirten yazılımların (firmware) saklandığı dahili kod hafıza alanına da sahiptirler (Gilmour 1991). azırlanan yazılımların, mikrodenetleyicinin kod hafıza alanına saklanması için gerekli prosedür Programlama olarak nitelendirilir. Programlama, genellikle kişisel bilgisayar (PC) yardımı ile gerçekleştirilir. Programlayıcılar paralel ve seri olmak üzere iki ayrı teknik kullanarak mikrodenetleyicinin programlanmasını sağlar. paralel programlayıcı da paralel ile kastedilen, programlayıcı cihazın bilgisayara olan bağlantısı değil mikrodenetleyiciyi programlama tekniğidir. Paralel programlayıcı kullanarak yapılacak programlama işlemi için, mikrodenetleyicinin çalışan sistem üzerinden sökülerek programlayıcı cihaza takılması gerekir. Paralel programlama tekniği ile mikrodenetleyici üzerindeki tüm hafıza ünitelerine ulaşmak mümkündür. Ayrıca paralel programlayıcılar genellikle farklı mikrodenetleyici türleri, lojik entegre devreler ve hafıza entegre devrelerini de programlayacak şekilde üretilmektedirler. Diğer bir teknik olan seri programlama, mikrodenetleyici içerisinde bulunan yardımcı bir yazılım (bootloader) sayesinde bilgisayarın seri bağlantı noktalarından birisi kullanarak yapılan programlama tekniğidir. Seri programlama tekniğinde mikrodenetleyicinin çalışan sistem üzerinden sökülmesine gerek duyulmaz. Mikrodenetleyici sistemden sökülmeden programlanabildiğinden dolayı Sistem İçi Programlama (In System Programming) veya Devre İçi Programlama (In Circuit Programming) olarak ta adlandırılır. ISP nin kullanılabilmesi için hedef mikrodenetleyicinin çalışma modundan programlama moduna geçirilmesi gerekir. Bu işlemler için uygulanacak prosedürler, mikrodenetleyicilerin ilgili kitapçıklarında detaylı olarak anlatılır (Atmel, 2002a;Microchip, 2006) Seri programlama, içerisinde seri haberleşme yapabilen yazılımı olan (bootloader) mikrodenetleyicilerde kullanılır. Bootloader, mikrodenetleyici içerisinde ayrı bir kod alanında tutulur. Bu kod alanın yeniden programlanabilmesi, sadece paralel programlama tekniği ile mümkündür. Seri programlamanın bir alt birimi olan Uygulama İçi Programlama (IAP-In Application Programming) tekniğinin özelliği ise, mikrodenetleyici üzerinde çalışan uygulama yazılımının, sistem çalışırken kod alanının bir parçasını programlayabilmesini sağlamasıdır (Atmel, 2002b). ISP de olduğu gibi çalışma modundan programlama moduna geçmeye gerek duyulmaz. Seri programlama için kullanılan seri protokoller UART (Universal Asynchronous Receiver Transmitter), SPI * akutlu@tef.sdu.edu.tr 149
A. KUTLU, İ. ÜNAL (Serial Peripheral Interface) ve CAN (Controller Area Network) protokolleridir. Bunlardan UART ve CAN protokolü mikrodenetleyici ile bilgisayar arasındaki iletişim için; SPI ise mikrodenetleyici ile bir başka mikrodenetleyici arasındaki seri iletişim için kullanılır. UART protokolü yalnızca birebir bağlantı için kullanılır. Bundan dolayı, birden fazla mikrodenetleyicinin aynı seri hat üzerinden programlanabilmesi için uygun çözüm CAN protokolünün kullanılmasıdır. UART veya CAN protokollerinden hangisi kullanılacaksa mikrodenetleyici içerisindeki bootloader yazılımı paralel programlayıcı ile değiştirilmelidir. Dilerse kullanıcı kendisine ait bir bootloader yazılımı hazırlayarak kullanabilir. Bu çalışmada bilgisayara takılan PCI CAN kartı aracılığı ile PIC tabanlı 18F458 mikrodenetleyicilerin tek noktadan Sistem İçi Programlama tekniği ile programlanması gerçekleştirilmiştir. Programlama için gerekli prosedürler için ana bilgisayar üzerinde yazılım geliştirilmiştir. azırlanan bu yazılım, hedef mikrodenetleyicileri ayrı ayrı programlayabilme özelliğine sahiptir. Makalenin bölümleri şu şekilde organize edilmiştir: İkinci bölüm CAN protokolü ve erişim metodu ile ilgili bilgileri sunmaktadır. Üçüncü bölümde, tasarlanan sistemin genel yapısı ile hazırlanan bilgisayar programı açıklanmıştır. Çalışmanın değerlendirmesi dördüncü bölüm olan sonuç kısmında yapılmıştır. CAN CAN ( Controller Area Network ) Protokolü, 1980 lerin ortalarında Alman firması olan Robert Bosch tarafından, otomotiv uygulamalarında güçlü bir seri veri iletiminin oluşturulması amacıyla tasarlanmıştır (Kiencke, 1994). 1993 yılında ISO tarafından uluslararası bir standart olarak kabul edilmiştir. Mercedes, BMW, General Motor gibi firmalar ürettikleri araçlar içerisindeki elektronik sistemlerin haberleşmesinde CAN protokolünü kullanmaktadırlar. Örneğin, ABS ( Antilock Braking System ) fren sistemi, araçların yolda kaymasını engelleyen sistemler gibi kritik zamanlı sistemlerin tek bir merkezden yönetilebilmesini sağlar. Ayrıca, lambalar, kapılar, camlar, sıcaklık bilgileri gibi kritik olmayan bilgilerin de aynı merkezden kontrolüne olanak tanır. Kullandığı BUS yapısı sayesinde kalabalık kablolama yapısını ortadan kaldırır. CAN Protokolü, otomotiv sektöründe olduğu gibi endüstri sektöründe de yaygın olarak kullanılmaktadır. Örneğin, tarımsal makineler, tıbbi makineler ve otomasyon sistemleri içerisinde CAN haberleşme protokolü kullanılmaktadır (Lawrenz, 1995). Tekstil üretim sistemleri, paketleme kontrol sistemleri, robot kontrol sistemleri gibi daha birçok sistem içerisinde CAN protokolü popülaritesini arttırmıştır. İçerisinde CAN modülü bulunan ilk entegre 1989 yılında Intel Corp. tarafından piyasaya çıkarılmıştır. Bu tarihten itibaren, Siemens, Motorola, Philips ve Microchip gibi büyük firmalar CAN entegrelerini üretmeye başlamışlardır. Microchip firması, 2005 yılında toplam 200 milyona yakın CAN modüllü entegre satarak üretici firmalar arasında ikinci sıraya oturmuştur. 8 bitlik yapıda olan PIC 18F458 mikrodenetleyicisi, 32768 KBayt program belleği, 1536 Bayt RAM bellek, 256 Bayt Data EEPROM ve CAN modülüne sahiptir. Programlanabilmesi Paralel programlayıcı, UART seri programlayıcı ve CAN seri programlayıcı kullanarak mümkündür. Bunlardan Paralel ve UART üzerinden programlama uygulamaları gerçekleştirilmiş, ancak CAN üzerinden programlama henüz hayata geçirilmemiştir. Bu çalışma ile amaçlanan PIC 18F458 mikrodenetleyicisinin CAN üzerinden programlanabilmesidir. CAN 2.0A protokolü, uzunluğu 88 ila 108 bit arasında değişen mesajların CSMA/CR (Carrier Sense Multiple Access with Collision Resolution) erişim metoduna uygun olarak iletilmesi prensibine dayanır. er mesajın 11bit uzunluğunda niteliğini ve aynı zamanda sayısal değeri itibariyle önceliğini belirleyen öntakısı (Identifier) vardır. Nitelik ile kastedilen, kullanıcı tarafından mesaja anlamlı bir sayısal değer verilmesidir: sıcaklık bilgisi = 12, ız bilgisi = 13 gibi. 11 bit ile 2 11 değişik nitelik ve öncelik tanımlaması yapılabilmektedir. CAN 2.0B sürümü için bu değer 2 29 dur. Sayısal olarak diğerlerinden düşük değeri olan mesajın yüksek önceliği vardır. İki mesajın aynı anda farklı kaynaklardan iletilmeye çalışılması durumunda önceliği yüksek olan mesaj ortama erişme hakkına sahiptir. CAN protokolü ile ilgili detaylı bilgiler (Intel, 1993; Philips, 1991) referanslarda bulunabilir. ISP Donanım ve Yazılım Mimarisi İçerisinde CAN modülü bulunan bir mikrodenetleyicinin CAN protokolü kullanılarak programlanması için iki temel noktanın oluşturulması gerekir. Bunlar, bilgisayar ile mikrodenetleyiciyi birbirlerine bağlayacak olan elektronik devre yapısı:donanım ve bu yapı içerisinde çalışacak olan Yazılımdır. PIC 18F458 Mikrodenetleyici Tasarlanan CAN Modül Programlayıcı PC PCICAN-D Card CANRX CAN CAN Bus - UTP kablo Programlanacak olan Bellek Alanı Bellek Programlayıcı CANTX MCP2551 Transceiver CANL Şekil 1. Donanım Altyapısı 150
Mikrodenetleyiciler İçin Kontrol Alan Ağı Üzerinden Sistem İçi Programlayıcı Tasarımı Şekil 1 de görüldüğü üzere sistemin elektronik devre yapısı: Bilgisayar, bilgisayarın PCI ( Peripheral Component Interconnect ) slotuna takılı olan bir CAN kartı, CAN Kablosu, MCP2551 CAN Transceiver ( Alıcı Verici ) ve PIC 18F458 mikrodenetleyiciden oluşmaktadır. Donanım, bilgisayara takılı olan CAN kartının ürettiği CAN mesajlarını, UTP (Unshielded Twisted Pair) tipi bir kablo üzerinden mikrodenetleyicinin CAN girişlerine aktarabilmesi için gerekli tüm bağlantıları içerir. CAN kablosu üzerinden gelen sinyallerin, mikrodenetleyicinin anlayabileceği lojik seviyeye çevrilmesi amacıyla CAN Kablosu ve mikrodenetleyici arasında bir alıcı-verici entegre devre (MCP2551) kullanılması zorunludur. azırlanan donanımın, mikrodenetleyicinin programlanmasında kullanılabilmesi için de iki adet yazılım hazırlanmıştır. Bu yazılımlardan bir tanesi bilgisayar üzerinde diğeri ise mikrodenetleyici üzerinde çalışmaktadır. Bilgisayar üzerinde çalışan ve CAN Modül programlayıcısı ismi verilen yazılımın amacı, edef mikrodenetleyiciye gönderilecek EX dosyasını transfer işlemi için hazırlayıp bilgisayarın CAN kartı üzerinden CAN mesajları halinde mikrodenetleyiciye göndermektir. Şekil 2. de yazılımın ara yüzü verilmiştir. CAN Modül programlayıcısı, hedef mikrodenetleyiciye transfer edilecek ex dosya içerisindeki veri alanlarını bayt bayt okur. Okunan bu veriler text dosya içerisine aktarılır. Daha sonra, oluşan text dosya içerisindeki her 1 baytlık veri, CAN mesajı haline getirilerek mikrodenetleyiciye gönderilir. Dosya dönüşüm ve akış şeması şekil 3 de verilmiştir Şekil 2. Kullanıcı Ara yüzü Mikrodenetleyici üzerinde çalışacak olan program ise, CAN Modül programlayıcı yazılımı tarafından gönderilen mesajları alarak mikrodenetleyicinin ilgili bellek alanlarının programlanabilmesi amacıyla tasarlanmıştır. Bellek programlayıcı olarak adlandırılan bu yazılım, öncelikli olarak paralel programlayıcı tarafından mikrodenetleyici içerisine yüklenmiştir. Yazılım, gelen mesajların veri alanı içerisinde bulunan 1 baytlık verileri alarak bir dizi içerisine aktarmaktadır. er alınan 64 mesajdan sonra dizi içerisinde toplanmış olan veriler ilgili bellek alanı içerisine kaydedilmektedir. 64 bayttan sonra kayıt yapılmasının sebebi, kullanılan mikrodenetleyicinin yapısıyla ilgilidir. Çizelge1. Gelen Mesaj ID Tanımlamaları Gelen Mesaj ID Anlamı Yön 01 02 Mesaj transfer edilecek veri içeriyor. Transfer edilen programı çalıştır. PC den Denetleyiciye PC den Denetleyiciye Bellek programlayıcı yazılımı, PC üzerinde çalışan ve CAN Bus programlayıcısı yazılımı tarafından üretilen mesajları, ID lerine göre yorumlayarak işlem yapan bir yapıya sahiptir. Şekil 4. de bellek programlayıcı yazılımının kod alanındaki yeri gösterilmiştir. 151
A. KUTLU, İ. ÜNAL Transfer Edilecek Veri :1000000004EF00F0FFFFFFFF956AFF0E836E1A0EEC Örnek.ex 4, 239, 0, 240, 255, 255, 255, 255, 149, 106, 255, 14, 131, 110, 26, 14 Öntakı (ID) Şekil 3. Dosya Transfer İşlemleri Örnek.txt Uzunluk Text Dosyadan alınan 1 baytlık veri 00000000001 0001 04 CAN Mesaj Formatı Başla İ=0, Dizi()=0 X=True Adres = $D000 X = True? Bitir Delay (1000) Mesaj Oku(ID,DATA) ID = 1? ID = 2? Bellek Programlayıcı yazılımı, kod belleğin 0000h adresinden itibaren yüklenir. Mikrodenetleyici içerisine yüklenmiş olan program, PC tarafından gönderilen CAN mesajlarının öntakı (ID) bilgisine göre hareket eder. Çizelge 1 de gelen mesajın ID sine göre niteliği yani ne anlama geldiği belirtilmektedir. Dizi() = Data i= i + 1 I = 64? X = False CAN Bus üzerinden okunan ve mesaj ID si 01 olan her mesaj bellek programlayıcı programı tarafından programlanacak veri olarak algılanır. er gelen mesaj içerisinde 1 baytlık data bulunur. Gelen bu mesajlar içerisindeki her 1 baytlık veri, program tarafından bir dizi içerisine yüklenir. Flash_write(Adr,Dizi) Adres = Adres + 64 i = 0 Bellek Programlayıcı Yüklenecek olan Program kodlarının yeri 0000h 7FFFh Şekil 5. Bellek Programlayıcı yazılımı algoritması er 64 baytta bir, dizi içerisine yüklenen veriler, kod bellek içerisinde belirlenen bir bellek adresinden itibaren kaydedilir. Programlama işlemi bittikten sonra CAN bus üzerinden gelen ve ID si 02 olan mesaj ile hedef mikrodenetleyiciye transfer edilen kullanıcı programı çalıştırılır. Şekil 4. Bellek Programlayıcı nın Yeri Bellek programlayıcı yazılımı, Mikroelektronika firmasının ürünü olan MikroBasic Programı kullanılarak yazılmıştır. MikroBasic Programı PIC tipi mikrodenetleyiciler için kullanıcı uygulama programları geliştirmek için kullanılmaktadır. Şekil 5 te bellek programlayıcı yazılımının akış şeması verilmiştir. 152 Sonuç Bu çalışma ile CAN seri haberleşme protokolü kullanılarak içerisinde CAN modülü bulunan PIC tabanlı mikrodenetleyicilerin programlanması gerçekleştirilmiştir. Programlama için PC üzerinde bir PCI CAN kartı kullanılmış ve bu kartı kontrol edebilecek bir yazılım geliştirilmiştir. Programlama işlemi için ayrıca mikrodenetleyici üzerinde çalışacak bir yazılım tasarlanmış; her iki program etkileşimli olarak birbirleri ile haberleşerek hedef mikrodenetleyicinin program-
Mikrodenetleyiciler İçin Kontrol Alan Ağı Üzerinden Sistem İçi Programlayıcı Tasarımı lanması gerçekleştirilmiştir. Bu sistem sayesinde endüstriyel otomasyon işlerinde kullanılan PIC mikrodenetleyicilerin bulundukları yerlerde sistemden sökülmeden programlanabilmesi sağlanmıştır. Teşekkür Bu çalışma Süleyman Demirel Üniversitesi Bilimsel Araştırma Projeleri Birimi tarafından 01007-YL 05 proje numarası ile finansal destek sağlanarak gerçekleştirilmiştir. Kaynaklar Atmel, 2002a. Enhanced 8 bit MCU with CAN Controller and Flash Memory-T89c51cc01 Datasheet, 46-49 Intel, 1993. Intel 82527 Serial Communications Controller Architectural Overview Kiencke, U. 1994. Controller Area Network-from concept to reality. ICC 94, proc.1. International CAN conference, 0-11 0-19. Lawrenz, W. 1995. World-wide Status of CAN- Present and Future. proc. ICC 95 2. International CAN conference, 0-12 0-25. Microchip, 2006. PIC 18F480 Datasheet, 360 p. Philips, 1991. CAN Specification, amburg. Atmel, 2002b. T89c51cc01 UART bootloader Datasheet, Gilmour, P. S. 1991. ow to Select Tools for Microcontroller Software. IEEE Spectrum, issue. 28, No: 2, 37-39 153