CP210x driver does not work with ESP32 on Windows 10

Perhaps a bit of topic on this forum, but Silabs cannot help me unfortunately, so I thought let’s give it a try.

I bought a cheap ESP32 dev kit, and installed the CP210x drivers for it (found here: CP210x USB to UART Bridge VCP Drivers - Silicon Labs). The Silabs chip on the device has the following information:

CP2102
DCL00X
1806+

No matter what I try, I cannot get the device to work. I keep getting “The device cannot start (Code 10)”. Reinstalling drivers, rebooting, trying different USB HUBS and cables, trying the windows 7/8 drivers, nothing works.

I can get the ESP32 to work on my Ubuntu system, with the drivers that come pre installed with Ubuntu.

Device manager:


So the device VID is 10C4 and the PID is EA60, so I believe I should be able to use the normal drivers. Any ideas of what I can try to get it to work?

Output USBview (USB Device Tree):

=========================== USB Port1 ===========================

Connection Status        : 0x01 (Device is connected)
Port Chain               : 2-1
Properties               : 0x09
 IsUserConnectable       : yes
 PortIsDebugCapable      : no
 PortHasMultiCompanions  : no
 PortConnectorIsTypeC    : yes
ConnectionIndex          : 1
CompanionIndex           : 0
 CompanionHubSymLnk      : USB#ROOT_HUB30#7&10a4fe21&0&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}
 CompanionPortNumber     : 3

  ======================== USB Device ========================

    +++++++++++++++++ Device Information ++++++++++++++++++
Friendly Name            : Silicon Labs CP210x USB to UART Bridge (COM5)
Device Description       : Silicon Labs CP210x USB to UART Bridge
Device ID                : USB\VID_10C4&PID_EA60\0001
Hardware IDs             : USB\VID_10C4&PID_EA60&REV_0100 USB\VID_10C4&PID_EA60
Driver KeyName           : {4d36e978-e325-11ce-bfc1-08002be10318}\0000 (GUID_DEVCLASS_PORTS)
Driver                   : \SystemRoot\System32\drivers\silabser.sys (Version: 10.1.8.2466  Date: 2019-06-24)
Driver Inf               : C:\WINDOWS\inf\oem9.inf
Legacy BusType           : PNPBus
Class                    : Ports
Class GUID               : {4d36e978-e325-11ce-bfc1-08002be10318} (GUID_DEVCLASS_PORTS)
Service                  : silabser
Enumerator               : USB
Location Info            : Port_#0001.Hub_#0002
Location IDs             : PCIROOT(0)#PCI(1C04)#PCI(0000)#PCI(0200)#PCI(0000)#USBROOT(0)#USB(1), ACPI(_SB_)#ACPI(PCI0)#ACPI(RP05)#ACPI(PXSX)#ACPI(TBL3)#ACPI(TBTU)#ACPI(RHUB)#ACPI(UB21)
Container ID             : {34c052a1-08b6-5809-881e-95820d434537}
Manufacturer Info        : Silicon Labs
Capabilities             : 0x14 (Removable, UniqueID)
Status                   : 0x01806400 (DN_HAS_PROBLEM, DN_DISABLEABLE, DN_REMOVABLE, DN_NT_ENUMERATOR, DN_NT_DRIVER)
Problem Code             : 10 (CM_PROB_FAILED_START)
HcDisableSelectiveSuspend: 0
EnableSelectiveSuspend   : 0
SelectiveSuspendEnabled  : 0
EnhancedPowerMgmtEnabled : 0
IdleInWorkingState       : 0
WakeFromSleepState       : 0
Power State              : D3 (supported: D0, D3, wake from D0)
COM-Port                 : COM5 (none assigned)

    ---------------- Connection Information ---------------
Connection Index         : 0x01 (1)
Connection Status        : 0x01 (DeviceConnected)
Current Config Value     : 0x00
Device Address           : 0x07 (7)
Is Hub                   : 0x00 (no)
Device Bus Speed         : 0x01 (Full-Speed)
Number Of Open Pipes     : 0x00 (0 pipes to data endpoints)
Data (HexDump)           : 01 00 00 00 12 01 10 01 00 00 00 40 C4 10 60 EA   ...........@..`.
                       00 01 01 02 03 01 00 01 00 07 00 00 00 00 00 01   ................
                       00 00 00                                          ...

    --------------- Connection Information V2 -------------
Connection Index         : 0x01 (1)
Length                   : 0x10 (16 bytes)
SupportedUsbProtocols    : 0x03
 Usb110                  : 1 (yes)
 Usb200                  : 1 (yes)
 Usb300                  : 0 (no)
 ReservedMBZ             : 0x00
Flags                    : 0x00
 DevIsOpAtSsOrHigher     : 0 (Is not operating at SuperSpeed or higher)
 DevIsSsCapOrHigher      : 0 (Is not SuperSpeed capable or higher)
 DevIsOpAtSsPlusOrHigher : 0 (Is not operating at SuperSpeedPlus or higher)
 DevIsSsPlusCapOrHigher  : 0 (Is not SuperSpeedPlus capable or higher)
 ReservedMBZ             : 0x00
Data (HexDump)           : 01 00 00 00 10 00 00 00 03 00 00 00 00 00 00 00   ................

---------------------- Device Descriptor ----------------------
bLength                  : 0x12 (18 bytes)
bDescriptorType          : 0x01 (Device Descriptor)
bcdUSB                   : 0x110 (USB Version 1.10)
bDeviceClass             : 0x00 (defined by the interface descriptors)
bDeviceSubClass          : 0x00
bDeviceProtocol          : 0x00
bMaxPacketSize0          : 0x40 (64 bytes)
idVendor                 : 0x10C4 (Silicon Laboratories, Inc.)
idProduct                : 0xEA60
bcdDevice                : 0x0100
iManufacturer            : 0x01 (String Descriptor 1)
iProduct                 : 0x02 (String Descriptor 2)
iSerialNumber            : 0x03 (String Descriptor 3)
bNumConfigurations       : 0x01 (1 Configuration)
Data (HexDump)           : 12 01 10 01 00 00 00 40 C4 10 60 EA 00 01 01 02   .......@..`.....
                       03 01                                             ..

