Forum: Mikrocontroller und Digitale Elektronik HEX-file mit STK500 nicht flashbar


von SoLaLa (Gast)


Angehängte Dateien:

Lesenswert?

hallöle,
ich hab den uralten STK500v1 aus dem Jahr 1783 oder so... (1783 war ein 
hervorragendes Jahr...:-)
Im Lauf der Zeit hab ich damit immer mal wieder kleine Minis in 
Assembler mit dem AVRstudio3 und 4 programmiert... immer wieder ist es 
mal vorgekommen, daß sich die Kiste mitten beim Flashvorgang weggehängt 
hat.
meistens reichte es dann den ISP-Takt mal von (meinen normalen)56 auf 
115 oder auf 4 kHz zu verändern und dann lief das Flashen des jeweiligen 
Files wieder anstandslos durch. Auch warens mal Inkompatibiläten der 
verschiedenen Softwarestände (AVRstudio3.xx und 4.xx) und auch 
verschiedene PCs...

ABER: das HEXfile aus dem Anhang (erzeugt mit WinAVR20070122 unter 
AVRstudio4.14-598) läßt sich nicht flashen... egal wie und was ich 
anstelle, es bricht mittendrin ab. Das File ist zwar kompiliert für nen 
Mega64, aber ich habs auch mal mit nem Mega16 probiert... gleiches 
Ergebnis, Abbruch irgendwo mittendrin. Wenn ich den mega64 danach 
auslese, dann sehe ich, daß etwa 1a00 bis 1e00 words geflasht wurden 
(variiert immer etwas) und dann der Abbruch kam.

Mit Ponyprog2000 läßt sich das File einwandfrei (so wie alle anderen 
auch) flashen und das Programm läuft auch korrekt... dauert mir aber 
ehrlich gesagt viiiiiiiel zu lange.
Kennt jemand dieses Verhalten, bzw. weiß jemand wo hier der Fehler 
liegt?

von Rosettenhengst (Gast)


Lesenswert?

Hi,

lässt sich problemlos am ATSAM7SE512-EK raufspielen. Habe das 
Olimex-USB-JTAG dazu verwendet.

von Peter D. (peda)


Lesenswert?

SoLaLa wrote:
> hallöle,
> ich hab den uralten STK500v1 aus dem Jahr 1783

Kann nicht sein.
Den AVR gibts ja erst seit 1997 und das STK500 seit 2000.


Hast Du denn auch im STK500 die Firmware updaten lassen?


Peter

von SoLaLa (Gast)


Lesenswert?

hallo Peter,
STK500 hat version ..0A
das interessante ist ja, wenn ich am C code mal wieder n bissi was 
ändere, dann läuft das anstandslos durch, auch mit 460k ISPfrequenz. 
Allgemein möcht ich sogar behaupten WENN das proggen klappt, dann auch 
mit allen möglichen geschwindigkeiten. manchmal bekomm ich aber hexfiles 
die nicht auf Anhieb flashbar sind (und dann nach umstellen auf 4kHz 
sich doch flashen lassen).
Aber dieses eine ist dermaßen hartnäckig :-) geht einfach nicht... und 
deshalb interessiert mich halt das warum.
ich hatte da irgendwo mal was gelesen mit $FF oder $F0 oder sowas genau 
an eine Pagegrenze. Aber das war nicht auf STK500 bezogen sondern auf 
irgendnen anderen ISPprogger

von SoLaLa (Gast)


Lesenswert?

@Rosettenhengst:
danke für die Info... aber JTAG wär ja auch ganz fies, wenn das nicht 
ginge :-)
für alle anderen die gerad n bischen rumflashen möchten:
bitte mal kurz ausprobieren ob sich das ding auf nem STK500 oder 
kompatibel auf nen mega64 flashen läßt.

von Kai G. (runtimeterror)


Lesenswert?

Wie hast du den ATmega64 an das STK getüddelt?

Kann das STK die Kennung und die Fuses korrekt auslesen?

von Kai G. (runtimeterror)


Lesenswert?

Ich kann es leider nicht testen, da ich weder einen ATmega64, noch ein 
passendes Adapter habe.

von SoLaLa (Gast)


Lesenswert?

ok, hier nochmal n paar infos:

Detecting on 'COM1'...
STK500 with V2 firmware found on COM1
Getting revisions.. HW: 0x02, SW Major: 0x02, SW Minor: 0x0a .. OK
Getting isp parameter.. SD=0x02 .. OK  ===>115kHz

