Closed mcuee closed 2 years ago
Right now avrdude under Windows is using avrdude-libwinusb which is good to support both libusb0.sys and WinUSB. It has a limitation though -- some issues with USB Composite Device support.
Long term solution is to use libusb-1.0 as per @mariusgreuel, but probably after libusb Windows supports get better with libusb0.sys. Ref:
@dl8dtl mentioned below. https://github.com/avrdudes/avrdude/issues/906#issuecomment-1120433920
- I will recommend that avrdude to ditch the legacy libusb-0.1 API altogether (including libusb-win32) and move to libusb-1.0 API.
Unlikely to happen. libusb-0.1 "just works", and it would need volunteers for such a change, to rewrite a lot of code – and test all this in the end, on all supported platforms, with all affected programmers. In the end, doing all that work for no gain other than replacing one API by another one, i.e. there won't be any improvements for end-users by that change.
I see that usbasp already has the support of libusb-1.0 if it is present and otherwise fall back to libusb-0.1 API . So one way is to replace one by one if there are developers who are interested to create the patch for libusb-1.0 API, using the approach of usbasp.
Some candidates which may affect less users: libftdi based programmers -- it is probably good to move away from libftdi-0.1 and move to libftdi-1.0 (which is based on libusb-1.0).
It seems okay to use libusb0.sys and libusb-1.0.26 and libftdi-1.0 together with avrdude under Windows. I tested with Amontec JTAGKey-2. https://github.com/avrdudes/avrdude/issues/975#issuecomment-1149539658
There is also a concern about the libusb-1.0 support of libusb0.sys, which is the motivation of avrdude-libwinusb.
I will test out libusb0.sys and libusb-1.0.26 with usbasp later.
usbasp test with official Windows binary which is using avrdude-libwinusb and not libusb-1.0. It supports libusb0.sys and WinUSB. It actually supports libusbk.sys as well (since libusbk.sys supports most of the driver ioctl codes from libusb0.sys)
Run log using libusbk.sys.
PS C:\work\avr\avrdude_test\avrdude-7.0_bin64> C:\libusbK-3.1.0.0-bin\bin\exe\amd64\kList.exe
Loading USB ID's maintained by Stephen J. Gowdy <linux.usb.ids@gmail.com>..
1. USBasp (VOTI) [Connected]
Service : libusbK
ClassGUID : {ECFB0CFD-74C4-4F52-BBF7-343461CD72AC}
DeviceID : USB\VID_16C0&PID_05DC\5&586B51A&0&1
DeviceInterfaceGUID : {D32EDB66-69FC-01DC-03DD-20936E7318C2}
SymbolicLink : \\?\usb#vid_16c0&pid_05dc#5&586b51a&0&1#{d32edb66-69fc-01dc-03dd-20936e7318c2}
DevicePath : \\?\usb#vid_16c0&pid_05dc#5&586b51a&0&1#{d32edb66-69fc-01dc-03dd-20936e7318c2}
SerialNumber : 5&586B51A&0&1
BusNumber : 0
DeviceAddress : 1
Select device (1-1) :1
Loading driver api..
Getting descriptors..
-Device:
bLength :18
bDescriptorType :0x01
bcdUSB :0x0110
bDeviceClass :0xFF (Vendor Specific Class)
bDeviceSubClass :0x00
bDeviceProtocol :0x00
bMaxPacketSize0 :8
idVendor :0x16C0 (Van Ooijen Technische Informatica)
idProduct :0x05DC (shared ID for use with libusb)
bcdDevice :0x0102
iManufacturer :1 (www.fischl.de)
iProduct :2 (USBasp)
iSerialNumber :0
bNumConfigurations :1
!End Device
-Configuration:
bLength :9
bDescriptorType :0x02
wTotalLength :18
bNumInterfaces :1
bConfigurationValue :0x01
iConfiguration :0
bmAttributes :0x80
MaxPower :25 (50ma)
-Interface:
bLength :9
bDescriptorType :0x04
bInterfaceNumber :0x00
bAlternateSetting :0x00
bNumEndpoints :0
bInterfaceClass :0x00 (Defined at Interface level)
bInterfaceSubClass :0x00
bInterfaceProtocol :0x00
iInterface :0
!End Interface
!End Configuration
-MSOSV1:
bDescriptorType :0x00
bLength :00
bMS_VendorCode :0x00
qwSignature :
-Extended Compatible IDs:
dwLength :0
bcdVersion :0x0000
wIndex :0
bCount :0
!End Extended Compatible IDs
!End MSOSV1
-BOS:
bDescriptorType :0x00
bLength :10
wTotalLength :0
bNumDeviceCapabilities:0
!End BOS
PS C:\work\avr\avrdude_test\avrdude-v7.0-windows-x64> .\avrdude.exe -c usbasp -p m328p -U flash:w:.\Blink.ino.with_bootloader.standard.hex:i -v
avrdude.exe: Version 7.0
Copyright (c) Brian Dean, http://www.bdmicro.com/
Copyright (c) Joerg Wunsch
System wide configuration file is "C:/work/avr/avrdude_test/avrdude-v7.0-windows-x64/avrdude.conf"
Using Port : usb
Using Programmer : usbasp
AVR Part : ATmega328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
Serial program mode : yes
Parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Alias Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 1 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 1 0 0 0 0x00 0x00
Programmer Type : usbasp
Description : USBasp, http://www.fischl.de/usbasp/
avrdude.exe: auto set sck period (because given equals null)
avrdude.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude.exe: Device signature = 0x1e950f (probably m328p)
avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: auto set sck period (because given equals null)
avrdude.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude.exe: reading input file ".\Blink.ino.with_bootloader.standard.hex"
avrdude.exe: writing flash (32768 bytes):
Writing | ################################################## | 100% 0.65s
avrdude.exe: 32768 bytes of flash written
avrdude.exe: verifying flash memory against .\Blink.ino.with_bootloader.standard.hex:
Reading | ################################################## | 100% 0.52s
avrdude.exe: 32768 bytes of flash verified
avrdude.exe done. Thank you.
Testing usbasp with MSYS2 binary using libusb0.sys and libusb-1.0.26.
PS C:\work\avr\avrdude_test\avrdude-7.0_bin64> C:\libusbK-3.1.0.0-bin\bin\exe\amd64\kList.exe
Loading USB ID's maintained by Stephen J. Gowdy <linux.usb.ids@gmail.com>..
1. USBasp (VOTI) [Connected]
Service : libusb0
ClassGUID : {EB781AAF-9C70-4523-A5DF-642A87ECA567}
DeviceID : USB\VID_16C0&PID_05DC\5&586B51A&0&1
DeviceInterfaceGUID : {B3F4C5CA-2A80-9D6A-1A90-D7BADF35524F}
SymbolicLink : \\?\usb#vid_16c0&pid_05dc#5&586b51a&0&1#{b3f4c5ca-2a80-9d6a-1a90-d7badf35524f}
DevicePath : \\.\libusb0-0001
SerialNumber : 5&586B51A&0&1
BusNumber : 0
DeviceAddress : 1
Select device (1-1) :1
Loading driver api..
Getting descriptors..
-Device:
bLength :18
bDescriptorType :0x01
bcdUSB :0x0110
bDeviceClass :0xFF (Vendor Specific Class)
bDeviceSubClass :0x00
bDeviceProtocol :0x00
bMaxPacketSize0 :8
idVendor :0x16C0 (Van Ooijen Technische Informatica)
idProduct :0x05DC (shared ID for use with libusb)
bcdDevice :0x0102
iManufacturer :1 (www.fischl.de)
iProduct :2 (USBasp)
iSerialNumber :0
bNumConfigurations :1
!End Device
-Configuration:
bLength :9
bDescriptorType :0x02
wTotalLength :18
bNumInterfaces :1
bConfigurationValue :0x01
iConfiguration :0
bmAttributes :0x80
MaxPower :25 (50ma)
-Interface:
bLength :9
bDescriptorType :0x04
bInterfaceNumber :0x00
bAlternateSetting :0x00
bNumEndpoints :0
bInterfaceClass :0x00 (Defined at Interface level)
bInterfaceSubClass :0x00
bInterfaceProtocol :0x00
iInterface :0
!End Interface
!End Configuration
-MSOSV1:
bDescriptorType :0x00
bLength :00
bMS_VendorCode :0x00
qwSignature :
-Extended Compatible IDs:
dwLength :0
bcdVersion :0x0000
wIndex :0
bCount :0
!End Extended Compatible IDs
!End MSOSV1
PS C:\work\avr\avrdude_test\avrdude-7.0_bin64> $Env:LIBUSB_DEBUG=3
PS C:\work\avr\avrdude_test\avrdude-7.0_bin64> .\avrdude_shared.exe -c usbasp -p m328p -U flash:w:.\Blink.ino.with_bootloader.standard.hex:i -v
avrdude_shared.exe: Version 7.0
Copyright (c) Brian Dean, http://www.bdmicro.com/
Copyright (c) Joerg Wunsch
System wide configuration file is "C:/work/avr/avrdude_test/avrdude-7.0_bin64/avrdude.conf"
Using Port : usb
Using Programmer : usbasp
libusb: info [winusbx_init] WinUSB DLL available (with isoch support)
libusb: info [windows_init] UsbDk backend is not available
libusb: warning [libusb_init] installing new context as implicit default
AVR Part : ATmega328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
Serial program mode : yes
Parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Alias Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 1 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 1 0 0 0 0x00 0x00
Programmer Type : usbasp
Description : USBasp, http://www.fischl.de/usbasp/
avrdude_shared.exe: auto set sck period (because given equals null)
avrdude_shared.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude_shared.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude_shared.exe: Device signature = 0x1e950f (probably m328p)
avrdude_shared.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude_shared.exe: erasing chip
avrdude_shared.exe: auto set sck period (because given equals null)
avrdude_shared.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude_shared.exe: reading input file ".\Blink.ino.with_bootloader.standard.hex"
avrdude_shared.exe: writing flash (32768 bytes):
Writing | ################################################## | 100% 0.73s
avrdude_shared.exe: 32768 bytes of flash written
avrdude_shared.exe: verifying flash memory against .\Blink.ino.with_bootloader.standard.hex:
Reading | ################################################## | 100% 0.59s
avrdude_shared.exe: 32768 bytes of flash verified
avrdude_shared.exe done. Thank you.
Testing usbasp with MSYS2 binary using libusbk.sys and libusb-1.0.26.
PS C:\work\avr\avrdude_test\avrdude-7.0_bin64> C:\libusbK-3.1.0.0-bin\bin\exe\amd64\kList.exe
Loading USB ID's maintained by Stephen J. Gowdy <linux.usb.ids@gmail.com>..
1. USBasp (VOTI) [Connected]
Service : libusbK
ClassGUID : {ECFB0CFD-74C4-4F52-BBF7-343461CD72AC}
DeviceID : USB\VID_16C0&PID_05DC\5&586B51A&0&1
DeviceInterfaceGUID : {D32EDB66-69FC-01DC-03DD-20936E7318C2}
SymbolicLink : \\?\usb#vid_16c0&pid_05dc#5&586b51a&0&1#{d32edb66-69fc-01dc-03dd-20936e7318c2}
DevicePath : \\?\usb#vid_16c0&pid_05dc#5&586b51a&0&1#{d32edb66-69fc-01dc-03dd-20936e7318c2}
SerialNumber : 5&586B51A&0&1
BusNumber : 0
DeviceAddress : 1
Select device (1-1) :1
Loading driver api..
Getting descriptors..
-Device:
bLength :18
bDescriptorType :0x01
bcdUSB :0x0110
bDeviceClass :0xFF (Vendor Specific Class)
bDeviceSubClass :0x00
bDeviceProtocol :0x00
bMaxPacketSize0 :8
idVendor :0x16C0 (Van Ooijen Technische Informatica)
idProduct :0x05DC (shared ID for use with libusb)
bcdDevice :0x0102
iManufacturer :1 (www.fischl.de)
iProduct :2 (USBasp)
iSerialNumber :0
bNumConfigurations :1
!End Device
-Configuration:
bLength :9
bDescriptorType :0x02
wTotalLength :18
bNumInterfaces :1
bConfigurationValue :0x01
iConfiguration :0
bmAttributes :0x80
MaxPower :25 (50ma)
-Interface:
bLength :9
bDescriptorType :0x04
bInterfaceNumber :0x00
bAlternateSetting :0x00
bNumEndpoints :0
bInterfaceClass :0x00 (Defined at Interface level)
bInterfaceSubClass :0x00
bInterfaceProtocol :0x00
iInterface :0
!End Interface
!End Configuration
-MSOSV1:
bDescriptorType :0x00
bLength :00
bMS_VendorCode :0x00
qwSignature :
-Extended Compatible IDs:
dwLength :0
bcdVersion :0x0000
wIndex :0
bCount :0
!End Extended Compatible IDs
!End MSOSV1
-BOS:
bDescriptorType :0x00
bLength :10
wTotalLength :0
bNumDeviceCapabilities:0
!End BOS
PS C:\work\avr\avrdude_test\avrdude-7.0_bin64> .\avrdude_shared.exe -c usbasp -p m328p -U flash:w:.\Blink.ino.with_bootloader.standard.hex:i -v
avrdude_shared.exe: Version 7.0
Copyright (c) Brian Dean, http://www.bdmicro.com/
Copyright (c) Joerg Wunsch
System wide configuration file is "C:/work/avr/avrdude_test/avrdude-7.0_bin64/avrdude.conf"
Using Port : usb
Using Programmer : usbasp
libusb: info [winusbx_init] WinUSB DLL available (with isoch support)
libusb: info [windows_init] UsbDk backend is not available
libusb: warning [libusb_init] installing new context as implicit default
AVR Part : ATmega328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
Serial program mode : yes
Parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Alias Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 1 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 1 0 0 0 0x00 0x00
Programmer Type : usbasp
Description : USBasp, http://www.fischl.de/usbasp/
avrdude_shared.exe: auto set sck period (because given equals null)
avrdude_shared.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude_shared.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude_shared.exe: Device signature = 0x1e950f (probably m328p)
avrdude_shared.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude_shared.exe: erasing chip
avrdude_shared.exe: auto set sck period (because given equals null)
avrdude_shared.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude_shared.exe: reading input file ".\Blink.ino.with_bootloader.standard.hex"
avrdude_shared.exe: writing flash (32768 bytes):
Writing | ################################################## | 100% 0.72s
avrdude_shared.exe: 32768 bytes of flash written
avrdude_shared.exe: verifying flash memory against .\Blink.ino.with_bootloader.standard.hex:
Reading | ################################################## | 100% 0.59s
avrdude_shared.exe: 32768 bytes of flash verified
avrdude_shared.exe done. Thank you.
@mariusgreuel and @dioannidis
Basically my testing using the usbasp clone and Arduino Uno clone, it shows with the release of libusb-1.0.26, avrdude is okay with all three drivers: WinUSB, libusb0.sys and libusbk.sys.
The main problem of libusb0.sys with libusb-1.0 (especially in version 1.0.24) was sorted out in libusb-1.0.25 release. I believe there may be other issues with libusb0.sys and libusb-1.0, but for the purpose of avrdude, I tend to believe it works fine.
Hopefully more testing can be done by other users to check if libusb-1.0
I do not see any error messages from libusb-1.0.26 debug log.
Just for compleleness, here is the run log for WinUSB with this usbasp clone.
PS C:\work\avr\avrdude_test\avrdude-7.0_bin64> C:\libusbK-3.1.0.0-bin\bin\exe\amd64\kList.exe
Loading USB ID's maintained by Stephen J. Gowdy <linux.usb.ids@gmail.com>..
1. USBasp (VOTI) [Connected]
Service : WinUSB
ClassGUID : {88BAE032-5A81-49F0-BC3D-A4FF138216D6}
DeviceID : USB\VID_16C0&PID_05DC\5&586B51A&0&1
DeviceInterfaceGUID : {AE852F68-9D25-E08E-E595-3675C74F2D68}
SymbolicLink : \\?\usb#vid_16c0&pid_05dc#5&586b51a&0&1#{ae852f68-9d25-e08e-e595-3675c74f2d68}
DevicePath : \\?\usb#vid_16c0&pid_05dc#5&586b51a&0&1#{ae852f68-9d25-e08e-e595-3675c74f2d68}
SerialNumber : 5&586B51A&0&1
BusNumber : 0
DeviceAddress : 1
Select device (1-1) :1
Loading driver api..
Getting descriptors..
-Device:
bLength :18
bDescriptorType :0x01
bcdUSB :0x0110
bDeviceClass :0xFF (Vendor Specific Class)
bDeviceSubClass :0x00
bDeviceProtocol :0x00
bMaxPacketSize0 :8
idVendor :0x16C0 (Van Ooijen Technische Informatica)
idProduct :0x05DC (shared ID for use with libusb)
bcdDevice :0x0102
iManufacturer :1 (www.fischl.de)
iProduct :2 (USBasp)
iSerialNumber :0
bNumConfigurations :1
!End Device
-Configuration:
bLength :9
bDescriptorType :0x02
wTotalLength :18
bNumInterfaces :1
bConfigurationValue :0x01
iConfiguration :0
bmAttributes :0x80
MaxPower :25 (50ma)
-Interface:
bLength :9
bDescriptorType :0x04
bInterfaceNumber :0x00
bAlternateSetting :0x00
bNumEndpoints :0
bInterfaceClass :0x00 (Defined at Interface level)
bInterfaceSubClass :0x00
bInterfaceProtocol :0x00
iInterface :0
!End Interface
!End Configuration
-MSOSV1:
bDescriptorType :0x00
bLength :00
bMS_VendorCode :0x0A
qwSignature :
-Extended Compatible IDs:
dwLength :0
bcdVersion :0x0000
wIndex :0
bCount :0
!End Extended Compatible IDs
!End MSOSV1
PS C:\work\avr\avrdude_test\avrdude-7.0_bin64> .\avrdude_shared.exe -c usbasp -p m328p -U flash:w:.\Blink.ino.with_bootloader.standard.hex:i -v
avrdude_shared.exe: Version 7.0
Copyright (c) Brian Dean, http://www.bdmicro.com/
Copyright (c) Joerg Wunsch
System wide configuration file is "C:/work/avr/avrdude_test/avrdude-7.0_bin64/avrdude.conf"
Using Port : usb
Using Programmer : usbasp
libusb: info [winusbx_init] WinUSB DLL available (with isoch support)
libusb: info [windows_init] UsbDk backend is not available
libusb: warning [libusb_init] installing new context as implicit default
AVR Part : ATmega328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
Serial program mode : yes
Parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Alias Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 1 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 1 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 1 0 0 0 0x00 0x00
Programmer Type : usbasp
Description : USBasp, http://www.fischl.de/usbasp/
avrdude_shared.exe: auto set sck period (because given equals null)
avrdude_shared.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude_shared.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude_shared.exe: Device signature = 0x1e950f (probably m328p)
avrdude_shared.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude_shared.exe: erasing chip
avrdude_shared.exe: auto set sck period (because given equals null)
avrdude_shared.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude_shared.exe: reading input file ".\Blink.ino.with_bootloader.standard.hex"
avrdude_shared.exe: writing flash (32768 bytes):
Writing | ################################################## | 100% 0.69s
avrdude_shared.exe: 32768 bytes of flash written
avrdude_shared.exe: verifying flash memory against .\Blink.ino.with_bootloader.standard.hex:
Reading | ################################################## | 100% 0.55s
avrdude_shared.exe: 32768 bytes of flash verified
avrdude_shared.exe done. Thank you.
@dl8dtl mentioned below. https://github.com/avrdudes/avrdude/issues/906#issuecomment-1120433920
- I will recommend that avrdude to ditch the legacy libusb-0.1 API altogether (including libusb-win32) and move to libusb-1.0 API.
Unlikely to happen. libusb-0.1 "just works", and it would need volunteers for such a change, to rewrite a lot of code – and test all this in the end, on all supported platforms, with all affected programmers. In the end, doing all that work for no gain other than replacing one API by another one, i.e. there won't be any improvements for end-users by that change.
I mentioned in earlier comments:
I see that usbasp already has the support of libusb-1.0 if it is present and otherwise fall back to libusb-0.1 API . So one way is to replace one by one if there are developers who are interested to create the patch for libusb-1.0 API, using the approach of usbasp.
I will close this one since it will not be a general direction as mentioned by @dl8dtl. So it will only happen if someone provides updates to the existing codes using libusb-1.0 (but with libusb-0.1 as the fallback).
The main advantage of libusb-1.0 vs libusb-0.1 API is the support of asynchronous API. But it may not bring too much speed improvement for avrdude.
OpenOCD has done the migration from libusb-0.1 to libusb-1.0 API. current form: https://github.com/openocd-org/openocd/blob/master/src/jtag/drivers/libusb_helper.c
libusb-0.1 support was removed in March 2000. https://github.com/openocd-org/openocd/commit/8abe91cff960709ffd3ebbb9eb1dcf710dd83c1f
Before that it has both support for libusb-0.1 and libusb-1.0. https://github.com/openocd-org/openocd/tree/e7306d361b5d503cf27dfb3dc69298ddad495f88/src/jtag/drivers
It will be good to move away from libusb-0.1 (or libusb-compat-0.1) from Linux, macOS, FreeBSD, etc. It is also good to move away from libusb-win32 under Windows.
Main affected file. dfu.h usb_libusb.c micronucleus.c pickti2.c [better move to hidapi and not libusb-1.0] usbasp.c usbtiny.c
Depending on the approaches used, it could affect more files as well like jtag3.c, jtagmkII.c and stk500v2.c.
Earlier attempts for stk500v2 and related programers.