With Auto Read Response enabled, calling HidSmbus_AddressReadRequest() followed by HidSmbus_GetReadResponse() results in incorrect data. The response buffer will usually include the address of the target data. For example, if the bytes at address 0xAA are 0x04, 0x05, requesting an address read for this data and then calling GetReadResponse will result in the following data: 0xAA, 0x05.
Diagnosis
This is a known issue with the CP2112. There is a small window of time between sending the last address byte of the Read Request and waiting for the restart to complete where the device could mistakenly send the SMB buffer containing the address bytes as a response.
Solution
The soultion, in this case, is to disable Auto Read Response, and instead use Force Read Response after every Address Read Request. The command flow would then be:
Blue screens in Windows will normally generate a memory dump file which can be opened in WinDbg to analyze the stack trace and determine the kernel module possibly responsible for the error.
Installing WinDbg
Download the latest version of the Microsoft Standalone Debugging Tools for Windows (WinDbg).
Select the Debugging Tools for Windows check box from the list of features to install:
After the installation is complete, run WinDbg (X86) (the 64-bit version tends to crash):
By default, WinDbg won't have any of the standard Windows symbols loaded. This means that instead of getting a stack trace with meaningful function names, you'll only see addresses of functions. To fix this, configure the Symbol Search Path to point to Microsoft's symbol server:
From the file menu, select File->Symbol File Path and enter the path above into the text box and press OK. WinDbg will download and cache symbols as needed to the folder specified. In this case, the string above will cache symbols in the C:\Symbols folder.
Next, open the crash dump file, commonly located in C:\Windows\Minidump. From the file menu, select File->Open Crash Dump and select the latest .dmp file from the Minidump folder.
After opening the dump file, WinDbg will download the necessary Windows symbols to analyze the dump file. This can take a long time depending on internet connection and speed.
Once the symbols have been loaded, WinDbg will give a basic bugcheck analysis showing the probable cause of the blue screen. In the screenshot below, the probable cause is kbdhid.sys (Microsoft keyboard HID driver file). This is usually enough to determine the most probable culprit. A simple internet search of the .sys file name will typically reveal the driver bundle using the .sys file. In many cases, a newer driver version will be available from the product manufacturer that will fix most blue screen issues.
In some cases, the probable cause is not the actual culprit. For more information, click the !analyze -v link to perform a more detailed analysis. This will give more information about the crash as well as a stack trace. In the screenshot below, the blue screen was caused by a manually initiated crash performed by pressing a specific key combination to initiate a manual crash dump.
How do I turn the CP210x VCP Driver Installer, using Microsoft's Driver Package Installer (DPInst), into a quiet installer that can run from a command line or batch script?
Answer
DPInst uses command line flags to configure the driver installer behavior.
To enable silent mode for the CP210x DPInst driver installer (CP210xVCPInstaller_x86.exe and CP210xVCPInstaller_x64.exe):
Run the appropriate 32-bit or 64-bit version of the installer with the /q /se command line arguments. For example, to silently install the 64-bit VCP driver, run the following command: CP210xVCPInstaller_x64.exe /q /se
The /q option enables silent/quiet mode and the /se option suppresses the EULA, which would otherwise prevent the installer from running in quiet mode.
There are several reasons why a silent driver install might fail:
The driver is not signed. Make sure that the driver bundle is signed and that the signature is valid.
The driver installer must be run with administrator privileges.
Troubleshooting Steps:
Run the installer in GUI mode. If the Installer wizard presents the user with any prompts, then the silent installer will most likely fail. EULA prompts, unsigned driver prompts, and untrusted publisher warnings will all prevent a silent install from succeeding.
Analyze the DPInst return code. Use the /c command line option to display the driver install log text and error code. Similarly, running the following command after the silent install command will display the error code as a signed integer, which would then need to be converted to hex: echo %errorlevel%
Silicon Labs requests that purchasers of a product reference the product reference material or contact their product manufacturer with questions or information if encountering an issue with the product.
Silicon Labs is an IC manufacturer and does not make complete products, like printers, scanners, GPS modules, etc. The CP210x is a USB-to-UART bridge IC that can be included in a complete product to easily add USB connectivity. Silicon Labs doesn't support these products for the following reasons:
1) We did not design or create the hardware or software associated with the product, so we do not have access to schematics or source code to assist with the debugging process.
2) We provide drivers for the CP210x on our website. However, these drivers or the CP210x device may be customized such that the default drivers no longer work. We have no knowledge of how the product manufacturer customized these drivers.
3) Working with an individual purchaser of a complete product solves the problem only for that one party, whereas assisting the product manufacturer with a potential issue will resolve the problem for all purchasers of that product.
What if the Product Manufacturer Doesn't Respond?
Sometimes a product manufacturer doesn't provide contact information to provide technical assistance or doesn't respond to a question. The only recommendation Silicon Labs has in this circumstance is to try the latest drivers. To check if the default drivers may work, use a program called UVCView (attached to this article) to determine the VID (Vendor ID) and PID (Product ID) of the CP210x in the product. To do this, connect the hardware to the PC and open the correct version of UVCView for the operating system (x86 or x64).
The default VID is 0x10C4 and the default PID is 0xEA60 for CP2101/2/3/9, 0xEA70 for CP2105, and 0xEA71 for CP2108. If these are the values shown by UVCView, the default VCP drivers from the Silicon Labs website should work for your PC, as long as the operating system is supported and the hardware is operating correctly. More information can be found on the http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx webpage.
If the device VID is 0x10C4 and the PID is 0xEA61, this indicates the CP210x is intended to use the USBXpress driver. This driver can be found on the website here: http://www.silabs.com/products/mcu/Pages/USBXpress.aspx.
If the VID/PID combination is any value other than the values listed above, you can create a custom Windows driver for the product using AN220 (www.silabs.com/interface-appnotes). The AN220 software (AN220SW) is the custom driver wizard, and the AN220 document describes what all of the options mean. The most important modification is that the VID and PID values must match the values read from the CP210x device using UVCView. If the product software is expecting a COM port, use the VCP driver to create the custom driver. Otherwise, use the USBXpress driver.
Note: Once the default driver is customized, it is no longer certified by Windows. For 32-bit versions of Windows 7 and Windows 8, a warning will be displayed when installing the driver. The 64-bit versions of Windows 7 and 8 will no longer allow an uncertified driver to install. To install the uncertified driver, the OS will need to have driver signing disabled. More information can be found here:
At this point, if either the default or customized driver fails to install or work with the product software, Silicon Labs cannot provide any additional assistance, since we have no knowledge of the product hardware or software.
Other keywords: end product, third party manufacturer, final product
Interface Knowledge Base
CP2112 returns incorrect data after an Address Read Request (HidSmbus_AddressReadRequest())
How to determine which driver is responsible for a blue screen
Making a DPInst driver install silent
Troubleshooting a Product Using a CP210x USB-to-UART Bridge