For EDBG protocol, always use 512-byte block I/O. The lower layers
will split this according to the EP's maxsize. This makes it work over USB 1.1 connections (albeit very slowly, due to the interrupt transfers used). git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@1284 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
parent
7999eaa25a
commit
c28f96597a
|
@ -1,3 +1,10 @@
|
||||||
|
2014-02-27 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
||||||
|
|
||||||
|
* jtag3.c: For EDBG protocol, always use 512-byte block I/O. The
|
||||||
|
lower layers will split this according to the EP's maxsize. This
|
||||||
|
makes it work over USB 1.1 connections (albeit very slowly, due to
|
||||||
|
the interrupt transfers used).
|
||||||
|
|
||||||
2014-02-27 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
2014-02-27 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
||||||
|
|
||||||
* config_gram.y: Turn the usbpid parameter of the programmer into
|
* config_gram.y: Turn the usbpid parameter of the programmer into
|
||||||
|
|
19
jtag3.c
19
jtag3.c
|
@ -443,15 +443,15 @@ static int jtag3_edbg_send(PROGRAMMER * pgm, unsigned char * data, size_t len)
|
||||||
|
|
||||||
if (verbose >= 4)
|
if (verbose >= 4)
|
||||||
{
|
{
|
||||||
memset(buf, 0, pgm->fd.usb.max_xfer);
|
memset(buf, 0, USBDEV_MAX_XFER_3);
|
||||||
memset(status, 0, pgm->fd.usb.max_xfer);
|
memset(status, 0, USBDEV_MAX_XFER_3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verbose >= 3)
|
if (verbose >= 3)
|
||||||
fprintf(stderr, "\n%s: jtag3_edbg_send(): sending %lu bytes\n",
|
fprintf(stderr, "\n%s: jtag3_edbg_send(): sending %lu bytes\n",
|
||||||
progname, (unsigned long)len);
|
progname, (unsigned long)len);
|
||||||
|
|
||||||
if (len + 8 > pgm->fd.usb.max_xfer)
|
if (len + 8 > USBDEV_MAX_XFER_3)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: jtag3_edbg_send(): Fragmentation not (yet) implemented!\n",
|
"%s: jtag3_edbg_send(): Fragmentation not (yet) implemented!\n",
|
||||||
|
@ -467,13 +467,13 @@ static int jtag3_edbg_send(PROGRAMMER * pgm, unsigned char * data, size_t len)
|
||||||
u16_to_b2(buf + 6, PDATA(pgm)->command_sequence);
|
u16_to_b2(buf + 6, PDATA(pgm)->command_sequence);
|
||||||
memcpy(buf + 8, data, len);
|
memcpy(buf + 8, data, len);
|
||||||
|
|
||||||
if (serial_send(&pgm->fd, buf, pgm->fd.usb.max_xfer) != 0) {
|
if (serial_send(&pgm->fd, buf, USBDEV_MAX_XFER_3) != 0) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: jtag3_edbg_send(): failed to send command to serial port\n",
|
"%s: jtag3_edbg_send(): failed to send command to serial port\n",
|
||||||
progname);
|
progname);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
rv = serial_recv(&pgm->fd, status, pgm->fd.usb.max_xfer);
|
rv = serial_recv(&pgm->fd, status, USBDEV_MAX_XFER_3);
|
||||||
|
|
||||||
if (rv < 0) {
|
if (rv < 0) {
|
||||||
/* timeout in receive */
|
/* timeout in receive */
|
||||||
|
@ -679,7 +679,7 @@ static int jtag3_edbg_recv_frame(PROGRAMMER * pgm, unsigned char **msg) {
|
||||||
if (verbose >= 4)
|
if (verbose >= 4)
|
||||||
fprintf(stderr, "%s: jtag3_edbg_recv():\n", progname);
|
fprintf(stderr, "%s: jtag3_edbg_recv():\n", progname);
|
||||||
|
|
||||||
if ((buf = malloc(pgm->fd.usb.max_xfer)) == NULL) {
|
if ((buf = malloc(USBDEV_MAX_XFER_3)) == NULL) {
|
||||||
fprintf(stderr, "%s: jtag3_edbg_recv(): out of memory\n",
|
fprintf(stderr, "%s: jtag3_edbg_recv(): out of memory\n",
|
||||||
progname);
|
progname);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -687,14 +687,14 @@ static int jtag3_edbg_recv_frame(PROGRAMMER * pgm, unsigned char **msg) {
|
||||||
|
|
||||||
buf[0] = EDBG_VENDOR_AVR_RSP;
|
buf[0] = EDBG_VENDOR_AVR_RSP;
|
||||||
|
|
||||||
if (serial_send(&pgm->fd, buf, pgm->fd.usb.max_xfer) != 0) {
|
if (serial_send(&pgm->fd, buf, USBDEV_MAX_XFER_3) != 0) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: jtag3_edbg_recv(): error sending CMSIS-DAP vendor command\n",
|
"%s: jtag3_edbg_recv(): error sending CMSIS-DAP vendor command\n",
|
||||||
progname);
|
progname);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = serial_recv(&pgm->fd, buf, pgm->fd.usb.max_xfer);
|
rv = serial_recv(&pgm->fd, buf, USBDEV_MAX_XFER_3);
|
||||||
|
|
||||||
if (rv < 0) {
|
if (rv < 0) {
|
||||||
/* timeout in receive */
|
/* timeout in receive */
|
||||||
|
@ -966,7 +966,7 @@ static int jtag3_initialize(PROGRAMMER * pgm, AVRPART * p)
|
||||||
*/
|
*/
|
||||||
if (jtag3_getparm(pgm, SCOPE_GENERAL, 0, PARM3_FW_MAJOR, parm, 2) < 0)
|
if (jtag3_getparm(pgm, SCOPE_GENERAL, 0, PARM3_FW_MAJOR, parm, 2) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
if (pgm->fd.usb.max_xfer < USBDEV_MAX_XFER_3) {
|
if (pgm->fd.usb.max_xfer < USBDEV_MAX_XFER_3 && (pgm->flag & PGM_FL_IS_EDBG) == 0) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: the JTAGICE3's firmware %d.%d is broken on USB 1.1 connections, sorry\n",
|
"%s: the JTAGICE3's firmware %d.%d is broken on USB 1.1 connections, sorry\n",
|
||||||
progname, parm[0], parm[1]);
|
progname, parm[0], parm[1]);
|
||||||
|
@ -975,7 +975,6 @@ static int jtag3_initialize(PROGRAMMER * pgm, AVRPART * p)
|
||||||
"%s: forced to continue by option -F; THIS PUTS THE DEVICE'S DATA INTEGRITY AT RISK!\n",
|
"%s: forced to continue by option -F; THIS PUTS THE DEVICE'S DATA INTEGRITY AT RISK!\n",
|
||||||
progname);
|
progname);
|
||||||
} else {
|
} else {
|
||||||
serial_close(&pgm->fd);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue