mpsse: Always perform a general reset of the MPSSE in mpsse_open()
Per AN_135 FTDI MPSSE Basics Version 1.1, section 4.2 step 7. http://www.ftdichip.com/Support/Documents/AppNotes/AN_135_MPSSE_Basics.pdf This allows to stop and restart OpenOCD reliably, without needing to power cycle the interface. Change-Id: Ibeafe5ecfe7b2f6f82712cbc85116904407ddb36 Signed-off-by: Peter Stuge <peter@stuge.se> Reviewed-on: http://openocd.zylin.com/939 Tested-by: jenkins
This commit is contained in:
parent
d2f61e1a45
commit
452248af1d
|
@ -55,6 +55,7 @@
|
||||||
#define FTDI_DEVICE_OUT_REQTYPE (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE)
|
#define FTDI_DEVICE_OUT_REQTYPE (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE)
|
||||||
#define FTDI_DEVICE_IN_REQTYPE (0x80 | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE)
|
#define FTDI_DEVICE_IN_REQTYPE (0x80 | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE)
|
||||||
|
|
||||||
|
#define BITMODE_RESET 0x00
|
||||||
#define BITMODE_MPSSE 0x02
|
#define BITMODE_MPSSE 0x02
|
||||||
|
|
||||||
#define SIO_RESET_REQUEST 0x00
|
#define SIO_RESET_REQUEST 0x00
|
||||||
|
@ -312,6 +313,19 @@ struct mpsse_ctx *mpsse_open(const uint16_t *vid, const uint16_t *pid, const cha
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = libusb_control_transfer(ctx->usb_dev,
|
||||||
|
FTDI_DEVICE_OUT_REQTYPE,
|
||||||
|
SIO_SET_BITMODE_REQUEST,
|
||||||
|
0x0b | (BITMODE_RESET << 8),
|
||||||
|
ctx->index,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
ctx->usb_write_timeout);
|
||||||
|
if (err < 0) {
|
||||||
|
LOG_ERROR("unable to reset bitmode: %d", err);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
err = libusb_control_transfer(ctx->usb_dev,
|
err = libusb_control_transfer(ctx->usb_dev,
|
||||||
FTDI_DEVICE_OUT_REQTYPE,
|
FTDI_DEVICE_OUT_REQTYPE,
|
||||||
SIO_SET_BITMODE_REQUEST,
|
SIO_SET_BITMODE_REQUEST,
|
||||||
|
|
Loading…
Reference in New Issue