Frage an die AVR Experten:
Gibt es eine Möglichkeit, den ISP Programmiermodus per Kommando
zu verlassen, bzw. einen Reset auszulösen.
Oder muss man dem Controller dazu den Saft abdrehen?
Die AN910 bzw. die Chip-Datenblätter schweigen sich dazu aus (wenn ich
nichts übersehen habe).
"Enter Programming Mode" (AC 53 00) gibt es, aber kein "Exit Programming
Mode" (?).
Weitergehende Recherchen blieben bis jetzt ebenfalls erfolglos.
Vielen Dank!
also mein ISP (usb-prog2-3) verlässt den Prog.Modus aus dem AVR-Studio
4.18 automatisch und der AVR startet sein Programm, einen VERLASSEN
Modus brauchts nicht.
AVR-ISP schrieb im Beitrag #5259414:
> Gibt es eine Möglichkeit, den ISP Programmiermodus per Kommando> zu verlassen, bzw. einen Reset auszulösen.
Ist implizit. Nach Abarbeitung des erteilten Kommandos passiert das
automatisch. Auch im erkannten Fehlerfall. Also unvermeidlich. Es sei
denn, der Programmer stürzt zwischenzeitlich ab. Dann könnte er
allerdings auch kein derartiges Kommando mehr abarbeiten...
AVR-ISP schrieb im Beitrag #5259414:
> Gibt es eine Möglichkeit, den ISP Programmiermodus per Kommando> zu verlassen
Braucht man nicht.
> bzw. einen Reset auszulösen.
Nein.
> Oder muss man dem Controller dazu den Saft abdrehen?
Nein.
> "Enter Programming Mode" (AC 53 00) gibt es, aber kein "Exit Programming> Mode" (?).
Der Sinn des "Enter Programming Mode" Kommandos ist es, den Controller
vor dem zufälligen Beschreiben durch wahlloses Wackeln an den ISP-Pins
zu schützen. Denn immer [1] wenn RESET auf L liegt, ist der ISP-Modus
aktiv. Er akzeptiert nur eben erst dann ISP-Kommandos, wenn er das
magische "Sesam öffne dich!" gehört hat.
Verlassen wird der ISP-Modus, indem RESET wieder auf H gesetzt wird (zum
Programmieren muß es permanent auf L gehalten werden). Das bedeutet im
Umkehrschluß, daß der ISP-Adapter die RESET Leitung des Targets
kontrollieren muß. Genau deswegen gibt (und braucht) es auch kein
ISP-Kommando zum Auslösen eines Reset.
Wenn der Adapter RESET von L auf H gehen läßt, dann läuft der µC los,
ganz so als wäre es ein normales Hardware-Reset gewesen.
[1] außer natürlich, man hat ISP oder den RESET-Pin per Fuse disabled
Axel S. schrieb:> Verlassen wird der ISP-Modus, indem RESET wieder auf H gesetzt wird (zum> Programmieren muß es permanent auf L gehalten werden).
Der Gedanke kam mir auch auch, nachdem ich die erste Antwort oben
gelesen hatte.
Wenn die DWEN Fuse programmiert ist, kann dann auch anschliessend wieder
mit debugwire auf das Target zugegriffen werden, nehme ich an?
Es scheint dann aber nicht direkt möglich zu sein, das Target
unmittelbar per debugwire zu übernehmen,d.h. ohne dass der Controller
los läuft, nachdem RESET nach Abschluss des Programmiervorgangs
deaktiviert wurde.
Vermutlich wird man per DW Kommando einen Reset auslösen
müssen und kann das Programm ab dem ersten Befehl kontrollieren.
Alternativ könnte man wohl auch im Binary einen BREAK oder eine
Endlosschleife an den Einsprungpunkt setzen, wenn das wichtig sein
sollte.
> Das bedeutet im> Umkehrschluß, daß der ISP-Adapter die RESET Leitung des Targets> kontrollieren muß. Genau deswegen gibt (und braucht) es auch kein> ISP-Kommando zum Auslösen eines Reset.>> Wenn der Adapter RESET von L auf H gehen läßt, dann läuft der µC los,> ganz so als wäre es ein normales Hardware-Reset gewesen.>>> [1] außer natürlich, man hat ISP oder den RESET-Pin per Fuse disabled
Vielen Dank!
Das mit debugwire nach ISP scheint nicht zu funktionieren.
Nachdem ISP verlassen wurde (RESET = 1) reagiert der AVR nicht auf einen
RESET Puls (3ms), im Gegensatz zu einem 3ms RESET Puls nach Power-Up,
den er mit 0x55 auf der RESET Leitung beantwortet (F_CPU=8MHz, UART auf
62500).
Oder ist da sonst noch was zu tun, um ihn nach ISP wieder per DW
ansprechen zu können?
DW Session nach DW Session ist dagegen kein Problem.
AVR-ISP schrieb:> Das mit debugwire nach ISP scheint nicht zu funktionieren.>> Nachdem ISP verlassen wurde (RESET = 1) reagiert der AVR nicht auf einen> RESET Puls (3ms), im Gegensatz zu einem 3ms RESET Puls nach Power-Up,> den er mit 0x55 auf der RESET Leitung beantwortet (F_CPU=8MHz, UART auf> 62500).>> Oder ist da sonst noch was zu tun, um ihn nach ISP wieder per DW> ansprechen zu können?
Wenn du DW temporär deaktiviert hattest, um per ISP auf den AVR
zuzugreifen, dann braucht der AVR ein Powercycle, um entweder wieder DW
zu sprechen oder in den Normalmodus zurückzukehren (wenn während der
ISP-Session die DWEN Fuse zurückgesetzt wurde).
Steht alles im hiesigen Artikel zu DebugWIRE
Hallo Axel,
Danke!
>Steht alles im hiesigen Artikel zu DebugWIRE
Den kenne ich natürlich. Du beziehst Dich wohl auf den Satz:
"Nach dem erneuten Einschalten ist der AVR dann wieder im
debugWIRE-Modus."
Die Formulierung schliesst ja nicht unbedingt aus, dass er AUCH nach
einem einfachen Deaktivieren des RESETs im ISP Mode wieder auf DW
Kommandos reagieren könnte. Warum auch nicht, die Programmausführung
startet ja auch.
Hinweise, dass ein Powercycle notwendig sein könnte, hatte ich vorher
schon irgendwo gelesen und auch im OP vermutet.
Einen logischen Grund scheint es mir dafür aber nicht zu geben, es ist
halt ein lästiges Implementierungsdetail.
(Alles unter der Prämisse, dass der ISP Modus nur temporär zum Flashen
benutzt und die DWEN Fuse nicht manipuliert wird. ISP Flashen ist halt
eine Grössenordnung schneller).