Mega16 auf internem Sockel:
Setting mode and device parameters.. OK!
Entering programming mode.. OK!
Reading signature .. 0x1E, 0x94, 0x03 .. OK!
Leaving programming mode.. OK!

Mega64 auf externem Board:
Setting mode and device parameters.. OK!
Entering programming mode.. OK!
Reading signature .. 0x1E, 0x96, 0x02 .. OK!
Leaving programming mode.. OK!

5V, 16MHz Quarz
Fuses:
Entering programming mode.. OK!
Reading fuses address 0 to 2.. 0xBE, 0xDF, 0xFF .. OK!
Leaving programming mode.. OK!

BODEN war auch schon abgeschaltet, JTAG war auch schon mal probehalber 
eingeschaltet (mußte aber wieder aus, weil ich den PORTF brauche)
SUT_CKSEL war auch schon auf 16k+64ms
hier mal wieder geändert:
Entering programming mode.. OK!
Writing fuses address 0 to 2.. 0xFF, 0xDF, 0xFF .. OK!
Reading fuses address 0 to 2.. 0xFF, 0xDF, 0xFF .. OK!

Fuse bits verification.. OK
Leaving programming mode.. OK!

auf "PROGRAM" geklickt (mit auto erase, ist aber egal, 20mal manuelles 
Löschen vorher bringt auch nix):

Getting isp parameter.. SD=0x02 .. OKOK
Reading FLASH input file.. OK
Setting mode and device parameters.. OK!
Entering programming mode.. OK!
Erasing device.. OK!
Programming FLASH ..      FAILED!   ===> hier läuft jetzt der schöne 
blaue Balken... leider nicht bis zum Schluß durch, sondern bleibt 
mittendrin irgendwo stehen

Leaving programming mode.. FAILED!

zackbummweg... LEDleuchtet orange und nur n Power off/on bringt wieder 
leben in die Kiste.

von Peter D. (peda)


Lesenswert?

Vielleicht ist Dein Netzteil zu schwach und die Spannung aufm STK bricht 
ein.
Wichtig ist auch, daß das Netzteil zum STK erdfrei ist.
Die Erdverbindung darf ausschließlich über Pin 5 der RS-232 erfolgen und 
nirgends anders.
Ideal sind alte Wandwarzen (z.B. 12V/300mA).


Peter

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Da du den ATmega64 offenbar ja extern hast, kommen weitere Fragen auf:

. saubere Masseverbindungen
. nicht zu lange ISP-Kabel
. ordentliche Abblockung des ATmega64

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

ATmega64 habe ich gerade nicht, nur einen ATmega128 (in einem STK501
montiert):
1
% avrdude -p m128 -c stk500v2 -P /dev/ttyS0 -U ~/download/AccuControl.hex 
2
3
avrdude: AVR device initialized and ready to accept instructions
4
5
Reading | ################################################## | 100% 0.01s
6
7
avrdude: Device signature = 0x1e9702
8
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
9
         To disable this feature, specify the -D option.
10
avrdude: erasing chip
11
avrdude: reading input file "/home/jwunsch/download/AccuControl.hex"
12
avrdude: input file /home/jwunsch/download/AccuControl.hex auto detected as Intel Hex
13
avrdude: writing flash (7968 bytes):
14
15
Writing | ################################################## | 100% 10.94s
16
17
avrdude: 7968 bytes of flash written
18
avrdude: verifying flash memory against /home/jwunsch/download/AccuControl.hex:
19
avrdude: load data flash data from input file /home/jwunsch/download/AccuControl.hex:
20
avrdude: input file /home/jwunsch/download/AccuControl.hex auto detected as Intel Hex
21
avrdude: input file /home/jwunsch/download/AccuControl.hex contains 7968 bytes
22
avrdude: reading on-chip flash data:
23
24
Reading | ################################################## | 100% 10.09s
25
26
avrdude: verifying ...
27
avrdude: 7968 bytes of flash verified
28
29
avrdude: safemode: Fuses OK
30
31
avrdude done.  Thank you.

Wenn du mir erzählst, was ich damit machen soll, kann ich noch einen
Funktionstest vornehmen. ;-)  Der ATmega128 sollte zum ATmega64
binärkompatibel sein.

von SoLaLa (Gast)


Lesenswert?

Danke mal für die vielen Tips und Danke Jörg, daß Du das mal eben hast 
durchlaufen lassen.
Ich hab gestern das ganze mal genauer untersucht:
es ist KEIN analoges Problem (Netzteil, Erdung, Entkopplung usw...)
die Versorgungsspannung (auf dem externen Board genauso wie die vom 
STK500) zeigt mir n kleinen 50mV ripple im 100ns bereich, sonst nix.

