def list_dfu(args): usbdev = usb.core.find(idVendor=args.vid, idProduct=args.pid) if usbdev is None: raise ValueError('No STM32 DfuSe device found.') dfu = dfuse.DfuDevice(usbdev) for name, alt in dfu.alternates(): print ("Device: [%.4x:%.4x] Cfg: %d Intf: %d Alt: %d '%s'" % ( \ alt.device.idVendor, \ alt.device.idProduct, \ alt.configuration, \ alt.bInterfaceNumber, \ alt.bAlternateSetting, \ name))
def find_device(args): usbdev = usb.core.find(idVendor=args.vid, idProduct=args.pid) if usbdev is not None: dfu = dfuse.DfuDevice(usbdev, args.timeout) for _, alt in dfu.alternates(): if alt.configuration == args.cfg and alt.bInterfaceNumber == args.intf and alt.bAlternateSetting == args.alt: dfu.set_alternate(alt) status = dfu.get_status() if status[1] == dfuse.DfuState.DFU_ERROR: print("Error cleared: %r" % (status, )) dfu.clear_status() # Clear left-over errors return dfu raise ValueError( 'No DfuSe compatible device found, check device information options (see --help)' )
def find_device(self): """ :Try to find the DFU device and return it""" usbdev = usb.core.find(idVendor=self.VID, idProduct=self.PID) if usbdev is not None: dfuDev = dfuse.DfuDevice(usbdev) for _, alt in dfuDev.alternates(): if alt.configuration == self.CFG and \ alt.bInterfaceNumber == self.INTF and \ alt.bAlternateSetting == self.ALT: dfuDev.set_alternate(alt) status = dfuDev.get_status() if status[1] == dfuse.DfuState.DFU_ERROR: dfuDev.clear_status() # Clear left-over errors return dfuDev raise ValueError('No DfuSe compatible device found')
# Poll libUSB until a device in DFU mode is found while not app_cancellation_token.is_set(): params = {} if serial_number == None else { 'serial_number': serial_number } stm_device = usb.core.find(idVendor=0x0483, idProduct=0xdf11, **params) if stm_device != None: break time.sleep(1) find_odrive_cancellation_token.set() # we don't need this thread anymore if app_cancellation_token.is_set(): sys.exit(1) print("Found device {} in DFU mode".format(stm_device.serial_number)) dfudev = dfuse.DfuDevice(stm_device) # fill sectors with data sectors = list(load_sectors(dfudev, hexfile)) print("Sectors to be flashed: ") for sector in sectors: print(" {:08X} to {:08X}".format( sector['addr'], sector['addr'] + len(sector['data']) - 1)) # flash! erase(dfudev, sectors) flash(dfudev, sectors) #verify(dfudev, sectors) # If the flash operation failed for some reason, your device is bricked now. # You can unbrick it as long as the device remains powered on.