Moin,
ich habe hier eine kommerzielle "Linie" von Prototypen einer Hardware
für die ich Firmware zu schreiben habe. Aus Elektronischer Sicht nichts
Besonderes, es ist jeweils ein AtXMega(128A3,256BU) der ein paar
Sensoren abfragt, rechnet und auf unterschiedliche Arten auf Displays
was anzeigt.
Gestern habe ich einen neuen Branch der SW anfangen wollen, habe mir
u.A.
Makefiles "um die Ecke" kopiert und modifiziert..und damit einen
AtXMega128A3 erfolgreich "erschossen".
Ich benutze zum programmieren ein Jtag Ice MKII und avrdude 6.3.
Was hab ich gemacht? Ich habe make jtagdis eingehebelt:
1 | jtagdis: # Disable JTAG
|
2 | avrdude -p ${MCU} -c ${PROGRAMMER} -P ${PRGINTERFACE} -u -U fuse4:w:0xff:m
|
3 | sleep 3
|
4 | # enable Brownout detector 3,0V
|
5 | avrdude -p ${MCU} -c ${PROGRAMMER} -P ${PRGINTERFACE} -u -U fuse5:w:0xe8:m
|
Das hat auch funktioniert..nur war hinterher der Chip tot. Ich habe über
ein evtl. defektes FFC Kabel am Jtag Ice philosophiert, einen Xmega
woanders runter und auf die betreffende Hardware wieder drauf gelötet.
Danach habe ich mir die Fuses im funktionierenden Prozessor angesehen:
1 | $ avrdude -p atxmega128a3 -c jtag2pdi -P usb -t
|
2 |
|
3 | avrdude: AVR device initialized and ready to accept instructions
|
4 |
|
5 | Reading | ################################################## | 100%
|
6 | 0.02s
|
7 |
|
8 | avrdude: Device signature = 0x1e9742 (probably x128a3u)
|
9 | avrdude> d fuse0
|
10 | >>> d fuse0
|
11 | 0000 ff |.
|
12 | |
|
13 |
|
14 | avrdude> d fuse1
|
15 | >>> d fuse1
|
16 | 0000 00 |.
|
17 | |
|
18 |
|
19 | avrdude> d fuse2
|
20 | >>> d fuse2
|
21 | 0000 ff |.
|
22 | |
|
23 |
|
24 | avrdude> d fuse3
|
25 | >>> d fuse3
|
26 | "fuse3" memory type not defined for part "ATxmega128A3"
|
27 | avrdude> d fuse4
|
28 | >>> d fuse4
|
29 | 0000 ff |.
|
30 | |
|
31 |
|
32 | avrdude> d fuse5
|
33 | >>> d fuse5
|
34 | 0000 ff |.
|
35 | |
|
36 |
|
37 | avrdude> q
|
38 | >>> q
|
So weit Alles ok.
Was war denn nun los? Nochmal probiert:
1 | $ make jtagdis
|
2 | avrdude -p atxmega128a3 -c jtag2pdi -P usb -u -U fuse4:w:0xff:m
|
3 |
|
4 | avrdude: AVR device initialized and ready to accept instructions
|
5 |
|
6 | Reading | ################################################## | 100%
|
7 | 0.02s
|
8 |
|
9 | avrdude: Device signature = 0x1e9742 (probably x128a3u)
|
10 | avrdude: NOTE: Programmer supports page erase for Xmega devices.
|
11 | Each page will be erased before programming it, but no chip
|
12 | erase is performed.
|
13 | To disable page erases, specify the -D option; for a
|
14 | chip-erase, use the -e option.
|
15 | avrdude: reading input file "0xff"
|
16 | avrdude: writing fuse4 (1 bytes):
|
17 |
|
18 | Writing | ################################################## | 100%
|
19 | 0.01s
|
20 |
|
21 | avrdude: 1 bytes of fuse4 written
|
22 | avrdude: verifying fuse4 memory against 0xff:
|
23 | avrdude: load data fuse4 data from input file 0xff:
|
24 | avrdude: input file 0xff contains 1 bytes
|
25 | avrdude: reading on-chip fuse4 data:
|
26 |
|
27 | Reading | ################################################## | 100%
|
28 | 0.00s
|
29 |
|
30 | avrdude: verifying ...
|
31 | avrdude: 1 bytes of fuse4 verified
|
32 |
|
33 | avrdude done. Thank you.
|
34 |
|
35 | sleep 3
|
36 | avrdude -p atxmega128a3 -c jtag2pdi -P usb -u -U fuse5:w:0xe8:m
|
37 |
|
38 | avrdude: AVR device initialized and ready to accept instructions
|
39 |
|
40 | Reading | ################################################## | 100%
|
41 | 0.02s
|
42 |
|
43 | avrdude: Device signature = 0x1e9742 (probably x128a3u)
|
44 | avrdude: NOTE: Programmer supports page erase for Xmega devices.
|
45 | Each page will be erased before programming it, but no chip
|
46 | erase is performed.
|
47 | To disable page erases, specify the -D option; for a
|
48 | chip-erase, use the -e option.
|
49 | avrdude: reading input file "0xe8"
|
50 | avrdude: writing fuse5 (1 bytes):
|
51 |
|
52 | Writing | ################################################## | 100%
|
53 | 0.01s
|
54 |
|
55 | avrdude: 1 bytes of fuse5 written
|
56 | avrdude: verifying fuse5 memory against 0xe8:
|
57 | avrdude: load data fuse5 data from input file 0xe8:
|
58 | avrdude: input file 0xe8 contains 1 bytes
|
59 | avrdude: reading on-chip fuse5 data:
|
60 |
|
61 | Reading | ################################################## | 100%
|
62 | 0.00s
|
63 |
|
64 | avrdude: verifying ...
|
65 | avrdude: verification error, first mismatch at byte 0x0000
|
66 | 0x00 != 0xe8
|
67 | avrdude: verification error; content mismatch
|
68 | avrdude: jtagmkII_program_disable(): bad response to leave progmode
|
69 | command: RSP_FAILED
|
70 |
|
71 | avrdude done. Thank you.
|
72 |
|
73 | *** Error code 1
|
74 |
|
75 | Stop.
|
76 | make: stopped in /usr/home/holm/....O-NET/src
|
77 | $
|
78 | $ avrdude -p atxmega128a3 -c jtag2pdi -P usb -e
|
79 | avrdude: jtagmkII_setparm(): bad response to set parameter command:
|
80 | RSP_FAILED
|
81 |
|
82 | avrdude done. Thank you.
|
83 |
|
84 | $
|
...hmmm :-|
Ich habe damit möglicherweise als Letztes AtXmega256A3BU erfolgreich
programmiert..aber die 128A3 kann man damit wohl abschießen.
Lt. AtXmega-A Manual ist fusebyte 5 definiert aus BODACT
[5..4],EESAVE[3] und BODLEVEL[2..0]. Davon sollte Nichts den Prozessor
abschießen...
Ich habe Jörg (Tm) angerufen, konnte er sich auch nicht erklären und hat
abends experimentiert für mich:
>As Holm Tiffe wrote:
>
>> ..damit hat der sich nun auf die selbe Art und Weise abgemeldet wie
>> der Andere.
>
>Ich habe meinen hier auch erstmal tot gelegt.
>
(Sorry für das nicht authorisierte Zitat Jörg)
Was zur Hölle ist denn hier los? Probleme mit dem Kabel meines JTAG Ice
kann ich wohl erst mal ausschließen..
Hat das Problem schon mal Jemand gesehen und weiß evtl. wie man die
Prozessoren wieder zum Leben erweckt? Jörg wird heute probieren seinen
Proz. mit Amtel-Studio wieder zu erwecken...ich bin gespannt.
Ich setze mit 0xe8 eigentlich nur den BOD in Betrieb und den Level auf
3,2V ..sollte der Prozessor sich irren und die Speisung als zu niedrig
ansehen? ...bei Jörg auch?
Gruß,
Holm