Ich denke, bin mir mittlerweile ziemlich sicher, daß es ein Problem der 
STK500 Software ist (Probleme der seriellen Schnittstelle mit XP hab ich 
mal durch Test an nem Win98 Rechner ausgeschlossen, der das gleiche 
Verhalten zeigt)

Nachdem ich (danke an dieses Forum) das Logging aktivieren konnte, 
zeigte sich, daß o.g. HEXfile beim flashen immer exakt an der selben 
Stelle hängenbleibt:
1
Receiving packet 06/27/2008 02:09:24.171
2
(10000ms) < 1B 51 
3
(expected 3 more bytes but timed out)
4
Sequence number 81, message size n/a, checksum n/a
5
No data in packet
6
Returned status: Client: Total timeout exceeded (PC side gave up)
Wenn ich dann im Source beispielsweise innerhalb einer Stringkonstante 
nur einen einzigen Buchstaben ändere, dann läuft das flashen anstandslos 
durch. Ändere ich den Buchstaben wieder auf den vorherigen Inhalt, dann 
bleibts flashen wieder reproduzierbar an exakt obiger Stelle hängen.

von SoLaLa (Gast)


Lesenswert?

hallöle an alle interessierten :-)

ich hab noch n bissi Info und glaube, daß das Problem tatsächlich die 
STK500 Software ist. Ich hab das o.g. Hexfile ---mal wieder--- mit dem 
ponyprog in den mega64 geschaufelt. Dann das mega64board wieder an den 
STK500 gehängt und mit AVRstudio connected.
Ich hab jetzt KEINEN ERASE veranlaßt, sondern schlichtweg nur auf 
"program" geklickt... wie gewohnt bleibt der Flashvorgang mit 
Fehlermeldung kurz vorm Ende stehen und bricht ab.
Danach hab ich den Verify gemacht und eben festgestellt, daß das File 
immer noch vollständig im chip vorhanden war. (wurde ja auch nur 
"drüberkopiert").
Für mich bedeutet das jetzt, daß NICHT das flashen des chips selbst, 
sondern die Kommunikation zwischen STK500 und PC bzw. die Verarbeitung 
der übertragenen Sequenzen im STK500 selbst den Abbruch verursacht.

irgendwelche Ideen?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

SoLaLa wrote:

> ich hab noch n bissi Info und glaube, daß das Problem tatsächlich die
> STK500 Software ist.

Oder in deinen seriellen Treibern.

Gegenbeweis:
1
% avrdude -p m64 -c stk500v2 -P /dev/cuad0 -Fv -U /tmp/AccuControl.hex
2
3
avrdude: Version 5.6cvs, compiled on Jun 13 2008 at 23:21:15
4
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
5
6
         System wide configuration file is "/usr/local/etc/avrdude.conf"
7
         User configuration file is "/home/joerg/.avrduderc"
8
9
         Using Port                    : /dev/cuad0
10
         Using Programmer              : stk500v2
11
         AVR Part                      : ATMEGA64
12
         Chip Erase delay              : 9000 us
13
         PAGEL                         : PD7
14
         BS2                           : PA0
15
         RESET disposition             : dedicated
16
         RETRY pulse                   : SCK
17
         serial program mode           : yes
18
         parallel program mode         : yes
19
         Timeout                       : 200
20
         StabDelay                     : 100
21
         CmdexeDelay                   : 25
22
         SyncLoops                     : 32
23
         ByteDelay                     : 0
24
         PollIndex                     : 3
25
         PollValue                     : 0x53
26
         Memory Detail                 :
27
28
                                  Block Poll               Page                       Polled
29
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
30
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
31
           eeprom         4    20    64    0 no       2048    8      0  9000  9000 0xff 0xff
32
           flash         33     6   128    0 yes     65536  256    256  4500  4500 0xff 0xff
33
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
34
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
35
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
36
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
37
           calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00
38
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
39
40
         Programmer Type : STK500V2
41
         Description     : Atmel STK500 Version 2.x firmware
42
         Programmer Model: STK500
43
         Hardware Version: 2
44
         Firmware Version Master : 2.10
45
         Topcard         : STK501
46
         Vtarget         : 3.1 V
47
         SCK period      : 10.9 us
48
         Varef           : 3.0 V
49
         Oscillator      : 3.686 MHz
