Forum: Compiler & IDEs avarice + dragon: Flash programmieren geht nicht


von Thomas H. (innot)


Lesenswert?

Hallo,

ich hätte da mal ein Problem. avarice will bei mir einfach nicht den 
Flash-Speicher eines Targets beschreiben.

Setup:

avarice 2.8 (unter Windows aus winAVR-20081124rc3, unter Linux 
handcompiliert)

AVR Dragon -> JTAG -> AVR Butterfly

Sowohl mit avrdude als auch AVR Studio kann ich ohne Probleme den Flash 
des Butterfly beschreiben (in genau der oben beschriebenen 
Konstellation). Mit avarice gehts nicht :-(

Frage:

Hat irgendjemand schon mal mit avarice und dem Dragon erfolgreich 
ein Target geflashed?


Wenn ich avarice mit "-e -p -f image.hex" aufrufe ist anschließend das 
Flash absolut leer. Ohne -e ist der alte Inhalt weiterhin vorhanden und 
unberührt.
Bei einem verify mit "-v" gibt es entsprechende Fehler:
1
>avarice -g -e -p -v -f ButterflyLCDTest.hex --jtag usb
2
3
AVaRICE version 2.8, Nov  7 2008 22:02:05
4
5
Defaulting JTAG bitrate to 250 kHz.
6
7
JTAG config starting.
8
Found a device: AVRDRAGON
9
Serial number:  00:a2:00:00:3f:fe
10
Reported JTAG device ID: 0x9405
11
Configured for device ID: 0x9405 atmega169
12
JTAG config complete.
13
Erasing program memory.
14
Erase complete.
15
Downloading FLASH image to target.................
16
17
Verifying FLASH
18
Error verifying target addr 0000. Expect [0x0c] Got [0x00]
19
Error verifying target addr 0001. Expect [0x94] Got [0x00]
20
Error verifying target addr 0002. Expect [0x6d] Got [0x00]
21
Error verifying target addr 0004. Expect [0x0c] Got [0x00]
22
[...1877 mal das gleiche...]
23
Error verifying target addr 07a0. Expect [0xff] Got [0x00]
24
Error verifying target addr 07a1. Expect [0xcf] Got [0x00]
25
Error verifying target addr 07a2. Expect [0x03] Got [0x00]
26
Error verifying target addr 07a3. Expect [0x0f] Got [0x00].
27
28
Verification failed!
Wenn ich mir mit "-d" die interne Kommunikation zwischen avarice und dem 
Dragon anschaue ist alles in Ordnung. Die Binärdaten werden an den 
Dragon geschickt und dieser quittiert den Erhalt ohne Fehler.

Wenn ich versuche ein Image über den gdb mit 'load image.hex' zu 
flashen, dann ist das verhalten noch seltsamer: Nur jeder vierte 32-Byte 
Block wird ins flash geschrieben, allerdings mit 0x80 zu niedriger 
Adresse. Der Block für 0x0080 landet also bei 0x0000, der Block für 
0x0100 bei 0x0080 usw.

Allerdings kann man dabei im avarice debug output auch sehen, dass es zu 
Synchronisationsproblemen kommt, denn dort gibt es jede Menge "recv: 
timeout" und "got wrong sequence number, xx != xx+1" Meldungen.

Cheers,

Thomas

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


Lesenswert?

Thomas Holland wrote:

> ich hätte da mal ein Problem. avarice will bei mir einfach nicht den
> Flash-Speicher eines Targets beschreiben.

Ich fürchte, du triffst da gerade auf einen absolut unterbelichteten
Punkt in der AVaRICE-Entwicklung.  Dieses Feature scheint, beginnend
mit der Integration des mkII-Protokolls, immer weiter dem "bitrot"
anheim gefallen zu sein.  Ich hatte jeweils alle Hände voll zu tun,
die entsprechende Funktionalität für die Programmierung in AVRDUDE
einzubauen und dann das Debuggen in AVaRICE nachzuziehen, irgendwie
war dann für das Duplikat "Programmieren in AVaRICE" die Luft raus.

Ich weiß, es wäre manchmal schon ganz nützlich, wenn das auch auf
diesem Wege gänge.  Im Moment kann ich dir aber ehrlicher Weise nur
zur Benutzung von AVRDUDE raten.

von Markus (Gast)


Lesenswert?

@Jörg Wunsch

Du weiß doch sicher was man wo/wie/warum einstellt, damit man einen 
AVR-Prozessor mit Eclipse debuggen kann und welche Eclipse Plugins und 
EXE Dateien und Versionen man dazu benötigt und wie man die 
Konfiguriert?

Poste doch am besten ein kleines Eclipse Projekt, mit allen Dateien, 
auch die, die im Ordner .metadata drin sind. Am Besten, wenn ich das 
Projekt einfach nur im Ordner C:\Temp\ entpacke und dan direckt dieses 
Workspace mit Eclipse öffne.

Dann wäre endlich mal alle Glaskugel-Fragen geklärt...

PS: Das Projekt braucht auch nur eine main() mit einer while(1); 
Schleife haben, nicht einmal ein Blink-LED oder so, es soll nicht in 
Arbeit ausarten, nur eben das Debuggen funktionieren.

Und noch dazu schreiben welche Debug-Hardware (JTAG Firma, Typ) genutzt 
wird.

Wir alle wollen auch gerne richtig und Problemlos debuggen können ...

von Thomas H. (innot)


Lesenswert?

Jörg,

vielen Dank für die Info. Ich hatte so was auch schon vermutet, aber ich 
wollte mit meiner Frage nur mal sicher gehen, dass es nicht doch 
irgendwie an mir liegt.

Ich habe keine Probleme damit avrdude zu benutzen und vom Workflow geht 
es mit Eclipse auch ganz gut von der Hand. Muss mir jetzt nur Gedanken 
machen, wie ich es in Eclipse noch weiter automatisieren kann.


@Markus,

Jörg kennt sich als (Co-)Programmierer von avrdude und avarice gut mit 
diesen Programmen aus, aber mit Eclipse hat er nichts am Hut. Da wirst 
Du leider mit mir vorlieb nehmen müssen :-)

Und ich bräuchte immer noch den avarice debug output von Dir um zu sehen 
warum avarice nicht mit Deiner JTAG Hardware kommunizieren will.


Thomas

von Markus (Gast)


Lesenswert?

Dann müsste man vieleicht die Frage etwas umformulieren:

Welche Parameter werden für das Debuggen mit AVR-GDB und AVaRICE / 
AVRDUDE benötigt? Müssen "MONITOR"-Befehle über den AVR-GDB zu AVaRICE 
geschickt werden? Müssen noch andere Initialisierungsbefehle in AVR-GDB 
gesetzt werden, damit beide das gleiche Protokoll sprechen?

(Also Fragen in der das Wort Eclipse nicht drin vor kommt... :-)

Oder soll ich die Antowrt von Jörg so verstehen: Es geht nicht. ?
Aber irgendwas muss doch gehen, denn sonst würde doch AVaRICE nicht 
existieren.

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


Lesenswert?

Markus wrote:

> Oder soll ich die Antowrt von Jörg so verstehen: Es geht nicht. ?

Nein, meine Antwort bezog sich ausschließlich auf das Programmieren
über AVaRICE, nicht auf das Debuggen.

von Markus (Gast)


Lesenswert?

@Jörg:
Vielen Dank, ich mache morgen nochmls tests, siehe den anderen Thread.

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.