From 46f7b6b4702e2431014b32ac281ddc230cd4b0fe Mon Sep 17 00:00:00 2001 From: Joerg Wunsch Date: Fri, 17 May 2013 16:23:55 +0000 Subject: [PATCH] Submitted by "Malte" and John McCorquodale: patch #7876 JTAGICE mkII fails to connect to attiny if debugwire is enabled AND target has a very slow clock * jtagmkII.c (jtagmkII_getsync): When leaving debugWIRE mode temporarily, immediately retry with ISP, rather than leaving. * stk500v2 (stk500v2_program_enable): Implemented similar logic for the JTAGICE3. git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@1183 81a1dc3b-b13d-400b-aceb-764788c761c2 --- ChangeLog | 10 ++++++++++ NEWS | 5 +++++ jtagmkII.c | 14 +++++++++++--- stk500v2.c | 20 ++++++++++++++------ 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index d5491e6e..aafa6f26 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2013-05-17 Joerg Wunsch + + Submitted by "Malte" and John McCorquodale: + patch #7876 JTAGICE mkII fails to connect to attiny if debugwire + is enabled AND target has a very slow clock + * jtagmkII.c (jtagmkII_getsync): When leaving debugWIRE mode + temporarily, immediately retry with ISP, rather than leaving. + * stk500v2 (stk500v2_program_enable): Implemented similar logic + for the JTAGICE3. + 2013-05-16 Rene Liebscher * configure.ac: reactivate check for TYPE_232H, which does not diff --git a/NEWS b/NEWS index da99d625..fc21a494 100644 --- a/NEWS +++ b/NEWS @@ -78,6 +78,8 @@ Current: read device signature - bug #37265: wrong page sizes for XMega64xx in avrdude.conf - bug #37942: Latest SVN can't program in dragon_jtag mode + - patch #7876 JTAGICE mkII fails to connect to attiny if debugwire + is enabled AND target has a very slow clock * Keep track of input file contents @@ -134,6 +136,9 @@ Current: traces, in particular in environments which do not offer shell-style redirection functionality for standard streams. + * When leaving debugWIRE mode, immediately retry with ISP rather + than bailing out completely. + * Programmer types in configuration file are no longer keywords but specified as string. diff --git a/jtagmkII.c b/jtagmkII.c index 3fb5b1f6..bd8a12ea 100644 --- a/jtagmkII.c +++ b/jtagmkII.c @@ -831,6 +831,8 @@ int jtagmkII_getsync(PROGRAMMER * pgm, int mode) { if(mode < 0) return 0; // for AVR32 + tries = 0; +retry: /* Turn the ICE into JTAG or ISP mode as requested. */ buf[0] = mode; if (jtagmkII_setparm(pgm, PAR_EMULATOR_MODE, buf) < 0) { @@ -855,11 +857,17 @@ int jtagmkII_getsync(PROGRAMMER * pgm, int mode) { * program. */ (void)jtagmkII_reset(pgm, 0x04); + if (tries++ > 3) { + fprintf(stderr, + "%s: Failed to return from debugWIRE to ISP.\n", + progname); + return -1; + } fprintf(stderr, "%s: Target prepared for ISP, signed off.\n" - "%s: Please restart %s without power-cycling the target.\n", - progname, progname, progname); - return JTAGII_GETSYNC_FAIL_GRACEFUL; + "%s: Now retrying without power-cycling the target.\n", + progname, progname); + goto retry; } } else { return -1; diff --git a/stk500v2.c b/stk500v2.c index 443ccb25..a9ac44c6 100644 --- a/stk500v2.c +++ b/stk500v2.c @@ -1105,7 +1105,7 @@ static int stk500v2_program_enable(PROGRAMMER * pgm, AVRPART * p) { unsigned char buf[16]; char msg[100]; /* see remarks above about size needed */ - int rv; + int rv, tries; PDATA(pgm)->lastpart = p; @@ -1120,6 +1120,8 @@ static int stk500v2_program_enable(PROGRAMMER * pgm, AVRPART * p) /* Activate AVR-style (low active) RESET */ stk500v2_setparm_real(pgm, PARAM_RESET_POLARITY, 0x01); + tries = 0; +retry: buf[0] = CMD_ENTER_PROGMODE_ISP; buf[1] = p->timeout; buf[2] = p->stabdelay; @@ -1185,14 +1187,20 @@ static int stk500v2_program_enable(PROGRAMMER * pgm, AVRPART * p) cmd[1] = CMD3_MONCON_DISABLE; if (jtag3_command(pgm, cmd, 3, &resp, "MonCon disable") >= 0) free(resp); - - fprintf(stderr, - "%s: Target prepared for ISP, signed off.\n" - "%s: Please restart %s without power-cycling the target.\n", - progname, progname, progname); } } pgm->cookie = mycookie; + if (tries++ > 3) { + fprintf(stderr, + "%s: Failed to return from debugWIRE to ISP.\n", + progname); + break; + } + fprintf(stderr, + "%s: Target prepared for ISP, signed off.\n" + "%s: Now retrying without power-cycling the target.\n", + progname, progname); + goto retry; } break;