50
51
avrdude: AVR device initialized and ready to accept instructions
52
53
Reading | ################################################## | 100% 0.02s
54
55
avrdude: Device signature = 0x1e9702
56
avrdude: Expected signature for ATMEGA64 is 1E 96 02
57
avrdude: safemode: lfuse reads as E3
58
avrdude: safemode: hfuse reads as 11
59
avrdude: safemode: efuse reads as FF
60
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
61
         To disable this feature, specify the -D option.
62
avrdude: erasing chip
63
avrdude: reading input file "/tmp/AccuControl.hex"
64
avrdude: input file /tmp/AccuControl.hex auto detected as Intel Hex
65
avrdude: writing flash (7968 bytes):
66
67
Writing | ################################################## | 100% 11.01s
68
69
avrdude: 7968 bytes of flash written
70
avrdude: verifying flash memory against /tmp/AccuControl.hex:
71
avrdude: load data flash data from input file /tmp/AccuControl.hex:
72
avrdude: input file /tmp/AccuControl.hex auto detected as Intel Hex
73
avrdude: input file /tmp/AccuControl.hex contains 7968 bytes
74
avrdude: reading on-chip flash data:
75
76
Reading | ################################################## | 100% 10.18s
77
78
avrdude: verifying ...
79
avrdude: 7968 bytes of flash verified
80
81
avrdude: safemode: lfuse reads as E3
82
avrdude: safemode: hfuse reads as 11
83
avrdude: safemode: efuse reads as FF
84
avrdude: safemode: Fuses OK
85
86
avrdude done.  Thank you.

Ich habe ihm exta noch einen ATmega64 gefaket (und dann mit -F zum
Weitermachen gezwungen, da ja ein ATmega128 drin ist), damit er
intern exakt so arbeitet wie bei einem ATmega64.  Du kannst in den
Ausschriften auch sehen, dass meine Firmware mit 2.10 exakt deiner
(AVR Studio: 0x02 0x0a) entspricht.

von Peter D. (peda)


Lesenswert?

Ich hab Dein Hex auch flashen können, aber nur in nen ATMega168, da ich 
keinen größeren habe.

Mein STK500 hat HW: 02, SW: 02,0a

SoLaLa wrote:
> irgendwelche Ideen?

Wenn Du nen Bootloader in den Chip brennst, kannst Du das Hex dann per 
Bootloader flashen.


Peter

von SoLaLa (Gast)


Lesenswert?

hi ihr lieben mitfühlenden :-)

ich hab soeben den 4. (den vierten) PC getestet mit gleichem Ergebnis... 
Abbruch
das waren jetzt: Asus A7V@1GHz mit win98SE, altes Gericom 1st 
Supersonic@1GHz mit WinXP HomeSP2 (das hat noch ne serielle), AsRock 
K7VT4A@2,6GHz winXP HomeSP2 und dieser ist jetzt n Asus P5LD2@3,46GHz...
sniffsniff...

achja: zwischenzeitlich hatte ich dann auch mal den Weg über AVRdude 
gemacht (unter WinXP)... es lief ein wenig besser, ließ sich manchmal 
sofort, manchmal nachm 3. Anlauf flashen, manchmal aber auch wieder 
garnicht... Um mal wieder ins Jahr 1783 zurückzufallen:
" Das ist Teufelswerk!"

hmmmm... ich werd mir gelegentlich mal was zum Loggen der seriellen 
zusammenstöpseln

von SoLaLa (Gast)


Lesenswert?

ahja... das mit dem Bootloader war ja auch ne nennenswerte Idee, muß ich 
mir mal zu Gemüte führen aber gleich ne Frage vorweg:
Wenn der Bootloader dann da drauf ist, wird ab dann immer noch über das 
STK500 mit serieller Schnittstelle das Hauptprogramm übertragen, also 
das STK500-Protokoll benutzt? Wenn ja, dann wäre es n ausgiebigen Test 
wert.

von Peter D. (peda)


Lesenswert?

SoLaLa wrote:

> Wenn der Bootloader dann da drauf ist, wird ab dann immer noch über das
> STK500 mit serieller Schnittstelle das Hauptprogramm übertragen, also
> das STK500-Protokoll benutzt? Wenn ja, dann wäre es n ausgiebigen Test
> wert.

Das Übertragen erfolgt dann über RS232 SPARE.

Mein Bootloader benutzt nicht das STK500-Protokoll, da es benötigte 
Funktionen nicht unterstützt (Autobauding, Eindrahtmodus, 
Verbindungsaufbau durch den AVR innerhalb 0,3s nach Poweron-Reset).


Peter


