From d3a655ae58cf7da5fbdd3fbfeda5bf748aaddd5b Mon Sep 17 00:00:00 2001 From: Joerg Wunsch Date: Tue, 20 Mar 2012 14:42:20 +0000 Subject: [PATCH] Shesh. The previous commit was a little premature. Drag the "GO" code in again, but only activate it when programming an Xmega device through PDI. Wonderfully consistent tools. git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@1071 81a1dc3b-b13d-400b-aceb-764788c761c2 --- ChangeLog | 7 ++++--- jtagmkII.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 413652b4..3aad89b6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,10 @@ 2012-03-20 Joerg Wunsch * jtagmkII.c (jtagmkII_close): The GO command before signing off - turned out to do more harm than good; on the Xmega, it caused exactly - the opposite reaction, the CPU stopped. Even without it, after the - RESET command, the target is running already. So, drop the GO. + turned out to be not required for normal megaAVR devices, and to + cause the exact opposite (i.e. the target stopping) on Xmega + devices being programmed to JTAG. However, programming Xmega + devcies through PDI *does* need the GO command. 2012-03-20 Joerg Wunsch diff --git a/jtagmkII.c b/jtagmkII.c index b4b66467..0f00275b 100644 --- a/jtagmkII.c +++ b/jtagmkII.c @@ -1685,6 +1685,39 @@ void jtagmkII_close(PROGRAMMER * pgm) if (verbose >= 2) fprintf(stderr, "%s: jtagmkII_close()\n", progname); + if (pgm->flag & PGM_FL_IS_PDI) { + /* When in PDI mode, restart target. */ + buf[0] = CMND_GO; + if (verbose >= 2) + fprintf(stderr, "%s: jtagmkII_close(): Sending GO command: ", + progname); + jtagmkII_send(pgm, buf, 1); + + status = jtagmkII_recv(pgm, &resp); + if (status <= 0) { + if (verbose >= 2) + putc('\n', stderr); + fprintf(stderr, + "%s: jtagmkII_close(): " + "timeout/error communicating with programmer (status %d)\n", + progname, status); + } else { + if (verbose >= 3) { + putc('\n', stderr); + jtagmkII_prmsg(pgm, resp, status); + } else if (verbose == 2) + fprintf(stderr, "0x%02x (%d bytes msg)\n", resp[0], status); + c = resp[0]; + free(resp); + if (c != RSP_OK) { + fprintf(stderr, + "%s: jtagmkII_close(): " + "bad response to GO command: %s\n", + progname, jtagmkII_get_rc(c)); + } + } + } + buf[0] = CMND_SIGN_OFF; if (verbose >= 2) fprintf(stderr, "%s: jtagmkII_close(): Sending sign-off command: ",