AvrDude Programı kullanımı

avrdude programının konsol üzerinden nasıl kullanılacağını anlatmaya çalışacağım. Bir uzman değilim. Ancak bildiğim kısımları elimden geldiğince açıklamak istiyorum. Linux kullanıcısı olarak bu ortam üzerinden anlatacağım. Ancak Linux üzerinde yapılanların tamamı diğer işletim sistemleri için de geçerli olabilmektedir.

Sadece işletim sistemine özgü değerler değişecektir: Linux için gecerli olan usb seri dönüştürücüleri yolu; /dev/ttyUSBx şeklindedir. Bu MS Win için ise COMx: olarak değiştirilecektir.

Konsolda;

yazıp entere basıyoruz ve avr içine terminal olarak bağlanıyoruz. Burada -c ile programlayıcıyı gösteriyoruz, farklı programlayıcılar için uygun değerler yazılacaktır. Örneğin usbasp.

Programlayıcı desteğini;

ile öğrenebilmekteyiz.

-p m8; ATmel Mega8 işlemcisi olduğunu gösteriyor. İşlemci desteğini de;

ile öğrenebiliriz. Yine -c seçeneği değeri kendi programlayıcımızın ismi olacak.

-P seçeneği; benim kullandığım programlayıcı seri port üzerinden çalıştığı için hangi yolu kullandığını belirttim. MS Win için bu; COM1:, COM2: gibi olabilir.

Ancak bazı programlayıcılar sadece usb üzerinden bağlandıkları için bu seçeneği kullanmaya gerek yoktur. Örneğin; usbasp

-b ile seri portun hızını belirtiyoruz. Yine aynı şekilde kullandığımız programlayıcının özellikleri ile alakalı. Belkide kullanılmayabilir.

-t ile de mcu ya terminal ile bağlanıyoruz.

Şimdi mcu içerisine terminal üzerinden olarak bağlanalım:

komutu ile;

cevabı gelecek.

yazarsak;

çıktısını alırız.

dump ya da d, belirtilen hafıza tipinin içeriğini gösterir. write ya da w, belirtilen hafıza tipinin belirlenen bölgesine belirtilen değeri yazar.

sig mcu imzasını verir, yani mega8, mega168, vs. olduğu anlaşılabilir…
part mcu açıklamaları ve memory(hafıza) tiplerini alabiliriz.
Diğerlerini fazlaca bilmiyorum. Kurcalamıyorum.

Şimdi:
part ile aldığımız sonuca göre;

hafıza tiplerini görebiliyoruz. Bizi ilgilendirenler özellikle hafıza tipleri. eeprom malum üzere kalıcı hafıza, flash yine malum program
belleğini göstermektedir. lfuse, ve hfuse mcu’ nun çalışma şartlarını belirliyor. Bazı mcu’ larda efuse‘ de bulunmakta.

Bir de son olarak lock hafıza tipini görüyoruz. Diğerleri yine şu anki konumuz dışında.
Size sütunu, ilgili hafızalar için ayrılmış byte miktarını gözlemleyebiliyoruz.

d (dump) komutu ile hafıza içerisini okuyabiliyorduk. Mesela;

d komutunun kullanımı:

şeklindedir. Eklenti belirtilmemişse <addr> değeri en son nerede kalmış ise bu noktadan itibaren 0x3F(Dec:64) değer gösterir.

Dikkat edilirse dump komutu eklentileri köşeli parantez içerisindedir. Bunun anlamı bu değerler seçimliktir. Ama biri kullanılacaksa diğeri de kullanılmalıdır. Yani ya hiç seçenek kullanmayacağız yada tüm seçenekleri kullanacağız.

Biz değer verirsek:

bu hal görülebilir.

eeprom yerine flash, hfuse, lfuse, lock, vb. yazmak mümkün olabilmektedir…

w (write) komutu ise benzer ekler alacaktır.

d komutunda eklentiler [] köşeli parantez içerisindeydi. w komutunda ise yok. Köşeli parantez içerisindekiler istenirse yazılmayabilir. Ancak ön seçimlik değerler kabul edilmiş olur.

w komutunda ise yazılması gerekenler; hafıza tipi, adres ve hafızaya eklenecek birer byte lik değerler.

Alışkanlık olarak değerleri hexadecimal olarak girmeye çalışıyorum. Ama bazen decimal olarak da girebiliyoruz. Her iki yöntemi de ayrı ayrı ya da karışık olarak kullanmak mümkün olmaktadır.

Eeproma bir byte değer yazmak için;

kullanılabilir.

Çıktısı yoktur. Yazılıp yazılmadığını kontrol edebilmek için:

şeklinde

çıktı alınabilir.

Gelelim lock hafıza tipine. Ben genelde direkt kilitleme yapıyorum. Diğer ek özelliklere ihtiyacım olmadı kilitleme ile ilgili.

lock hafıza tipi zaten bir byte yer kaplamaktaydı.

Hafıza tiplerinin ne kadar yer kapladıkları part komutu ile okunabilmekte idi. part komutu çıktısındaki tabloda “Size” sütunu.

Şimdi flash ve eeprom çıktılarını görelim:

Şu an okuma/yazma açık. Kod koruma için lock hafızasına 0x00 değerini yazıyoruz.

Artık mcu kod korumaya girdi. Ancak okuma yapabiliriz.!!! Bakalım neler olacak?

Dikkatimizi çeken nedir?

Mcu kod korumaya girdikten sonra okuduğumuz değerler artık bu şekildedir. lock hafızası da artık 0x00 değerini saklamaktadır.

Peki kod koruması nasıl kaldırılabilir?

Sadece erase komutu ile lock hafızası 0x3F değerine gelir.
Ancak flash ve eeprom hafızalarındaki tüm veri kaybedilmiş olacaktır.

Son olarak mcu terminalini q komutu ile terk ediyoruz…

 
Mehmet BİLGİ
23-07-2015

http://savannah.nongnu.org/projects/avrdude/