P.S.:
Ein RS232-Sniffer:
http://www.serial-port-monitor.com/free-serial-port-monitor-product-details.html

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

SoLaLa wrote:

> achja: zwischenzeitlich hatte ich dann auch mal den Weg über AVRdude
> gemacht (unter WinXP)... es lief ein wenig besser, ließ sich manchmal
> sofort, manchmal nachm 3. Anlauf flashen, manchmal aber auch wieder
> garnicht...

Was passierte, wenn es sich nicht flashen ließ?  Auch wieder compare
errors?

Ist schon irgendwie seltsam, dass alle anderen deine Hexfiles benutzen
können.

von SoLaLa (Gast)


Lesenswert?

Zwischenbericht:
-ISPheader für den 90S8535 auf den SK500 gelötet
-Reset und MCUreset verbogen,
-90S1200 mit dauerLOW stillgelegt
-STK500_90S8535.hex mit Ponyprog geflasht und verifiziert
-auch der EEprom inhalt ist vorher sauber leer und wird dann nach dem 
ersten Start mit den Hard-und Software-Versionsnummern beschrieben (und 
noch n paar andere Sachen, denke mal Takt-/Oszillatorsettings, Vcc/Vtg 
und sowas)
-Verhalten danach beim Programmieren des obigen hexfiles--->keine 
Änderung


@Joerg: Compare- bzw. Verifyerrors hab ich ja nicht, entweder bleibt der 
Flashvorgang stehen, dann wird bis dahin alles sauber übertragen und 
weil der PC keine Antwort mehr vom STK bekommt gibt die Software nach 10 
sec mit nem timeout auf (AVRdude zeigt die timeouts auch an, während 
AVRstudio einfach nur wartet und dann das übliche Fehlerpopup 
erscheint).
Ich hatte ja oben schonmal beschrieben, daß ich den Mega64 mit Ponyprog 
fertig programmiert hatte und dann mit STK500 OHNE VORHERIGES LÖSCHEN 
dasselbe File nochmal "drüberprogrammiert" hab. Die interne 
Programmierlogik des mega64 kann dann immer nur mit ner Erfolgsmeldung 
antworten, die bits des Flashs werden an den entsprechenden Stellen ja 
nur von 1 auf 0 reduziert, da sie aber vorher schon richtig waren gibt 
es danach keine Verifyerrors.
Für den anderen Fall, daß das Flashen ganz durchläuft hatte ich noch nie 
irgendeinen Verifyerror, weder bei diesem noch bei irgendnem anderen 
chip.

Ich kümmer mich mal ums Loggen der seriellen Kommunikation

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hast du Zugriff auf irgendein unixoides Betriebssystem (Linux, MacOS X,
FreeBSD, PC-BSD, was auch immer)?  Dann würde ich mir das dort nochmal
ansehen.

Ich kann dir nur wiederholen, dass ich nicht die geringsten Probleme
mit deinem Hexfile habe.

von SoLaLa (Gast)


Lesenswert?

einen mit fedora core8 hab ich auch noch...
aber ich hab keine Ahnung was ich für AVRentwicklung auf Linux alles 
brauche...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

SoLaLa wrote:

> aber ich hab keine Ahnung was ich für AVRentwicklung auf Linux alles
> brauche...

Um ein Hexfile zu flashen, brauchst du nur ein avrdude.

von SoLaLa (Gast)


Lesenswert?

"Uuuuups..." sprach der Fehler, "da bin ich wieder!" :-)

hallöle an alle,
da ich mal wieder n bissi Zeit hatte und auch wieder n bissi bauen mußte 
(Motordrehzahl/Lüfterdrehzahl/Geschwindigkeit/Temperatur/Spannungs- und 
Lüftertakterfassung mit serieller Ausgabe auf n Laptop) kams wie es 
kommen mußte:
das STK500 verweigert recht häufig wie oben beschrieben seinen Dienst... 
grmmmpffff

daher hab ich mir mal auf die Schnelle den USBprogV3 nachgebaut und 
siehe da: alles läßt sich immer anstandslos flashen (aus AVRstudio 
heraus). Hab auch mehrfach die Gegenprobe mit dem STK500 gemacht.
Es muß also wirklich nen Fehler auf diesem alten Board sein, bzw. ein 
bug in der Software im Zusammenspiel mit dem alten V1-Board.

Ich erkläre das Thema hier deshalb mal für erledigt zumal ich mit dem 
USBprog auch sehr gut leben kann... Danke mal an den/die Entwickler des 
USBprog

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.