kutukvpavel / Esp32-Win7-VCP-drivers

INF files that enable ESP32-S3 Serial/JTAG peripheral and TinyUSB CDC stack on Win7
19 stars 2 forks source link
cdc driver drivers esp32 serialport win7 win8 windows-7 windows-8-1

ESP32 Win7 VCP drivers

INF files that enable ESP32-S3 Serial/JTAG peripheral and TinyUSB CDC stack operation as VCP on Win7/8.

The issue with Win7 and Win8.1 is that usbser.sys class driver doesn't get installed automatically for devices belonging to the Communications Device Class (CDC), because Windows 7/8 lacks usbser.inf and possibly some other components I don't have the expertise to fiddle with. Therefore, even if you install WinUSB driver as per Espressif documentation (https://docs.espressif.com/projects/esp-idf/en/v4.3/esp32s2/api-guides/dfu.html?#api-guide-dfu-flash-win), you won't be able to get a serial port (only a useless "Universal Serial Bus Device" will show up). This is well-documented on MS website:

Therefore, the solution is simple: provide your own INF file with your VID/PID that references usbser.sys in some way. MS recommends to do it indirectly, through modem class. You don't have to install WinUSB using Zadig, if you use these custom INFs! If you did, you may need to uninstall it. Windows will warn you that it can't verify the publisher of these INFs, since I didn't include a *.cat file, you can ignore it.

This repo contains INFs with VID/PID/MIs for:

In case your particular chip has a different PID, you can just edit the INF yourself (look at [Models. ...] sections). Feel free to create pull requests for new chips.

Thanks to David Grayson for an INF template: https://stackoverflow.com/questions/41928144/inf-file-cant-find-usbser-sys-in-windows-7-only

Additional info

Usually ESP32 native USB stack (the one contained in ROM) exposes 2 USB endpoints (devices). Only one of the 2 endpoints provides the serial port functionality. This is by design. Go to device manager -> device properties and look up "Compatible IDs". For one of the endpoints you should see USB\Class_02&SubClass_02 - this is the COM port you have to install the INF for.