Hallo zusammen,
ich bin noch recht unerfahren in dieser Thematik, verzeiht mir wenn ich
hier gleich mit dem ersten Post mit einer Frage reinplatze.
Ich bin momentan dabei, einen Windows basierten Firmware Updater auf Mac
OS X zu portieren.
Das Original verwendet AVROSP.exe zum Flashen, was auch problemlos
funktioniert.
Da dieses Tool aber leider nie auf andere Systeme portiert wurde, möchte
ich auf avrdude zurückgreifen, was ja an sich kein Problem sein
sollte(?).
Ich versuche nun aber schon seit einigen Tagen erfolglos, die .hex Datei
auf das Gerät zu flashen.
Das xml File für avrosp.exe enthält folgende Geräteparameter:
Verify schlägt fehl beim ersten Byte (tut es aber auch mit avrosp.exe;
Auslesen ist wohl nicht vorgesehen).
Nach dem Flashen startet nun das Gerät nicht mehr.
Erneutes Aufspielen mit avrosp.exe funktioniet, und anschließend startet
das Gerät auch wieder ganz normal.
Ich bin momentan mit meinem Latein am Ende, 4 Tage Trial & Error.
Angeschlossen ist das Gerät über ein separates WiFi Modul (ohne dieses
ist kein Firmware Update möglich); dies ist über USB angeschlossen
(FT232R).
//Nachtrag:
Interessant ist auch, dass das erfolgreiche Flashen mit avrosp.exe fast
6 Minuten dauert, avrdude aber nach 59 Sekunden damit durch ist.
Hat jemand eine Idee, was ich noch probieren kann?
OK, ich habe den Fehler selbst gefunden, in avrdude's butterfly.c.
butterfly_set_extaddr wird nicht aufgerufen, somit wird ab 128K der
Beginn des Speichers überschrieben (Statt "H" 0x010000 wird "A" 0x0000
als Adresse geschickt).
Außerdem bestimmt avrdude die Buffergröße falsch (128 Byte statt 512).
Mit diesem (groben) Patch funktioniert es, ich werde das an die
Entwickler weiterleiten, aber vorher noch dem buffersize Problem auf den
Grund gehen.
Diese wird ja abgefragt und von avrosp.exe auch richtig verstanden.
avrdude_message(MSG_INFO, "Programmer supports buffered memory access with buffersize=%i bytes.\n",
12
PDATA(pgm)->buffersize);
13
14
@@ -424,6 +428,7 @@
15
16
static void butterfly_set_addr(PROGRAMMER * pgm, unsigned long addr)
17
{
18
+if( addr < 0x10000 ) {
19
char cmd[3];
20
21
cmd[0] = 'A';
22
@@ -432,6 +437,19 @@
23
24
butterfly_send(pgm, cmd, sizeof(cmd));
25
butterfly_vfy_cmd_sent(pgm, "set addr");
26
+
27
+ } else {
28
+
29
+ char cmd[4];
30
+
31
+ cmd[0] = 'H';
32
+ cmd[1] = (addr >> 16) & 0xff;
33
+ cmd[2] = (addr >> 8) & 0xff;
34
+ cmd[3] = addr & 0xff;
35
+
36
+ butterfly_send(pgm, cmd, sizeof(cmd));
37
+ butterfly_vfy_cmd_sent(pgm, "set extaddr");
38
+ }
39
}
Leider werde ich avrdude aber aufgrund der GPL sowieso nicht verwenden
können/dürfen...
//EDIT:
Würde den Faden gerne als "gelöst" markieren, das geht aber offenbar
nicht.
Stephan S. schrieb:> Leider werde ich avrdude aber aufgrund der GPL sowieso nicht verwenden> können/dürfen...
Besser ist es.
Wenn man von Problemen mit der MC-Programmierung hört hat meistens
dieses dämliche avrdude seine Hand im Spiel.
Ja, ist schon erstaunlich, dass das avrosp.exe Tool von 2004 bereits die
erweiterte Adressierung beherrscht, avrdude hingegen nicht...
Gut, Letzteres deckt halt auch einen viel größeren Bereich ab und ich
will das gar nicht schlecht reden. Für die meisten funktioniert es ja.
Aber wenn ich schon "in die Matrix eintauche" und das Protokoll auf Bit
und Byte Ebene durchgehen muss, kann ich auch gleich meine eigene,
"monolithische" Lösung durchziehen und das vernünftig in den Installer
einbauen, grafischer Fortschrittsbalken und Lokalisierung inklusive...
Wenn ich da jetzt noch den Source Code, meinen Patch und einen
No-Warranty Disclaimer dazupacke, wird mein Auftraggeber nicht
sonderlich begeistert sein.
Soviel zum Thema GPL...
Immerhin kann ich jetzt als Nebenprodukt eine Source Code basierte Linux
Version für die Kommandozeile obendrein geben, halt dann mit den ganzen
GPL Spezialitäten im README.
Die low-level Lösung hätte ich mal gleich angehen sollen, anstatt 5 Tage
mit Trial/Error zuzubringen. Wollte es einfach nicht glauben...
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.