Improve the communication startup with the ICE in particular after a
powerup. Ideas taken from AVaRICE. git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@555 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
parent
dfc2fdc0f3
commit
a02dc0b11a
|
@ -1,3 +1,7 @@
|
||||||
|
2005-11-28 Joerg Wunsch <j@uriah.heep.sax.de>
|
||||||
|
|
||||||
|
* jtagmkI.c: Improve the communication startup with the ICE.
|
||||||
|
|
||||||
2005-11-28 Joerg Wunsch <j@uriah.heep.sax.de>
|
2005-11-28 Joerg Wunsch <j@uriah.heep.sax.de>
|
||||||
|
|
||||||
* configure.ac: enable parport access on x86_64 Linux and
|
* configure.ac: enable parport access on x86_64 Linux and
|
||||||
|
|
49
jtagmkI.c
49
jtagmkI.c
|
@ -104,7 +104,7 @@ static int jtagmkI_setparm(PROGRAMMER * pgm, unsigned char parm,
|
||||||
unsigned char value);
|
unsigned char value);
|
||||||
static void jtagmkI_print_parms1(PROGRAMMER * pgm, char * p);
|
static void jtagmkI_print_parms1(PROGRAMMER * pgm, char * p);
|
||||||
|
|
||||||
static int jtagmkI_resync(PROGRAMMER *pgm, int maxtries);
|
static int jtagmkI_resync(PROGRAMMER *pgm, int maxtries, int signon);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
u32_to_b3(unsigned char *b, unsigned long l)
|
u32_to_b3(unsigned char *b, unsigned long l)
|
||||||
|
@ -227,10 +227,10 @@ static int jtagmkI_drain(PROGRAMMER * pgm, int display)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int jtagmkI_resync(PROGRAMMER * pgm, int maxtries)
|
static int jtagmkI_resync(PROGRAMMER * pgm, int maxtries, int signon)
|
||||||
{
|
{
|
||||||
int tries;
|
int tries;
|
||||||
unsigned char buf[1], resp[1];
|
unsigned char buf[4], resp[9];
|
||||||
long otimeout = serial_recv_timeout;
|
long otimeout = serial_recv_timeout;
|
||||||
|
|
||||||
serial_recv_timeout = 200;
|
serial_recv_timeout = 200;
|
||||||
|
@ -260,6 +260,39 @@ static int jtagmkI_resync(PROGRAMMER * pgm, int maxtries)
|
||||||
fprintf(stderr, "got RESP_OK\n");
|
fprintf(stderr, "got RESP_OK\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (signon) {
|
||||||
|
/*
|
||||||
|
* The following is black magic, the idea has been taken from
|
||||||
|
* AVaRICE.
|
||||||
|
*
|
||||||
|
* Apparently, the ICE behaves differently right after a
|
||||||
|
* power-up vs. when reconnecting to an ICE that has already
|
||||||
|
* been worked with. The undocumented 'E' command (or
|
||||||
|
* subcommand) occasionally helps in getting the connection into
|
||||||
|
* sync.
|
||||||
|
*/
|
||||||
|
buf[0] = CMD_GET_SIGNON;
|
||||||
|
buf[1] = 'E';
|
||||||
|
buf[2] = ' ';
|
||||||
|
buf[3] = ' ';
|
||||||
|
if (verbose >= 2)
|
||||||
|
fprintf(stderr, "%s: jtagmkI_resync(): Sending sign-on command: ",
|
||||||
|
progname);
|
||||||
|
|
||||||
|
if (serial_send(pgm->fd, buf, 4) != 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"\n%s: jtagmkI_resync(): failed to send command to serial port\n",
|
||||||
|
progname);
|
||||||
|
serial_recv_timeout = otimeout;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (serial_recv(pgm->fd, resp, 9) == 0 && resp[0] == RESP_OK) {
|
||||||
|
if (verbose >= 2)
|
||||||
|
fprintf(stderr, "got RESP_OK\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (tries >= maxtries) {
|
if (tries >= maxtries) {
|
||||||
if (verbose >= 2)
|
if (verbose >= 2)
|
||||||
|
@ -279,8 +312,12 @@ static int jtagmkI_getsync(PROGRAMMER * pgm)
|
||||||
{
|
{
|
||||||
unsigned char buf[1], resp[9];
|
unsigned char buf[1], resp[9];
|
||||||
|
|
||||||
if (jtagmkI_resync(pgm, 5) < 0)
|
if (jtagmkI_resync(pgm, 5, 1) < 0) {
|
||||||
|
jtagmkI_drain(pgm, 0);
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
jtagmkI_drain(pgm, 0);
|
||||||
|
|
||||||
if (verbose >= 2)
|
if (verbose >= 2)
|
||||||
fprintf(stderr, "%s: jtagmkI_getsync(): Sending sign-on command: ",
|
fprintf(stderr, "%s: jtagmkI_getsync(): Sending sign-on command: ",
|
||||||
|
@ -739,7 +776,7 @@ static int jtagmkI_paged_write(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m,
|
||||||
tries = 0;
|
tries = 0;
|
||||||
again:
|
again:
|
||||||
|
|
||||||
if (tries != 0 && jtagmkI_resync(pgm, 2000) < 0) {
|
if (tries != 0 && jtagmkI_resync(pgm, 2000, 0) < 0) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: jtagmkI_paged_write(): sync loss, retries exhausted\n",
|
"%s: jtagmkI_paged_write(): sync loss, retries exhausted\n",
|
||||||
progname);
|
progname);
|
||||||
|
@ -863,7 +900,7 @@ static int jtagmkI_paged_load(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m,
|
||||||
|
|
||||||
tries = 0;
|
tries = 0;
|
||||||
again:
|
again:
|
||||||
if (tries != 0 && jtagmkI_resync(pgm, 2000) < 0) {
|
if (tries != 0 && jtagmkI_resync(pgm, 2000, 0) < 0) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: jtagmkI_paged_load(): sync loss, retries exhausted\n",
|
"%s: jtagmkI_paged_load(): sync loss, retries exhausted\n",
|
||||||
progname);
|
progname);
|
||||||
|
|
Loading…
Reference in New Issue