------------------ Configuration Descriptor -------------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x02 (Configuration Descriptor)
wTotalLength             : 0x0020 (32 bytes)
bNumInterfaces           : 0x01 (1 Interface)
bConfigurationValue      : 0x01 (Configuration 1)
iConfiguration           : 0x00 (No String Descriptor)
bmAttributes             : 0x80
 D7: Reserved, set 1     : 0x01
 D6: Self Powered        : 0x00 (no)
 D5: Remote Wakeup       : 0x00 (no)
 D4..0: Reserved, set 0  : 0x00
MaxPower                 : 0x32 (100 mA)
Data (HexDump)           : 09 02 20 00 01 01 00 80 32 09 04 00 00 02 FF 00   .. .....2.......
                       00 02 07 05 81 02 40 00 00 07 05 01 02 40 00 00   ......@......@..

    ---------------- Interface Descriptor -----------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x04 (Interface Descriptor)
bInterfaceNumber         : 0x00
bAlternateSetting        : 0x00
bNumEndpoints            : 0x02 (2 Endpoints)
bInterfaceClass          : 0xFF (Vendor Specific)
bInterfaceSubClass       : 0x00
bInterfaceProtocol       : 0x00
iInterface               : 0x02 (String Descriptor 2)
Data (HexDump)           : 09 04 00 00 02 FF 00 00 02                        .........

    ----------------- Endpoint Descriptor -----------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x81 (Direction=IN EndpointID=1)
bmAttributes             : 0x02 (TransferType=Bulk)
wMaxPacketSize           : 0x0040 (64 bytes)
bInterval                : 0x00 (ignored)
Data (HexDump)           : 07 05 81 02 40 00 00                              ....@..

    ----------------- Endpoint Descriptor -----------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x01 (Direction=OUT EndpointID=1)
bmAttributes             : 0x02 (TransferType=Bulk)
wMaxPacketSize           : 0x0040 (64 bytes)
bInterval                : 0x00 (ignored)
Data (HexDump)           : 07 05 01 02 40 00 00                              ....@..

  -------------------- String Descriptors -------------------
String descriptors are not available  (because the device has problem code CM_PROB_FAILED_START)

I suggest you contact with the vendor of the product to see if they could help.

Well super-strictly said they meant the vendor of the USB-UART adapter or board that incorporates that chip… But their response makes no sense anyways, they should know why their driver fails or give hints on what may be the problem.

What does the “Events” contain at the end of the lsit? There should be an error event. Also, what version of the driver does it show in the “Driver” tab?

Yeah you are right, forgot to disclose that I bought it on Aliexpress, and contacting them for these kind of problems seems pointless.

Also, I am using an USB-hub, since my laptop has only USB-C ports. This morning, I connected the ESP32 through the hub, and the device was working! Couple hours later, tried again, same error code 10. However, I just tried it with an USB-C to micro cable, et voila, ESP32 functions normally. So the hub seems to be the issue.

The installed driver:

Device events:
22-May-20 16:09:06 - Device install requested:

  • Device USB\VID_10C4&PID_EA60\0001 requires further installation.

22-May-20 16:09:06 - Driver service added (silabser)

  • Driver Management has concluded the process to add Service silabser for Device Instance ID USB\VID_10C4&PID_EA60\0001 with the following status: 0.

22-May-20 16:09:06 - Device installed (silabser.inf_amd64_dfdf591955e10cae)

  • Driver Management concluded the process to install driver silabser.inf_amd64_dfdf591955e10cae for Device Instance ID USB\VID_10C4&PID_EA60\0001 with the following status: 0x0.

Weird. Try to change out the USB hub and get one which you can externally power, for extra safety. Some hubs, especially if they’re USB-C on the host side, could be using the power-delivery mechanism of USB-C anyways, but maybe some don’t. ESP32’s, especially on larger dev boards, need a lot of power. My ESP32 audio board even has a dedicated USB power port.

Continuing the discussion from CP210x driver does not work with ESP32 on Windows 10:

2022-04-02T22:00:00Z

Summary

General problems with USB cables and UART chips and instability of Windows drivers

Hi

I have been solving the same problems for a long time with many ESP8266 as well as ESP32 development boards (NodeMCU, D1 etc…). The same experience applies generally to UART converters, not only CP210(x) but also CH34(x).

On most cloned UART chips and their development kits, there is a high sensitivity to the voltage in the USB port and to the incidental resistance and impedance in the connection cable.
Especially the choice of the USB cable is crucial - it shall always be in absolutely perfect condition, which is a problem if the cable is used for charging the device only and rarely for a real serial communication.

Even a small deviation in voltage or cable impedance will shut down the communication and the chip will then appear randomly unavailable - the driver in Windows then reports ERROR 10 regardless of the driver version installed.

1 Like

Welcome
Thank you for the very specific hint on the problem with CP210 (x). Indeed, out of 5 usb cables - some used - one allowed for communication.
Thank you and best regards.
Robert.