Merge commit 'd1ee827b4df710a0f693f6df7808cb5d75b2530c' into sam-update
This commit is contained in:
commit
1737788a92
@ -178,16 +178,16 @@ def finddevs():
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
devs = finddevs()
|
devs = finddevs()
|
||||||
if not devs:
|
if not devs:
|
||||||
print "No devices found!"
|
print("No devices found!")
|
||||||
exit(-1)
|
exit(-1)
|
||||||
|
|
||||||
for dfu in devs:
|
for dfu in devs:
|
||||||
handle = dfu[0].open()
|
handle = dfu[0].open()
|
||||||
man = handle.getString(dfu[0].iManufacturer, 30)
|
man = handle.getString(dfu[0].iManufacturer, 30)
|
||||||
product = handle.getString(dfu[0].iProduct, 30)
|
product = handle.getString(dfu[0].iProduct, 30)
|
||||||
print "Device %s: ID %04x:%04x %s - %s" % (dfu[0].filename,
|
print("Device %s: ID %04x:%04x %s - %s" % (dfu[0].filename,
|
||||||
dfu[0].idVendor, dfu[0].idProduct, man, product)
|
dfu[0].idVendor, dfu[0].idProduct, man, product))
|
||||||
print "%r, %r" % (dfu[1], dfu[2])
|
print("%r, %r" % (dfu[1], dfu[2]))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ def stm32_scan(args, test):
|
|||||||
if test == True:
|
if test == True:
|
||||||
return
|
return
|
||||||
|
|
||||||
print "No DFU devices found!"
|
print("No DFU devices found!")
|
||||||
exit(-1)
|
exit(-1)
|
||||||
|
|
||||||
for dev in devs:
|
for dev in devs:
|
||||||
@ -101,7 +101,7 @@ def stm32_scan(args, test):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
man = dfudev.handle.getString(dfudev.dev.iManufacturer, 30)
|
man = dfudev.handle.getString(dfudev.dev.iManufacturer, 30)
|
||||||
if man == "Black Sphere Technologies":
|
if man == b"Black Sphere Technologies":
|
||||||
bmp = bmp + 1
|
bmp = bmp + 1
|
||||||
bmp_devs.append(dev)
|
bmp_devs.append(dev)
|
||||||
|
|
||||||
@ -109,25 +109,25 @@ def stm32_scan(args, test):
|
|||||||
if test == True:
|
if test == True:
|
||||||
return
|
return
|
||||||
|
|
||||||
print "No compatible device found\n"
|
print("No compatible device found\n")
|
||||||
exit(-1)
|
exit(-1)
|
||||||
|
|
||||||
if bmp > 1 and not args.serial_target:
|
if bmp > 1 and not args.serial_target:
|
||||||
if test == True:
|
if test == True:
|
||||||
return
|
return
|
||||||
|
|
||||||
print "Found multiple devices:\n"
|
print("Found multiple devices:\n")
|
||||||
for dev in bmp_devs:
|
for dev in bmp_devs:
|
||||||
dfudev = dfu.dfu_device(*dev)
|
dfudev = dfu.dfu_device(*dev)
|
||||||
man = dfudev.handle.getString(dfudev.dev.iManufacturer, 30)
|
man = dfudev.handle.getString(dfudev.dev.iManufacturer, 30)
|
||||||
product = dfudev.handle.getString(dfudev.dev.iProduct, 96)
|
product = dfudev.handle.getString(dfudev.dev.iProduct, 96)
|
||||||
serial_no = dfudev.handle.getString(dfudev.dev.iSerialNumber, 30)
|
serial_no = dfudev.handle.getString(dfudev.dev.iSerialNumber, 30)
|
||||||
print "Device ID:\t %04x:%04x" % (dfudev.dev.idVendor, dfudev.dev.idProduct)
|
print("Device ID:\t %04x:%04x" % (dfudev.dev.idVendor, dfudev.dev.idProduct))
|
||||||
print "Manufacturer:\t %s" % man
|
print("Manufacturer:\t %s" % man)
|
||||||
print "Product:\t %s" % product
|
print("Product:\t %s" % product)
|
||||||
print "Serial:\t\t %s\n" % serial_no
|
print("Serial:\t\t %s\n" % serial_no)
|
||||||
|
|
||||||
print "Select device with serial number!"
|
print("Select device with serial number!")
|
||||||
exit (-1)
|
exit (-1)
|
||||||
|
|
||||||
for dev in bmp_devs:
|
for dev in bmp_devs:
|
||||||
@ -142,23 +142,23 @@ def stm32_scan(args, test):
|
|||||||
if man == "Black Sphere Technologies":
|
if man == "Black Sphere Technologies":
|
||||||
break
|
break
|
||||||
|
|
||||||
print "Device ID:\t %04x:%04x" % (dfudev.dev.idVendor, dfudev.dev.idProduct)
|
print("Device ID:\t %04x:%04x" % (dfudev.dev.idVendor, dfudev.dev.idProduct))
|
||||||
print "Manufacturer:\t %s" % man
|
print("Manufacturer:\t %s" % man)
|
||||||
print "Product:\t %s" % product
|
print("Product:\t %s" % product)
|
||||||
print "Serial:\t\t %s" % serial_no
|
print("Serial:\t\t %s" % serial_no)
|
||||||
|
|
||||||
if args.serial_target and serial_no != args.serial_target:
|
if args.serial_target and serial_no != args.serial_target:
|
||||||
print "Serial number doesn't match!\n"
|
print("Serial number doesn't match!\n")
|
||||||
exit(-2)
|
exit(-2)
|
||||||
|
|
||||||
return dfudev
|
return dfudev
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print
|
print("-")
|
||||||
print "USB Device Firmware Upgrade - Host Utility -- version 1.2"
|
print("USB Device Firmware Upgrade - Host Utility -- version 1.2")
|
||||||
print "Copyright (C) 2011 Black Sphere Technologies"
|
print("Copyright (C) 2011 Black Sphere Technologies")
|
||||||
print "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>"
|
print("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>")
|
||||||
print
|
print("-")
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("progfile", help="Binary file to program")
|
parser.add_argument("progfile", help="Binary file to program")
|
||||||
@ -171,12 +171,12 @@ if __name__ == "__main__":
|
|||||||
state = dfudev.get_state()
|
state = dfudev.get_state()
|
||||||
except:
|
except:
|
||||||
if args.manifest : exit(0)
|
if args.manifest : exit(0)
|
||||||
print "Failed to read device state! Assuming APP_IDLE"
|
print("Failed to read device state! Assuming APP_IDLE")
|
||||||
state = dfu.STATE_APP_IDLE
|
state = dfu.STATE_APP_IDLE
|
||||||
if state == dfu.STATE_APP_IDLE:
|
if state == dfu.STATE_APP_IDLE:
|
||||||
dfudev.detach()
|
dfudev.detach()
|
||||||
dfudev.release()
|
dfudev.release()
|
||||||
print "Invoking DFU Device"
|
print("Invoking DFU Device")
|
||||||
timeout = 0
|
timeout = 0
|
||||||
while True :
|
while True :
|
||||||
sleep(0.5)
|
sleep(0.5)
|
||||||
@ -184,11 +184,11 @@ if __name__ == "__main__":
|
|||||||
dfudev = stm32_scan(args, True)
|
dfudev = stm32_scan(args, True)
|
||||||
if dfudev: break
|
if dfudev: break
|
||||||
if timeout > 5 :
|
if timeout > 5 :
|
||||||
print "Error: DFU device did not appear"
|
print("Error: DFU device did not appear")
|
||||||
exit(-1)
|
exit(-1)
|
||||||
if args.manifest :
|
if args.manifest :
|
||||||
stm32_manifest(dfudev)
|
stm32_manifest(dfudev)
|
||||||
print "Invoking Application Device"
|
print("Invoking Application Device")
|
||||||
exit(0)
|
exit(0)
|
||||||
dfudev.make_idle()
|
dfudev.make_idle()
|
||||||
file = open(args.progfile, "rb")
|
file = open(args.progfile, "rb")
|
||||||
@ -198,7 +198,7 @@ if __name__ == "__main__":
|
|||||||
if args.address :
|
if args.address :
|
||||||
start = int(args.address, 0)
|
start = int(args.address, 0)
|
||||||
else :
|
else :
|
||||||
if "F4" in product:
|
if b"F4" in product:
|
||||||
start = 0x8004000
|
start = 0x8004000
|
||||||
else:
|
else:
|
||||||
start = 0x8002000
|
start = 0x8002000
|
||||||
@ -213,12 +213,12 @@ if __name__ == "__main__":
|
|||||||
# get evaluated and erase called only once per sector!
|
# get evaluated and erase called only once per sector!
|
||||||
stm32_erase(dfudev, addr)
|
stm32_erase(dfudev, addr)
|
||||||
except:
|
except:
|
||||||
print "\nErase Timed out\n"
|
print("\nErase Timed out\n")
|
||||||
break
|
break
|
||||||
try:
|
try:
|
||||||
stm32_set_address(dfudev, addr)
|
stm32_set_address(dfudev, addr)
|
||||||
except:
|
except:
|
||||||
print "\nSet Address Timed out\n"
|
print("\nSet Address Timed out\n")
|
||||||
break
|
break
|
||||||
stm32_write(dfudev, bin[:1024])
|
stm32_write(dfudev, bin[:1024])
|
||||||
bin = bin[1024:]
|
bin = bin[1024:]
|
||||||
@ -227,7 +227,7 @@ if __name__ == "__main__":
|
|||||||
bin = file.read()
|
bin = file.read()
|
||||||
len = len(bin)
|
len = len(bin)
|
||||||
addr = start
|
addr = start
|
||||||
print
|
print("-")
|
||||||
while bin:
|
while bin:
|
||||||
try:
|
try:
|
||||||
stm32_set_address(dfudev, addr)
|
stm32_set_address(dfudev, addr)
|
||||||
@ -248,7 +248,7 @@ if __name__ == "__main__":
|
|||||||
addr += 1024
|
addr += 1024
|
||||||
len -= 1024
|
len -= 1024
|
||||||
if len <= 0 :
|
if len <= 0 :
|
||||||
print "\nVerified!"
|
print("\nVerified!")
|
||||||
stm32_manifest(dfudev)
|
stm32_manifest(dfudev)
|
||||||
|
|
||||||
print "All operations complete!\n"
|
print("All operations complete!\n")
|
||||||
|
@ -440,6 +440,7 @@ static int stlink_usb_error_check(uint8_t *data, bool verbose)
|
|||||||
case STLINK_SWD_DP_ERROR:
|
case STLINK_SWD_DP_ERROR:
|
||||||
if (verbose)
|
if (verbose)
|
||||||
DEBUG("STLINK_SWD_DP_ERROR\n");
|
DEBUG("STLINK_SWD_DP_ERROR\n");
|
||||||
|
raise_exception(EXCEPTION_ERROR, "STLINK_SWD_DP_ERROR");
|
||||||
return STLINK_ERROR_FAIL;
|
return STLINK_ERROR_FAIL;
|
||||||
case STLINK_SWD_DP_PARITY_ERROR:
|
case STLINK_SWD_DP_PARITY_ERROR:
|
||||||
if (verbose)
|
if (verbose)
|
||||||
@ -487,7 +488,7 @@ static int send_recv_retry(uint8_t *txbuf, size_t txsize,
|
|||||||
gettimeofday(&now, NULL);
|
gettimeofday(&now, NULL);
|
||||||
timersub(&now, &start, &diff);
|
timersub(&now, &start, &diff);
|
||||||
if ((diff.tv_sec >= 1) || (res != STLINK_ERROR_WAIT)) {
|
if ((diff.tv_sec >= 1) || (res != STLINK_ERROR_WAIT)) {
|
||||||
DEBUG_STLINK("Failed: ");
|
DEBUG("write_retry failed");
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -510,7 +511,7 @@ static int read_retry(uint8_t *txbuf, size_t txsize,
|
|||||||
gettimeofday(&now, NULL);
|
gettimeofday(&now, NULL);
|
||||||
timersub(&now, &start, &diff);
|
timersub(&now, &start, &diff);
|
||||||
if ((diff.tv_sec >= 1) || (res != STLINK_ERROR_WAIT)) {
|
if ((diff.tv_sec >= 1) || (res != STLINK_ERROR_WAIT)) {
|
||||||
DEBUG_STLINK("Failed: ");
|
DEBUG("read_retry failed");
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -534,7 +535,6 @@ static int write_retry(uint8_t *cmdbuf, size_t cmdsize,
|
|||||||
gettimeofday(&now, NULL);
|
gettimeofday(&now, NULL);
|
||||||
timersub(&now, &start, &diff);
|
timersub(&now, &start, &diff);
|
||||||
if ((diff.tv_sec >= 1) || (res != STLINK_ERROR_WAIT)) {
|
if ((diff.tv_sec >= 1) || (res != STLINK_ERROR_WAIT)) {
|
||||||
DEBUG_STLINK("failed");
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -683,7 +683,7 @@ void stlink_init(int argc, char **argv)
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
int i = 0;
|
int i = 0;
|
||||||
bool multiple_devices = false;
|
int nr_stlinks = 0;
|
||||||
while ((dev = devs[i++]) != NULL) {
|
while ((dev = devs[i++]) != NULL) {
|
||||||
struct libusb_device_descriptor desc;
|
struct libusb_device_descriptor desc;
|
||||||
int r = libusb_get_device_descriptor(dev, &desc);
|
int r = libusb_get_device_descriptor(dev, &desc);
|
||||||
@ -699,10 +699,6 @@ void stlink_init(int argc, char **argv)
|
|||||||
DEBUG("STLINKV1 not supported\n");
|
DEBUG("STLINKV1 not supported\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (Stlink.handle) {
|
|
||||||
libusb_close(Stlink.handle);
|
|
||||||
multiple_devices = (serial)? false : true;
|
|
||||||
}
|
|
||||||
r = libusb_open(dev, &Stlink.handle);
|
r = libusb_open(dev, &Stlink.handle);
|
||||||
if (r == LIBUSB_SUCCESS) {
|
if (r == LIBUSB_SUCCESS) {
|
||||||
uint8_t data[32];
|
uint8_t data[32];
|
||||||
@ -736,7 +732,6 @@ void stlink_init(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
if (serial && (!strncmp(Stlink.serial, serial, strlen(serial))))
|
if (serial && (!strncmp(Stlink.serial, serial, strlen(serial))))
|
||||||
DEBUG("Found ");
|
DEBUG("Found ");
|
||||||
if (!serial || (!strncmp(Stlink.serial, serial, strlen(serial)))) {
|
|
||||||
if (desc.idProduct == PRODUCT_ID_STLINKV2) {
|
if (desc.idProduct == PRODUCT_ID_STLINKV2) {
|
||||||
DEBUG("STLINKV20 serial %s\n", Stlink.serial);
|
DEBUG("STLINKV20 serial %s\n", Stlink.serial);
|
||||||
Stlink.ver_hw = 20;
|
Stlink.ver_hw = 20;
|
||||||
@ -760,19 +755,26 @@ void stlink_init(int argc, char **argv)
|
|||||||
} else {
|
} else {
|
||||||
DEBUG("Unknown STLINK variant, serial %s\n", Stlink.serial);
|
DEBUG("Unknown STLINK variant, serial %s\n", Stlink.serial);
|
||||||
}
|
}
|
||||||
}
|
nr_stlinks++;
|
||||||
if (serial && (!strncmp(Stlink.serial, serial, strlen(serial))))
|
if (serial) {
|
||||||
|
if (!strncmp(Stlink.serial, serial, strlen(serial))) {
|
||||||
break;
|
break;
|
||||||
|
} else {
|
||||||
|
libusb_close(Stlink.handle);
|
||||||
|
Stlink.handle = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
DEBUG("Open failed %s\n", libusb_strerror(r));
|
DEBUG("Open failed %s\n", libusb_strerror(r));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (multiple_devices) {
|
|
||||||
DEBUG("Multiple Stlinks. Please specify serial number\n");
|
|
||||||
goto error_1;
|
|
||||||
}
|
|
||||||
if (!Stlink.handle) {
|
if (!Stlink.handle) {
|
||||||
|
if (nr_stlinks && serial)
|
||||||
|
DEBUG("No Stlink with given serial number %s\n", serial);
|
||||||
|
else if (nr_stlinks > 1)
|
||||||
|
DEBUG("Multiple Stlinks. Please specify serial number\n");
|
||||||
|
else
|
||||||
DEBUG("No Stlink device found!\n");
|
DEBUG("No Stlink device found!\n");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
@ -898,14 +900,8 @@ int stlink_enter_debug_swd(void)
|
|||||||
STLINK_DEBUG_ENTER_SWD_NO_RESET};
|
STLINK_DEBUG_ENTER_SWD_NO_RESET};
|
||||||
uint8_t data[2];
|
uint8_t data[2];
|
||||||
DEBUG("Enter SWD\n");
|
DEBUG("Enter SWD\n");
|
||||||
if (send_recv_retry(cmd, 16, data, 2) != STLINK_ERROR_OK)
|
send_recv(cmd, 16, data, 2);
|
||||||
return -1;
|
return stlink_usb_error_check(data, true);
|
||||||
uint8_t cmd1[16] = {STLINK_DEBUG_COMMAND,
|
|
||||||
STLINK_DEBUG_READCOREID};
|
|
||||||
uint8_t data1[4];
|
|
||||||
send_recv(cmd1, 16, data1, 4);
|
|
||||||
stlink_usb_error_check(data, false);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int stlink_enter_debug_jtag(void)
|
int stlink_enter_debug_jtag(void)
|
||||||
@ -1077,8 +1073,7 @@ bool adiv5_ap_setup(int ap)
|
|||||||
uint8_t data[2];
|
uint8_t data[2];
|
||||||
send_recv_retry(cmd, 16, data, 2);
|
send_recv_retry(cmd, 16, data, 2);
|
||||||
DEBUG_STLINK("Open AP %d\n", ap);
|
DEBUG_STLINK("Open AP %d\n", ap);
|
||||||
stlink_usb_error_check(data, true);
|
return (stlink_usb_error_check(data, true))? false: true;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void adiv5_ap_cleanup(int ap)
|
void adiv5_ap_cleanup(int ap)
|
||||||
|
@ -491,6 +491,9 @@ void adiv5_dp_init(ADIv5_DP_t *dp)
|
|||||||
ap = adiv5_new_ap(dp, i);
|
ap = adiv5_new_ap(dp, i);
|
||||||
if (ap == NULL) {
|
if (ap == NULL) {
|
||||||
adiv5_ap_cleanup(i);
|
adiv5_ap_cleanup(i);
|
||||||
|
if (i == 0)
|
||||||
|
return;
|
||||||
|
else
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
extern void kinetis_mdm_probe(ADIv5_AP_t *);
|
extern void kinetis_mdm_probe(ADIv5_AP_t *);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user