Hi,
ich bin blutiger Anfänger, was vermutlich auch die Ursache für mein
Problem ist. Mein Ziel ist ein Heizkörperthermostat (HR20) mit der
Firmware OpenHR20 auszustatten. Dazu habe ich mir ein AVR Lab
geschnappt, eine JTAGICEmkII-Firmware geladen und an das Thermostat
angeschlossen. Im ersten Moment schien keine Kommunikation möglich. Nach
dem verdrehen von TDI und TDO konnt der Atmega169 identifiziert werden.
Ich habe die Batterien aus dem Thermostat genommen und speise es über
das JTAG.
So sieht meine Verkabelung aus:
1 | HR20 JTAG
|
2 |
|
3 | 1 (/RESET) ---- 3 (RST)
|
4 | 2 (PE2)
|
5 | 3 (TMS) ------- 5 (TMS)
|
6 | 4 (TCK) ------- 7 (SCK=TCK?)
|
7 | 5 (TDO) ------- 9 (TDI)
|
8 | 6 (TxD)
|
9 | 7 (RxD)
|
10 | 8 (TDI) ------- 1 (TDO)
|
11 | 9 (+Batt) ----- 2 (VREF)
|
12 | 10 (GND) ----- 10 (GND)
|
Befrage ich den m169 nach seinen Fuses erhalte ich folgende Antwort:
1 | $ avrdude -p m169 -c jtagmkII -P usb -n -v
|
2 | [...]
|
3 | avrdude: jtagmkII_getparm(): bad response to get parameter command: RSP_ILLEGAL_PARAMETER
|
4 |
|
5 | avrdude: jtagmkII_initialize(): warning: OCDEN fuse not programmed, single-byte EEPROM updates not possible
|
6 | avrdude: AVR device initialized and ready to accept instructions
|
7 |
|
8 | Reading | ################################################## | 100% 0.03s
|
9 |
|
10 | avrdude: Device signature = 0x1e9405
|
11 | avrdude: safemode: lfuse reads as 62
|
12 | avrdude: safemode: hfuse reads as 91
|
13 | avrdude: safemode: efuse reads as FD
|
14 |
|
15 | avrdude: safemode: lfuse reads as 62
|
16 | avrdude: safemode: hfuse reads as 91
|
17 | avrdude: safemode: efuse reads as FD
|
18 | avrdude: safemode: Fuses OK (E:FD, H:91, L:62)
|
19 |
|
20 | avrdude done. Thank you.
|
21 | $
|
Der OpenHR20-Code benötigt offensichtlich folgende Konfiguration des
Mikrocontrollers:
1 | $ avrdude -p m169 -c jtagmkII -P usb -U hfuse:w:0x97:m -U lfuse:w:0x62:m -U efuse:w:0xFF:m
|
Leider scheint es nicht möglich zu sein an den Fuses zu rütteln:
1 | avrdude: jtagmkII_initialize(): warning: OCDEN fuse not programmed, single-byte EEPROM updates not possible
|
2 | avrdude: AVR device initialized and ready to accept instructions
|
3 |
|
4 | Reading | ################################################## | 100% 0.03s
|
5 |
|
6 | avrdude: Device signature = 0x1e9405
|
7 | avrdude: reading input file "0x97"
|
8 | avrdude: writing hfuse (1 bytes):
|
9 |
|
10 | Writing | ################################################## | 100% 0.01s
|
11 |
|
12 | avrdude: 1 bytes of hfuse written
|
13 | avrdude: verifying hfuse memory against 0x97:
|
14 | avrdude: load data hfuse data from input file 0x97:
|
15 | avrdude: input file 0x97 contains 1 bytes
|
16 | avrdude: reading on-chip hfuse data:
|
17 |
|
18 | Reading | ################################################## | 100% 0.01s
|
19 |
|
20 | avrdude: verifying ...
|
21 | avrdude: verification error, first mismatch at byte 0x0000
|
22 | 0x91 != 0x97
|
23 | avrdude: verification error; content mismatch
|
24 |
|
25 | avrdude: safemode: hfuse changed! Was 97, and is now 91
|
26 | Would you like this fuse to be changed back? [y/n] y
|
27 | avrdude: and COULD NOT be changed
|
28 | avrdude: safemode: Fuses not recovered, sorry
|
29 |
|
30 | avrdude done. Thank you.
|
Auch der Parameter "-u" oder unterschiedliche Antworten auf die Frage
"Rückgängig oder nicht?" führen dazu, dass die Konfiguration der Fuses
unverändert bleibt.
Mache ich einen grundsätzlichen Fehler? Muss ich irgendetwas sicher
stellen damit Fuses geändert werden dürfen? Ggf. sind sogar die Werte
Unsinn. Es finden sich unterschiedliche im Netz:
http://www.mikrocontroller.net/articles/Heizungssteuerung_mit_Honeywell_HR20#Fuses
https://github.com/OpenHR20/OpenHR20/blob/master/rfmsrc/OpenHR20/flash_hr20.sh
Gruß süppchen