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).
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.