avrdude programı kullanımı

Transkript

avrdude programı kullanımı
AVRDUDE PROGRAMI KULLANIMI
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;
avrdude -c avr910 -p m8 -P /dev/ttyUSB0 -b 115200 -t
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;
avrdude -c help
ile öğrenebilmekteyiz.
-p m8; ATmel Mega8 işlemcisi olduğunu gösteriyor. İşlemci desteğini de;
avrdude -c avr910 -p help
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:
avrdude -c avr910 -p m8 -P /dev/ttyUSB0 -b 115200 -t
komutu ile;
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9307
avrdude>
cevabı gelecek.
avrdude> help
yazarsak;
>>> help
Valid commands:
dump
read
write
erase
sig
part
:
:
:
:
:
:
dump memory : dump <memtype> <addr> <N-Bytes>
alias for dump
write memory : write <memtype> <addr> <b1> <b2> ... <bN>
perform a chip erase
display device signature bytes
display the current part information
1
send
: send a raw command : send <b1> <b2> <b3> <b4>
parms : display adjustable parameters (STK500 only)
vtarg : set <V[target]> (STK500 only)
varef : set <V[aref]> (STK500 only)
fosc
: set <oscillator frequency> (STK500 only)
sck
: set <SCK period> (STK500 only)
spi
: enter direct SPI mode
pgm
: return to programming mode
verbose : change verbosity
help
: help
?
: help
quit
: quit
Use the 'part' command to display valid memory types for use with the
'dump' and 'write' commands.
çı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 oldugu 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;
avrdude> part
>>> part
AVR Part
Chip Erase delay
PAGEL
BS2
RESET disposition
RETRY pulse
serial program mode
parallel program mode
Timeout
StabDelay
CmdexeDelay
SyncLoops
ByteDelay
PollIndex
PollValue
Memory Detail
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
ATmega8
10000 us
PD7
PC2
dedicated
SCK
yes
yes
200
100
25
32
0
3
0x53
Block Poll
Page
Polled
Memory Type Mode Delay Size Indx Paged Size
Size #Pages MinW MaxW
ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------eeprom
4
20
128
0 no
512
4
0 9000 9000 0xff 0xff
flash
33
10
64
0 yes
8192
64
128 4500 4500 0xff 0x00
lfuse
0
0
0
0 no
1
0
0 2000 2000 0x00 0x00
hfuse
0
0
0
0 no
1
0
0 2000 2000 0x00 0x00
lock
0
0
0
0 no
1
0
0 2000 2000 0x00 0x00
calibration
0
0
0
0 no
4
0
0
0
0 0x00 0x00
signature
0
0
0
0 no
3
0
0
0
0 0x00 0x00
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 ayrlımış byte miktarını gözlemliyebiliyoruz.
2
d (dump) komutu ile hafıza
avrdude> d eeprom
>>> d eeprom
0000 ff ff ff ff ff ff ff
0010 ff ff ff ff ff ff ff
0020 ff ff ff ff ff ff ff
0030 ff ff ff ff ff ff ff
içerisini okuyabiliyorduk. Mesela;
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
|................|
|................|
|................|
|................|
d komutunun kullanımı:
avrdude> d
>>> d
Usage: dump <memtype> [<addr> <len>]
şeklindedir. Eklenti belirtilmemişse <addr> degeri 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:
avrdude> d eeprom 0xA0 0x1E
>>> d eeprom 0xA0 0x1E
00a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
00b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff
|.............. |
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.
avrdude> w help
>>> w help
Usage: write <memtype> <addr> <byte1> <byte2> ... byteN>
d komutunda eklentiler [] köşeli parantez içerisindeydi. w komutunda ise yok.
köşeli parentez 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;
avrdude> w eeprom 0x00 0x0f
>>> w eeprom 0x00 0x0f
kullanılabilir. Çıktısı yoktur. Yazılıp yazılmadığını kontrol edebilmek için:
avrdude> d eeprom 0x00 0x01
>>> d eeprom 0x00 0x01
0000 0f
ş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.
avrdude> d lock
>>> d lock
0000 3f
|?
|
lock hafıza tipi zaten bir byte yer kaplamaktaydı. Hafıza tiplerinin ne kadar yer
kapladıkları part komutu ile okunabilmekteydi. part komutu çıktısındaki tabloda "Size"
sütunu.
3
Şimdi flash ve eeprom çıktılarını görelim:
avrdude> d flash
>>> d flash
0000 d8 cf f2 cf
0010 eb cf ea cf
0020 e3 cf e2 cf
0030 00 00 00 00
f1
e9
e1
00
cf
cf
cf
00
f0
e8
00
00
cf
cf
00
00
ef
e7
00
00
cf
cf
00
00
ee
e6
00
00
cf
cf
00
00
ed
e5
00
00
cf
cf
00
00
ec
e4
00
00
cf
cf
00
00
|................|
|................|
|................|
|................|
avrdude> d eeprom
>>> d eeprom
0000 ae c5 b0 d3
0010 ff ff ff ff
0020 ff ff ff ff
0030 ff ff ff ff
a1
ff
ff
ff
a2
ff
ff
ff
06
ff
ff
ff
45
ff
ff
ff
55
ff
ff
ff
aa
ff
ff
ff
12
ff
ff
ff
24
ff
ff
ff
33
ff
ff
ff
67
ff
ff
ff
20 32
ff ff
ff ff
ff
|.........
..|
|................|
|................|
|............... |
Şuan okuma/yazma açık. Kod koruma için lock hafızasına 0x00 değerini yazıyoruz.
avrdude> w lock 0x00 0x00
>>> w lock 0x00 0x00
Artık mcu kod korumaya girdi. Ancak okuma yapabiliriz.!!! Bakalım neler olacak?
avrdude> d flash 0x00 0x100
>>> d flash 0x00 0x100
0000 00 00 01 01 02 02 03 03
0010 08 08 09 09 0a 0a 0b 0b
0020 10 10 11 11 12 12 13 13
0030 18 18 19 19 1a 1a 1b 1b
0040 20 20 21 21 22 22 23 23
0050 28 28 29 29 2a 2a 2b 2b
0060 30 30 31 31 32 32 33 33
0070 38 38 39 39 3a 3a 3b 3b
0080 40 40 41 41 42 42 43 43
0090 48 48 49 49 4a 4a 4b 4b
00a0 50 50 51 51 52 52 53 53
00b0 58 58 59 59 5a 5a 5b 5b
00c0 60 60 61 61 62 62 63 63
00d0 68 68 69 69 6a 6a 6b 6b
00e0 70 70 71 71 72 72 73 73
00f0 78 78 79 79 7a 7a 7b 7b
04
0c
14
1c
24
2c
34
3c
44
4c
54
5c
64
6c
74
7c
04
0c
14
1c
24
2c
34
3c
44
4c
54
5c
64
6c
74
7c
05
0d
15
1d
25
2d
35
3d
45
4d
55
5d
65
6d
75
7d
05
0d
15
1d
25
2d
35
3d
45
4d
55
5d
65
6d
75
7d
06
0e
16
1e
26
2e
36
3e
46
4e
56
5e
66
6e
76
7e
06
0e
16
1e
26
2e
36
3e
46
4e
56
5e
66
6e
76
7e
07
0f
17
1f
27
2f
37
3f
47
4f
57
5f
67
6f
77
7f
07
0f
17
1f
27
2f
37
3f
47
4f
57
5f
67
6f
77
7f
|................|
|..
....|
|................|
|................|
| !!""##$$%%&&''|
|(())**++,,--..//|
|0011223344556677|
|8899::;;<<==>>??|
|@@AABBCCDDEEFFGG|
|HHIIJJKKLLMMNNOO|
|PPQQRRSSTTUUVVWW|
|XXYYZZ[[\\]]^^__|
|``aabbccddeeffgg|
|hhiijjkkllmmnnoo|
|ppqqrrssttuuvvww|
|xxyyzz{{||}}~~..|
avrdude> d eeprom
>>> d eeprom 0x00
0000 00 01 02 03
0010 10 11 12 13
0020 20 21 22 23
0030 30 31 32 33
0040 40 41 42 43
0050 50 51 52 53
0060 60 61 62 63
0070 70 71 72 73
0080 80 81 82 83
0090 90 91 92 93
00a0 a0 a1 a2 a3
00b0 b0 b1 b2 b3
00c0 c0 c1 c2 c3
00d0 d0 d1 d2 d3
00e0 e0 e1 e2 e3
00f0 f0 f1 f2 f3
08
18
28
38
48
58
68
78
88
98
a8
b8
c8
d8
e8
f8
09
19
29
39
49
59
69
79
89
99
a9
b9
c9
d9
e9
f9
0a
1a
2a
3a
4a
5a
6a
7a
8a
9a
aa
ba
ca
da
ea
fa
0b
1b
2b
3b
4b
5b
6b
7b
8b
9b
ab
bb
cb
db
eb
fb
0c
1c
2c
3c
4c
5c
6c
7c
8c
9c
ac
bc
cc
dc
ec
fc
0d
1d
2d
3d
4d
5d
6d
7d
8d
9d
ad
bd
cd
dd
ed
fd
0e
1e
2e
3e
4e
5e
6e
7e
8e
9e
ae
be
ce
de
ee
fe
0f
1f
2f
3f
4f
5f
6f
7f
8f
9f
af
bf
cf
df
ef
fe
|.........
..|
|................|
| !"#$%&'()*+,-./|
|0123456789:;<=>?|
|@ABCDEFGHIJKLMNO|
|PQRSTUVWXYZ[\]^_|
|`abcdefghijklmno|
|pqrstuvwxyz{|}~.|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
0x00 0x100
0x100
04 05 06 07
14 15 16 17
24 25 26 27
34 35 36 37
44 45 46 47
54 55 56 57
64 65 66 67
74 75 76 77
84 85 86 87
94 95 96 97
a4 a5 a6 a7
b4 b5 b6 b7
c4 c5 c6 c7
d4 d5 d6 d7
e4 e5 e6 e7
f4 f5 f6 f7
avrdude> d lock
>>> d lock
4
0000
00
|.
|
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.
avrdude> erase
>>> erase
avrdude: erasing chip
avrdude> d flash 0x00 0x100
>>> d flash 0x00 0x100
0000 ff ff ff ff ff ff ff ff
0010 ff ff ff ff ff ff ff ff
0020 ff ff ff ff ff ff ff ff
0030 ff ff ff ff ff ff ff ff
0040 ff ff ff ff ff ff ff ff
0050 ff ff ff ff ff ff ff ff
0060 ff ff ff ff ff ff ff ff
0070 ff ff ff ff ff ff ff ff
0080 ff ff ff ff ff ff ff ff
0090 ff ff ff ff ff ff ff ff
00a0 ff ff ff ff ff ff ff ff
00b0 ff ff ff ff ff ff ff ff
00c0 ff ff ff ff ff ff ff ff
00d0 ff ff ff ff ff ff ff ff
00e0 ff ff ff ff ff ff ff ff
00f0 ff ff ff ff ff ff ff ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
avrdude> d eeprom
>>> d eeprom 0x00
0000 ff ff ff ff
0010 ff ff ff ff
0020 ff ff ff ff
0030 ff ff ff ff
0040 ff ff ff ff
0050 ff ff ff ff
0060 ff ff ff ff
0070 ff ff ff ff
0080 ff ff ff ff
0090 ff ff ff ff
00a0 ff ff ff ff
00b0 ff ff ff ff
00c0 ff ff ff ff
00d0 ff ff ff ff
00e0 ff ff ff ff
00f0 ff ff ff ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
ff
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
|................|
0x00 0x100
0x100
ff ff ff ff
ff ff ff ff
ff ff ff ff
ff ff ff ff
ff ff ff ff
ff ff ff ff
ff ff ff ff
ff ff ff ff
ff ff ff ff
ff ff ff ff
ff ff ff ff
ff ff ff ff
ff ff ff ff
ff ff ff ff
ff ff ff ff
ff ff ff ff
avrdude> d lock
>>> d lock
0000 3f
|?
Son olarak mcu terminalini q komutu ile terk ediyoruz...
Mehmet BİLGİ
23-07-2015
http://savannah.nongnu.org/projects/avrdude/
5
|

Benzer belgeler

spécimen - Nonpareille

spécimen - Nonpareille comes from Rey’s own collection; the biggest ones are designed by Perrin himself. His ‘Augustaux’ are considered as one of the first revivals in the history of typography. The new style of types he...

Detaylı