The issue you are experiencing with the firmware upgrade in your VC++ application on Windows 11, where the device switches to loader mode after the first upgrade attempt, may be related to the changes in how firmware updates are handled in Windows 11 compared to Windows 10. Since you mentioned that the problem occurs only with specific firmware versions and not all, it suggests that there might be compatibility issues with those particular versions when using libusb.dll on Windows 11.
In Windows 11, the absence of co-installers for USB device firmware updates may also affect the upgrade process. The recommended approach for updating USB device firmware without a co-installer involves using a lower filter driver that can initiate the firmware update process during the AddDevice call. This method ensures that the firmware version is checked and updated if necessary, which could potentially resolve issues related to the device entering loader mode.
Additionally, since you have verified packet-to-packet timing, it might be worth investigating if there are any specific timing or command sequence requirements for the firmware versions that are failing during the upgrade process on Windows 11.
If the issue persists, consider checking for updates or patches for libusb.dll or any related libraries that might address compatibility with Windows 11.
References: