Hey Leute, ich hab mir wirklich Mühe gegeben selbst zu suchen, allerdings bin ich erfolglos geblieben. Daher nun die Frage an euch: Ich setze auf verschiedenen Controllern den stk500v2 Bootloader von Peter Fleury ein. Teilweise mit einigen Zusätzen, teilweise gestrippt, teilweise original. Das hat stehts gut geklappt. (danke Peter :D ) Jetzt ist mir ein ATmega328P unter gekommen, der dann auch den Bootloader bekommen sollte. Soweit alles angepasst, geflashed, connected => läuft. Ich erhalte alle Antworten und avrdude schreibt das Hex File komplett. Nur startete danach meine Applikation nicht. Hmm gewundert und mit meinem mkII den Controller ausgelesen: Alles "FF" bis auf den Bootloader. Gewundert. Etwas debug in den Bootloader geschmissen und festgestellt das alles korrekt ausgeführt wird, trotzdem bleibts beim "FF". Dann hab ich einfach mal stumpf zum testen ganz vorne direkt nach dem start der main() folgendes eingefügt: boot_page_erase(0); boot_spm_busy_wait(); unsigned int temp=(0x12)<<8 | 0x11; boot_page_fill(0,temp); boot_page_write(0); boot_spm_busy_wait(); boot_rww_enable(); Flash ausgelesen: Alles "FF". Dann hab ich an mir selbst gezweifelt, und meinen ATm2560 mit dem selben Startblock getestet: geht 1A, die ersten Bytes sind 0x12 und 0x11. Alles super. Nun also die Quizfrage: Warum wird der Schreibvorgang im ATm328 ausgeführt, aber es landet nix im Flash. Die LockBits sind nicht gesetzt, ich kann auch mit dem MKII den Bereich beschreiben und wieder auslesen, der Speicher ist also auch nicht defekt. Ich hab absolut keinen Schimmer woran es liegen kann. Habt ihr eine Idee? Laut Datenblatt des Atm328P unterstützt der 328 Bootloader, außerdem wird exakt der oben aufgeführte Code Block empfohlen. Ich bin total Ratlos. Gruß und vielen Dank Simon
Im Datenblatt werden die von die zittierten C Prozeduren nicht genannt. Die Frage ist, ob diese Prozeduren überhaupt DIESEN ATmega Typ unterstützen. Im Datenblatt steht, dass ein ziemlich exaktes Timing eingehalten werden muss. Ist das der Fall? Hast du es kontrolliert oder nur tehoretisch berechnet? Vergleiche das compilierte Programm mit dem Assembler-Beispiel aus dem Datenblatt.
Eine Lösung für dein Problem kann ich dir leider auch nicht anbieten. Aber ich habe besagten Bootloader bereits auf einem Crumb328 mit ATmega328(P) erfolgreich eingesetzt. Funktioniert also ohne Probleme auf dem 328!
Hey Leute, ich hab irgendwie vergessen nachzusehen: Also Stefan, du hast recht, es stand in der boot.c und nicht im Datenblatt. Ich habe daraufhin mir die Assambler Befehle im Datenblatt angesehen und mit denen im lss-file von avr-gcc verglichen. Ich muss zugeben, dass meine Assambler Erfahrungen begrenzt sind, aber zumindest habe ich alle die Befehle wieder gefunden. -> in richtiger Reihenfolge an der gesuchten Stelle. Ein weiter Grund der mich bestärkt das es klappen könnte liegt darin, das der Assambler Code zwischen ATmega2560 und ATmega328 laut Datenblatt identisch ist und auch die lss Files ähnlich sind. Wenn Daniel jetzt auch noch bestätigt das es möglich ist habe ich noch 2..3.. Fragen. Benutzt du den interenen Oszilator? Das mache ich zwar aktuell noch (8Mhz), will ich aber ändern. Nutzt du als Baudrate 115200? stk500v2 ist ja klar denke ich mal. Könntest du mir vielleicht die sourcen irgendwo hochladen? Ich habe jetzt gestern nach erfolgloser Suche im Assambler file im Internet rumgewuselt und habe gesehen das der Bootloader des Arduino auch für einene 328p existiert. Dort habe ich gesehen das sie eine abweichende Prozedure zum Beschreiben des Flash benutzen. Begründet wird dies mit Speicherplatz Einsparung. Als ich die Procedur kopieren wollte, ist mir aufgefallen das der standard skt500v2 Code von Peter gar nicht checkt ob die BaudRate abweicht. Dies hinzugefügt führt nun dazu das mein Code nicht mehr kompiliert da ich mit dem internen RC (ja, Schande über mein Haupt) und 115k eine Abweichung von 8% erzeugt. In der Tat habe ich auch viele communication error. Ich denke dem Problem sollte ich mich zuerst annehmen, oder? 115k lässt sich bedingt durch meine Architektur nicht ändern. Gruß und danke für eure Hilfe! Simon
Hi, hier mal der Bootloader. Ist allerdings etwas modifiziert (Bootloader startet automatisch nach Watchdog-Reset). Bis jetzt habe ich ihn erfolgreich eingesetzt auf mega8, mega88, mega328, mega16 und mega128. 115200 sind natürlich zwingend erforderlich! Mit internem RC wirds aber nicht klappen, da der Fehler einfach zu groß ist. Da musst du schon einen entsprechenden Baudraten-Quarz benutzen. Viel erfolg
Moin, danke dir sehr. Ich konnte es natürlich nicht lassen und habe gleich getestet. Im wensentlichen sehen ich keinen Unterschied :( aber ich denke mal ich muss auch zuerst das 8mhz => 115.2 k problem lösen. Auf der nächsten Platine sitzt ein 16Mhz - Quarz, dann sollte das sauber teilbar sein. Ich werde berichten, auch wenn das jetzt erstmal etwas dauern wird. Aber vielen dank für die Bereitschaft!! Gruß Kolja
>aber ich denke mal ich muss auch zuerst das 8mhz => 115.2 k problem lösen. Kannste vergessen. Fehler zu hoch. >Auf der nächsten Platine sitzt ein 16Mhz - Quarz, dann sollte das sauber >teilbar sein. Kannste auch vergessen. Fehler zu hoch. Nimm einen 14.7456 MHz Quarz.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.