Merge commit 'd1ee827b4df710a0f693f6df7808cb5d75b2530c' into sam-update

This commit is contained in:
Jason Kotzin 2022-08-02 09:20:50 -07:00
commit 1737788a92
4 changed files with 101 additions and 103 deletions

View File

@ -178,16 +178,16 @@ def finddevs():
if __name__ == "__main__":
devs = finddevs()
if not devs:
print "No devices found!"
print("No devices found!")
exit(-1)
for dfu in devs:
handle = dfu[0].open()
man = handle.getString(dfu[0].iManufacturer, 30)
product = handle.getString(dfu[0].iProduct, 30)
print "Device %s: ID %04x:%04x %s - %s" % (dfu[0].filename,
dfu[0].idVendor, dfu[0].idProduct, man, product)
print "%r, %r" % (dfu[1], dfu[2])
print("Device %s: ID %04x:%04x %s - %s" % (dfu[0].filename,
dfu[0].idVendor, dfu[0].idProduct, man, product))
print("%r, %r" % (dfu[1], dfu[2]))

View File

@ -88,7 +88,7 @@ def stm32_scan(args, test):
if test == True:
return
print "No DFU devices found!"
print("No DFU devices found!")
exit(-1)
for dev in devs:
@ -101,7 +101,7 @@ def stm32_scan(args, test):
continue
man = dfudev.handle.getString(dfudev.dev.iManufacturer, 30)
if man == "Black Sphere Technologies":
if man == b"Black Sphere Technologies":
bmp = bmp + 1
bmp_devs.append(dev)
@ -109,25 +109,25 @@ def stm32_scan(args, test):
if test == True:
return
print "No compatible device found\n"
print("No compatible device found\n")
exit(-1)
if bmp > 1 and not args.serial_target:
if test == True:
return
print "Found multiple devices:\n"
print("Found multiple devices:\n")
for dev in bmp_devs:
dfudev = dfu.dfu_device(*dev)
man = dfudev.handle.getString(dfudev.dev.iManufacturer, 30)
product = dfudev.handle.getString(dfudev.dev.iProduct, 96)
serial_no = dfudev.handle.getString(dfudev.dev.iSerialNumber, 30)
print "Device ID:\t %04x:%04x" % (dfudev.dev.idVendor, dfudev.dev.idProduct)
print "Manufacturer:\t %s" % man
print "Product:\t %s" % product
print "Serial:\t\t %s\n" % serial_no
print("Device ID:\t %04x:%04x" % (dfudev.dev.idVendor, dfudev.dev.idProduct))
print("Manufacturer:\t %s" % man)
print("Product:\t %s" % product)
print("Serial:\t\t %s\n" % serial_no)
print "Select device with serial number!"
print("Select device with serial number!")
exit (-1)
for dev in bmp_devs:
@ -142,23 +142,23 @@ def stm32_scan(args, test):
if man == "Black Sphere Technologies":
break
print "Device ID:\t %04x:%04x" % (dfudev.dev.idVendor, dfudev.dev.idProduct)
print "Manufacturer:\t %s" % man
print "Product:\t %s" % product
print "Serial:\t\t %s" % serial_no
print("Device ID:\t %04x:%04x" % (dfudev.dev.idVendor, dfudev.dev.idProduct))
print("Manufacturer:\t %s" % man)
print("Product:\t %s" % product)
print("Serial:\t\t %s" % serial_no)
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)
return dfudev
if __name__ == "__main__":
print
print "USB Device Firmware Upgrade - Host Utility -- version 1.2"
print "Copyright (C) 2011 Black Sphere Technologies"
print "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>"
print
print("-")
print("USB Device Firmware Upgrade - Host Utility -- version 1.2")
print("Copyright (C) 2011 Black Sphere Technologies")
print("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>")
print("-")
parser = argparse.ArgumentParser()
parser.add_argument("progfile", help="Binary file to program")
@ -171,12 +171,12 @@ if __name__ == "__main__":
state = dfudev.get_state()
except:
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
if state == dfu.STATE_APP_IDLE:
dfudev.detach()
dfudev.release()
print "Invoking DFU Device"
print("Invoking DFU Device")
timeout = 0
while True :
sleep(0.5)
@ -184,11 +184,11 @@ if __name__ == "__main__":
dfudev = stm32_scan(args, True)
if dfudev: break
if timeout > 5 :
print "Error: DFU device did not appear"
print("Error: DFU device did not appear")
exit(-1)
if args.manifest :
stm32_manifest(dfudev)
print "Invoking Application Device"
print("Invoking Application Device")
exit(0)
dfudev.make_idle()
file = open(args.progfile, "rb")
@ -198,7 +198,7 @@ if __name__ == "__main__":
if args.address :
start = int(args.address, 0)
else :
if "F4" in product:
if b"F4" in product:
start = 0x8004000
else:
start = 0x8002000
@ -213,12 +213,12 @@ if __name__ == "__main__":
# get evaluated and erase called only once per sector!
stm32_erase(dfudev, addr)
except:
print "\nErase Timed out\n"
print("\nErase Timed out\n")
break
try:
stm32_set_address(dfudev, addr)
except:
print "\nSet Address Timed out\n"
print("\nSet Address Timed out\n")
break
stm32_write(dfudev, bin[:1024])
bin = bin[1024:]
@ -227,7 +227,7 @@ if __name__ == "__main__":
bin = file.read()
len = len(bin)
addr = start
print
print("-")
while bin:
try:
stm32_set_address(dfudev, addr)
@ -248,7 +248,7 @@ if __name__ == "__main__":
addr += 1024
len -= 1024
if len <= 0 :
print "\nVerified!"
print("\nVerified!")
stm32_manifest(dfudev)
print "All operations complete!\n"
print("All operations complete!\n")

