We've recently become aware of an issue with a new update to Windows 10 and our CP210x VCP "Universal" Driver for Windows 10, driver version v10.1.1. When attempting to install the driver, an error is given by Windows that states "A service installation section in this INF is invalid." This occurs because Windows has changed drive INF requirements slightly, and our current driver's INF file does not meet these requirements.
We currently are working to fix this issue, although due to testing and recertification requirements, we do not expect the fixed driver to be available until mid-June.
A work-around exists currently, but it involves manually editing the .INF file for the driver. This causes another issue - the driver is no longer signed in this case, so the driver must be forced to install, and Windows will show a warning that the driver is unsigned.
Firstly, the work-around is as follows:
Download the Windows 10 Universal driver from here: https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
Edit the .inf file with this driver, performing the following modifications:
On or around line 118, change/edit
ServiceBinary = %13%\silabser.sys
ServiceBinary = %12%\silabser.sys
And on or around line 160, change/edit
Silabser_CopyFiles_FileListSection = 13 ; Driver package's Driver Store directory (%WINDIR%\System32\DriverStore\FileRepository ) (was 12 Drivers directory (%SystemRoot%\system32\drivers))
Silabser_CopyFiles_FileListSection = 12 ; Driver package's Driver Store directory (%WINDIR%\System32\DriverStore\FileRepository ) (was 12 Drivers directory (%SystemRoot%\system32\drivers))
I.e. replace every 13 in the file with 12.
Once these changes are made, attempt to re-install the driver. A warning will be shown that the driver is unsigned, but you can ignore this for now. If you do not receive a warning issue, or if Windows refuses to install the unsigned driver (you may get an error about the hash being invalid), you can disable driver signing enforcement by following these instructions: https://www.maketecheasier.com/install-unsigned-drivers-windows10/
Alternatively, rolling back to a previous build of Windows also resolves the issue.
The CP210 driver causes excessive logging on my Mac, creating many MBs of log files every day.
When interacting with my CP210-powered peripherals, I get a tremendous amount of log messages, most of them are similar to this one:
6/21/18 5:21:48.000 PM kernel: com_silabs_driver_CP210xVCPDriver executeEventGated Handling event PD_E_VALID_DATA_BYTE
I updated the driver to the latest version, but the messages remain. It looks like the production version of the driver was compiled with some debug flags on. Is it possible to get a version of the driver that doesn't log so heavily?
Thanks in advance!
PS: I'm using Mac OS X El Capitan, Version 10.11.6 (15G20015)
So i am using Simplicity Studio 4 and in Device Configuration i have sucessfully renamed the Product String but no matter what i do in Device manager it still shows the default "Silicon Labs CP21..."
I have plugged my device into other computers and it uses the value i changed but on my main PC it uses the default.
we start a new product using the CP2108 chip. we need to use only 3 ports.
is it possible, with the Xpress Configurator (or any other utility ) to disable the 4th port ?
like that, only 3 ports are enumerate in Windows (and others OS ) ?
thanks, best regards for any tips
I'm trying to use cp210x to flash a esp32 board on ubuntu 18.04. I first tried with the built-in driver, and then downloaded, compiled, and modprob'ed the newest version from https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers. I've added $USER to `dialout` group. Sometimes it works, and sometimes (most of the time) it doesn't. When it stops working, I have to reboot my computer (a Dell 13 700). The situation is similar to the one described in this AskUbuntu question (without answers so far).
I am running esp32's `make flash` script, which fails with `serial.serialutil.SerialException: Could not configure port: (5, 'Input/output error')`.
On the dmesg output, this is when I first plug the esp32:
[ 2404.860292] usb 1-3: new full-speed USB device number 27 using xhci_hcd
[ 2405.055668] usb 1-3: New USB device found, idVendor=10c4, idProduct=ea60
[ 2405.055680] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2405.055689] usb 1-3: Product: CP2102 USB to UART Bridge Controller
[ 2405.055697] usb 1-3: Manufacturer: Silicon Labs
[ 2405.055705] usb 1-3: SerialNumber: 0001
[ 2405.069661] cp210x 1-3:1.0: cp210x converter detected
[ 2405.071771] usb 1-3: cp210x converter now attached to ttyUSB0
And these are the logs for when I run `make flash`:
[ 2409.730169] usb 1-3: USB disconnect, device number 27
[ 2409.730517] cp210x ttyUSB0: failed set request 0x7 status: -19
[ 2409.730536] cp210x ttyUSB0: failed set request 0x12 status: -19
[ 2409.730545] cp210x ttyUSB0: failed set request 0x0 status: -19
[ 2409.730849] cp210x ttyUSB0: cp210x converter now disconnected from ttyUSB0
[ 2409.730942] cp210x 1-3:1.0: device disconnected
[ 2410.040108] usb 1-3: new full-speed USB device number 28 using xhci_hcd
[ 2410.219745] usb 1-3: New USB device found, idVendor=10c4, idProduct=ea60
[ 2410.219755] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2410.219762] usb 1-3: Product: CP2102 USB to UART Bridge Controller
[ 2410.219769] usb 1-3: Manufacturer: Silicon Labs
[ 2410.219774] usb 1-3: SerialNumber: 0001
[ 2410.232560] cp210x 1-3:1.0: cp210x converter detected
[ 2410.234601] usb 1-3: cp210x converter now attached to ttyUSB0
I think the may be to my laptop's usb devices, but I've reached my limit debugging this. The esp32 works in other systems with same ubuntu version.
Thanks in advance.
I am trying to use the cp2130 to read and write from a Micron flash. I am using the SDK you provided.
I am using the SLAB_USB_SPI.cpp functions to read and write: I first use the CP213x_GetnumDevices and then CP213x_Open to open the device and using CP213x_SetChipSelect to select the desired channel. Then I use CP213x_TransferWrite to write. When I run the code I get the following message in dmesg:
usb 1-2: usbfs: process XXXX (test) did not claim interface 0 before use.
I also don't see any changes in the flash.
I tried using other functions to set the GPIO values to no avail. I saw that the Open function in CP213xDevice.cpp does not claim the device so I added a libusb_claim_interface call but that did not help either.
Do you have any idea what might be the problem?
After connecting a device (vendor id 0x10c4, product id 0xea60) the port doesn't show up under /dev/. I've verified that the kext is loaded:
kextstat | grep silabs yields this:
177 0 0xffffff7f832c7000 0x9000 0x9000 com.silabs.driver.CP210xVCPDriver (5.0.4) AB2A33AD-B60D-35F9-A3F5-084252A66E50 <108 22 4 3>
In Console, the following is logged:
default 14:34:09.210282 -0700 kernel com_silabs_driver_CP210xVCPDriver(<private>)::GetCP210xInfo - UsbConfigurationDescriptor -
default 14:34:09.210299 -0700 kernel com_silabs_driver_CP210xVCPDriver(<private>)::GetCP210xInfo .bLength = 9
default 14:34:09.210304 -0700 kernel com_silabs_driver_CP210xVCPDriver(<private>)::GetCP210xInfo .bDescriptorType = 0x02
default 14:34:09.210309 -0700 kernel com_silabs_driver_CP210xVCPDriver(<private>)::GetCP210xInfo .wTotalLength = 32
default 14:34:09.210314 -0700 kernel com_silabs_driver_CP210xVCPDriver(<private>)::GetCP210xInfo .bNumInterfaces = 1
default 14:34:09.210319 -0700 kernel com_silabs_driver_CP210xVCPDriver(<private>)::GetCP210xInfo .bConfigurationValue = 1
default 14:34:09.210323 -0700 kernel com_silabs_driver_CP210xVCPDriver(<private>)::GetCP210xInfo .iConfiguration = 0
default 14:34:09.210328 -0700 kernel com_silabs_driver_CP210xVCPDriver(<private>)::GetCP210xInfo .bmAttributes = 0x80
default 14:34:09.210749 -0700 kernel com_silabs_driver_CP210xVCPDriver(<private>)::start - Can't get CP210x Comm Properties!!!
default 14:34:09.210757 -0700 kernel com_silabs_driver_CP210xVCPDriver(<private>)::start Interface 0 - Can't get neccesary CP210x info!!!
default 14:34:19.382802 -0700 kernel com_silabs_driver_CP210xVCPDriver::setPowerState(0xc44b679260870341, 0 -> 1) timed out after 10176 ms
default 14:34:19.382824 -0700 kernel com_silabs_driver_CP210xVCPDriver::setPowerState(0xc44b679260870341, 0 -> 1) timed out after 10176 ms
It's even listed in System Report as "CP2102 USB to UART Bridge Controller". Unfortunately, `ls /dev/ | grep cu` only yields the following:
Any insight as to what could be causing this issue? Thanks!
Hi, I'm trying to access the CP2103 device via its COM Device Name, using windows C# SerialPort Class. What I can access with the GetPortNames() method is only the (COMx) port name. See attached .png file for the Device Manager listing of the com port. I can access the (COM5) name, but not the EIB name.
The Silab generated USB driver that I'm using was created about 7-8 years ago.
For this new application being created its required that when a device gets plugged in the application can use the Device Name to know what type of device its attached to.
I am new to .net and this is my first windows application so any help here is much appreciated.
Visual studio 2015, Windows 7
I use the CP2101. The component works on Windows but not on Linux.
I'v had modprobe cp210x driver Linux it doesn't affect a ttyUSB ?
Can you help me ?
Thanks in advance
We have got a problem in Ubuntu Linux 14.04 LTS communicating with a device with CP2105. We are using minicom to open /dev/ttyUSB1. from the minicom, it can receive data from CP2105 device, but can not send out any data to it. The device works OK with Windows 10.
So could this a device driver issue or something else?
Dear support team. We need to build USB adapter for wired M-Bus and need USB-UART adapter IC with RS-485 drive enable pin support. CP2104 is stated as not recommended for new designs and new CP2102N-QFN24 seems to be drop in compatible and best variant. But CP2102N datasheet states that RS485 drive enable is not available for low baudrates (lower then 1200). However we need all standard baudrates from 300 to 9600bps.
Also I found following topic on this forum: https://www.silabs.com/community/interface/forum.topic.html/cp2102n_rs485_pinou-Lk9P
1) Will CP2102N support RS485 drive enable pin for all baudrates in future?
2) Can we still use CP2104? (It looks like from CP2104 errata that it should not impact our device functionality).
I've been following AN721 to customize device parameters. I've gotten to section 3.2, which references CP21xxCustomizationUtility.exe. I've downloaded AN721SW.zip and did an install (Windows 10). I've searched the installed folder structure but am unable to locate CP21xxCustomizationUtility.exe.
Any help would be appreciated.
snip from AN721: USBXpress™ Device Configuration and Programming Guide pdf, Rev 1.4 page 23
3.2 CP21xx Device Customization Software
The descriptors and other configurable options of the devices in the CP2114 family are modifiable using the Windows program CP21xx
Device Customization Software.exe Figure 3.19 Device Customization Software General Overview on page 24. The software program
automatically recognizes the device that is plugged into the PC.
When the CP21xxCustomizationUtility.exe is launched, the program searches the Windows registry for any CP21xx devices attached to
I'm currently working on an application that should work on both 64 and 32 bits systems using the cp2112 for i2c communication.
I'm using the following method to switch between the two dll's based on whether the environment is 64 or 32 bit.
public static int HidSmbusGetNumDevices(ref uint numDevices, ushort vid, ushort pid)
? NativeMethods64.HidSmbus_GetNumDevices(ref numDevices, vid, pid)
: NativeMethods32.HidSmbus_GetNumDevices(ref numDevices, vid, pid);
when i use the 32-bit SLABHIDtoSMBus.dll (in an x86 process) i get :
System.BadImageFormatException: 'An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)'
Where as the 64 bit version does work (in an x64 process)
in my nativemethods32 class i have the following: (Dll name is correct)
private const string Dll = "SLABHIDtoSMBus32.dll";
internal static extern int HidSmbus_GetNumDevices(ref uint numDevices, ushort vid, ushort pid);
Where the 64 bit nativemethods look like:
private const string Dll = "SLABHIDtoSMBus64.dll";
internal static extern int HidSmbus_GetNumDevices(ref uint numDevices, ushort vid, ushort pid);
The Dll's are nearly the same apart from product version: 188.8.131.52 for the 64 bit version and 184.108.40.206 for the 32 bit version
any ideas as to what i can do to make this work?