* usb_libusb.c (usbdev_open): Downgrade the max transfer size for
the main data endpoints when being forced so by the USB; this can happen when attaching the JTAGICE3 to a USB 1.1 connection * jtag3.c (jtag3_initialize): When detecting a downgraded max transfer size on the JTAGICE3 (presumably, due to being connected to USB 1.1 only), bail out as its firmware cannot properly handle this (by now) git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk@1129 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
parent
b5ed550b9d
commit
6f84a29bd7
|
@ -1,3 +1,13 @@
|
||||||
|
2013-01-02 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
||||||
|
|
||||||
|
* usb_libusb.c (usbdev_open): Downgrade the max transfer size for
|
||||||
|
the main data endpoints when being forced so by the USB; this can
|
||||||
|
happen when attaching the JTAGICE3 to a USB 1.1 connection
|
||||||
|
* jtag3.c (jtag3_initialize): When detecting a downgraded max
|
||||||
|
transfer size on the JTAGICE3 (presumably, due to being connected
|
||||||
|
to USB 1.1 only), bail out as its firmware cannot properly handle
|
||||||
|
this (by now)
|
||||||
|
|
||||||
2013-01-02 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
2013-01-02 Joerg Wunsch <j.gnu@uriah.heep.sax.de>
|
||||||
|
|
||||||
* ChangeLog: annual ChangeLog rotation time
|
* ChangeLog: annual ChangeLog rotation time
|
||||||
|
|
|
@ -701,6 +701,36 @@ static int jtag3_initialize(PROGRAMMER * pgm, AVRPART * p)
|
||||||
unsigned char cmd[4], *resp, b;
|
unsigned char cmd[4], *resp, b;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* At least, as of firmware 2.12, the JTAGICE3 doesn't handle
|
||||||
|
* splitting packets correctly. On a large transfer, the first
|
||||||
|
* split packets are correct, but remaining packets contain just
|
||||||
|
* garbage.
|
||||||
|
*
|
||||||
|
* We move the check here so in case future firmware versions fix
|
||||||
|
* this, the check below can be made dependended on the actual
|
||||||
|
* firmware level. Retrieving the firmware version can always be
|
||||||
|
* accomplished with USB 1.1 (64 byte max) packets.
|
||||||
|
*
|
||||||
|
* Allow to override the check by -F (so users could try on newer
|
||||||
|
* firmware), but warn loudly.
|
||||||
|
*/
|
||||||
|
if (jtag3_getparm(pgm, SCOPE_GENERAL, 0, PARM3_FW_MAJOR, parm, 2) < 0)
|
||||||
|
return -1;
|
||||||
|
if (pgm->fd.usb.max_xfer < USBDEV_MAX_XFER_3) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: the JTAGICE3's firmware %d.%d is broken on USB 1.1 connections, sorry\n",
|
||||||
|
progname, parm[0], parm[1]);
|
||||||
|
if (ovsigck) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: forced to continue by option -F; THIS PUTS THE DEVICE'S DATA INTEGRITY AT RISK!\n",
|
||||||
|
progname);
|
||||||
|
} else {
|
||||||
|
serial_close(&pgm->fd);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (pgm->flag & PGM_FL_IS_DW) {
|
if (pgm->flag & PGM_FL_IS_DW) {
|
||||||
ifname = "debugWire";
|
ifname = "debugWire";
|
||||||
if (p->flags & AVRPART_HAS_DW)
|
if (p->flags & AVRPART_HAS_DW)
|
||||||
|
|
|
@ -230,6 +230,22 @@ static int usbdev_open(char * port, long baud, union filedescriptor *fd)
|
||||||
fd->usb.rep = USBDEV_BULK_EP_READ_MKII;
|
fd->usb.rep = USBDEV_BULK_EP_READ_MKII;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (i = 0; i < dev->config[0].interface[0].altsetting[0].bNumEndpoints; i++)
|
||||||
|
{
|
||||||
|
if ((dev->config[0].interface[0].altsetting[0].endpoint[i].bEndpointAddress == fd->usb.rep ||
|
||||||
|
dev->config[0].interface[0].altsetting[0].endpoint[i].bEndpointAddress == fd->usb.wep) &&
|
||||||
|
dev->config[0].interface[0].altsetting[0].endpoint[i].wMaxPacketSize < fd->usb.max_xfer)
|
||||||
|
{
|
||||||
|
if (verbose != 0)
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: max packet size expected %d, but found %d due to EP 0x%02x's wMaxPacketSize\n",
|
||||||
|
progname,
|
||||||
|
fd->usb.max_xfer,
|
||||||
|
dev->config[0].interface[0].altsetting[0].endpoint[i].wMaxPacketSize,
|
||||||
|
dev->config[0].interface[0].altsetting[0].endpoint[i].bEndpointAddress);
|
||||||
|
fd->usb.max_xfer = dev->config[0].interface[0].altsetting[0].endpoint[i].wMaxPacketSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
trynext:
|
trynext:
|
||||||
|
|
Loading…
Reference in New Issue