View File

@ -440,6 +440,7 @@ static int stlink_usb_error_check(uint8_t *data, bool verbose)
case STLINK_SWD_DP_ERROR:
if (verbose)
DEBUG("STLINK_SWD_DP_ERROR\n");
raise_exception(EXCEPTION_ERROR, "STLINK_SWD_DP_ERROR");
return STLINK_ERROR_FAIL;
case STLINK_SWD_DP_PARITY_ERROR:
if (verbose)
@ -487,7 +488,7 @@ static int send_recv_retry(uint8_t *txbuf, size_t txsize,
gettimeofday(&now, NULL);
timersub(&now, &start, &diff);
if ((diff.tv_sec >= 1) || (res != STLINK_ERROR_WAIT)) {
DEBUG_STLINK("Failed: ");
DEBUG("write_retry failed");
return res;
}
}
@ -510,7 +511,7 @@ static int read_retry(uint8_t *txbuf, size_t txsize,
gettimeofday(&now, NULL);
timersub(&now, &start, &diff);
if ((diff.tv_sec >= 1) || (res != STLINK_ERROR_WAIT)) {
DEBUG_STLINK("Failed: ");
DEBUG("read_retry failed");
return res;
}
}
@ -534,7 +535,6 @@ static int write_retry(uint8_t *cmdbuf, size_t cmdsize,
gettimeofday(&now, NULL);
timersub(&now, &start, &diff);
if ((diff.tv_sec >= 1) || (res != STLINK_ERROR_WAIT)) {
DEBUG_STLINK("failed");
return res;
}
}
@ -683,7 +683,7 @@ void stlink_init(int argc, char **argv)
goto error;
}
int i = 0;
bool multiple_devices = false;
int nr_stlinks = 0;
while ((dev = devs[i++]) != NULL) {
struct libusb_device_descriptor 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");
continue;
}
if (Stlink.handle) {
libusb_close(Stlink.handle);
multiple_devices = (serial)? false : true;
}
r = libusb_open(dev, &Stlink.handle);
if (r == LIBUSB_SUCCESS) {
uint8_t data[32];
@ -736,7 +732,6 @@ void stlink_init(int argc, char **argv)
}
if (serial && (!strncmp(Stlink.serial, serial, strlen(serial))))
DEBUG("Found ");
if (!serial || (!strncmp(Stlink.serial, serial, strlen(serial)))) {
if (desc.idProduct == PRODUCT_ID_STLINKV2) {
DEBUG("STLINKV20 serial %s\n", Stlink.serial);
Stlink.ver_hw = 20;
@ -760,19 +755,26 @@ void stlink_init(int argc, char **argv)
} else {
DEBUG("Unknown STLINK variant, serial %s\n", Stlink.serial);
}
}
if (serial && (!strncmp(Stlink.serial, serial, strlen(serial))))
nr_stlinks++;
if (serial) {
if (!strncmp(Stlink.serial, serial, strlen(serial))) {
break;
} else {
libusb_close(Stlink.handle);
Stlink.handle = 0;
}
}
} else {
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 (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");
goto error;
}
@ -898,14 +900,8 @@ int stlink_enter_debug_swd(void)
STLINK_DEBUG_ENTER_SWD_NO_RESET};
uint8_t data[2];
DEBUG("Enter SWD\n");
if (send_recv_retry(cmd, 16, data, 2) != STLINK_ERROR_OK)
return -1;
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;
send_recv(cmd, 16, data, 2);
return stlink_usb_error_check(data, true);
}
int stlink_enter_debug_jtag(void)
@ -1077,8 +1073,7 @@ bool adiv5_ap_setup(int ap)
uint8_t data[2];
send_recv_retry(cmd, 16, data, 2);
DEBUG_STLINK("Open AP %d\n", ap);
stlink_usb_error_check(data, true);
return true;
return (stlink_usb_error_check(data, true))? false: true;
}
void adiv5_ap_cleanup(int ap)

View File

@ -491,6 +491,9 @@ void adiv5_dp_init(ADIv5_DP_t *dp)
ap = adiv5_new_ap(dp, i);
if (ap == NULL) {
adiv5_ap_cleanup(i);
if (i == 0)
return;
else
continue;
}
extern void kinetis_mdm_probe(ADIv5_AP_t *);