Reported by Michael Hochmuth:
FCalib2 overwrites always 4 Bytes in EEPROM.
For example setting a new Throttle-ID will overwrite the two bytes for the Loco-Adress with 0xFFFF.
This meanst that on FREDI 2.0 a new Loco hast to be assignd after writing the ID. On older versions
there may be other problems.
This is a problem of AvrDude (or STK500.exe) because EEPROM is written in page mode even in ISP programming.
There are three possible solutions:
1.) Wenn ich die AN AVR068 über das STK500 Protokoll lesen
erkenne ich das AvrDude das EEPROM im PageMode beschreibt.
Man sieht im Trace ja auch [06] [02] [ff] [ff]. (bei :020000000602F6
:00000001FF)
Das sollte ja nach Datenblatt auch im ByteMode gehen.
(STK500.exe macht es wohl genauso)
Das wäre eigentlich ein Bug-Report für AvrDude wert. Ich schätze
aber das dort größere Umbauten (wie neuer Kommandozeilen-Parameter)
erforderlich wäre.
2.) Wir könnten das EEPROM bis zum Ende mit 0xFF beschreiben. Dann
würde eine neuer Selbsttest laufen und die FREDI-Software
würde das EEPROM danach auf sinnvolle Werte setzten (Bei 1.9
die Lok auf 0x0000, bei 2.0 auf 0xFFFF). Danach müsste
die Lok neu zugewiesen werden und auch die Funktionstasten
neu konfiguriert werden. Würde sicher funktionieren
aber die ursprüngliche Idee war möglichst keine der
Info zu überschreiben. Das ist relativ einfach implementiert,
macht aber bei Massen-Updates sicher keinen Spaß.
3.) FCalib2 könnte das EEPROM vorher lesen und dann die geänderten
Pages komplett schreiben. Keine Änderung in AvrDude und
STK500.exe aber Aufwand in FCalib2.
"C:\Program Files (x86)\avrdude-6.3\avrdude.exe" -vvvvvv -p ATmega328P
-c avrispv2 -P com1 -U eeprom:w:ID.hex:i 1>out.txt 2>&1
Die Ausgabe des AvrDude in out.txt ist dann:
[...]
avrdude.exe: reading input file "ID.hex"
avrdude.exe: writing eeprom (2 bytes):
Writing | avrdude.exe: Send: . [1b] . [13] . [00] . [05] . [0e] . [06] .
[00] . [00] . [00] . [00] . [05]
avrdude.exe: Recv: . [1b]
avrdude.exe: Recv: . [13]
avrdude.exe: Recv: . [00]
avrdude.exe: Recv: . [02]
avrdude.exe: Recv: . [0e]
avrdude.exe: Recv: . [06]
avrdude.exe: Recv: . [00]
avrdude.exe: Recv: . [02]
avrdude.exe: Send: . [1b] . [14] . [00] . [0e] . [0e] . [15] . [00] .
[04] . [c1] . [14] . [c1] . [c2] . [a0] . [ff] . [ff] . [06] . [02] .
[ff] . [ff] l [6c]
avrdude.exe: Recv: . [1b]
avrdude.exe: Recv: . [14]
avrdude.exe: Recv: . [00]
avrdude.exe: Recv: . [02]
avrdude.exe: Recv: . [0e]
avrdude.exe: Recv: . [15]
avrdude.exe: Recv: . [00]
avrdude.exe: Recv: . [16]
############################################ | 100% 0.02s
avrdude.exe: 2 bytes of eeprom written
[...]
Mit
:020000000602F6
:00000001FF
in ID.hex.