Exemple #1
0
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))
Exemple #2
0
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)'
    )
Exemple #3
0
    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')
Exemple #4
0
    # 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.