AN144 - Silicon Labs

AN144
CP210 X / C P 2 11 X D E V I C E C U S T O M I Z A T I O N G UIDE
Relevant Devices
This application note applies to the following devices:
CP2101, CP2102, CP2103, CP2104, CP2105, CP2110, CP2112
1. Introduction
This document is intended for developers creating products based on the CP210x/CP211x USB Bridge Controllers.
It provides information about obtaining a Vendor ID (VID) and Product ID (PID) for a CP210x/CP211x product and
describes the steps necessary for customizing the device descriptors contained in the CP210x/CP211x
programmable area. Refer to www.silabs.com for the latest revisions of this document and other application notes
related to the CP210x/CP211x device families.
2. Obtaining a VID and PID
Each device on a USB bus must have a unique VID, PID, and Serial Number combination. Vendor IDs are owned
by the vendor company and assigned by the USB Implementers Forum (USB-IF) only. Details about obtaining a
unique VID can be found at www.usb.org/developers/vendor.
To obtain the right to license the USB-IF logo, you must register your product's VID and PID with USB-IF and
submit your product to the USB-IF Compliance Program. USB-IF Compliance Program details are available at
www.usb.org/developers/compliance. Once your product is certified, you can add it to the USB-IF Integrators List,
and you can also use the “Certified USB” logo on your product.
If you do not wish to license the USB-IF logo for your product, you can use the default Silicon Laboratories VID
along with a unique PID. To obtain a unique PID for your CP210x/CP211x-based product, visit
http://www.silabs.com/RequestPID. Having a unique PID reduces the chances that another device with the same
VID, PID, and Serial Number will appear on the same USB bus.
3. Customizing Driver Installations, CP210x Custom Setup Utility 
(CP2101/2/3/4/5)
The driver installation is customizable by modifying certain sections of the hardware installation files (.inf). The
strings contained in the .inf files affect what is displayed in the “Found New Hardware Wizard” dialogs, Device
Manager, and the Registry. Refer to “AN220: USB Driver Customization” for more details.
Note: Any changes to the Windows® installation .inf files will require new Windows Hardware Quality Labs (WHQL) tests.
Rev. 2.0 10/10
Copyright © 2010 by Silicon Laboratories
AN144
AN144
4. Customizing Device Descriptors and Other Configurable Options
The descriptors and other configurable options of the devices in the CP210x/CP211x families are modifiable using
the following Windows programs.
Table 1. Device Customization Programs
Device
Program
CP2101/2/3/4/5
CP210xSetIDs.exe
CP2110
CP2110SetIDs.exe
CP2112
CP2112SetIDs.exe
These programs are included in the software zip file in this application note. How to use these programs is
described in more detail in the following sections.
CP210xSetIDs uses the Windows Host API functions implemented by CP210xManufacturing.DLL. The Host API
functions give read/write access to the descriptors contained in programmable areas of a connected device.
Another option is implementing a custom application using the Host API and CP210xManufacturing.DLL suited to
the individual needs of a particular production environment.
Both CP2110SetIDs and CP2112SetIDs use the SLABHIDDevice.dll and the customization interface specified in
their respective application notes, “AN433: CP2110 HID to UART API Specification” and “AN496: CP2112 HID
USB to SMBus API Specification”.
The descriptors can also be set in the factory at production time for large orders. Contact your Silicon Laboratories
sales representative for details.
2
Rev. 2.0
AN144
4.1. Customizing Device Descriptors Using CP210xSetIDs.exe (CP2101/2/3/4/5)
CP210xSetIDs.exe is an example program that uses the CP210x Host API Functions implemented by
CP210xManufacturing.DLL. The program window is shown in Figure 1. CP210xSetIDs.exe demonstrates the
method of accessing and changing the descriptors contained in the connected device's programmable area. To
use CP210xSetIDs.exe, it is necessary to have the devices connected and have the unmodified device drivers that
shipped with the original CP210x kit installed. The customized device driver installation files that contain the VID
and PID values should also be installed. For information on creating customized device drivers for the CP210x,
refer to “AN220: USB Driver Customization.” The default driver must be installed so that the CP210x device with
the default factory settings appears in the device list. The customized drivers will be needed after the device IDs
have been changed and the CP210x device is reset.
All CP210x devices are programmed in the same manner using the CP210xSetIDs.exe tool, but each parameter
on the One-Time-Programmable (OTP) devices can only be programmed one time. The CP2101, CP2102, and
CP2103 parameters can be reprogrammed multiple times using the CP210xSetIDs.exe utility, but the CP2104 and
CP2105 parameters can only be programmed once using the CP210xSetIDs.exe utility. After the CP2104 and
CP2105 have been programmed once, the CP210xSetIDs.exe utility can be run, but the new values will not be
programmed into the device.
Before running CP210xSetIDs.exe, copy CP210xManufacturing.DLL into the \windows, \winnt, or \system32
directory, the directory containing the executable, or any directory in the “Path” environment variable.
Figure 1. CP210xSetIDs Example Application
Rev. 2.0
3
AN144
When CP210xSetIDs.exe is launched, the program searches the Windows registry for any CP210x devices
attached to the PC. The full path information for all of the devices found is inserted into the “Select Device” dropdown list, and the first device is selected automatically. CP210xSetIDs.exe then queries information from the
selected device using the CP210x Host API functions and fills in the values for each of the seven selectable fields
of the application. When a new device is selected from the list, the fields will be updated with information from the
most recently selected device.
To change one or more of the values, click on the checkbox to the left of the field and enter the new value. Once
the new values have been entered, click on the “Program Device” button.
The values entered are subject to the following limitations:
1. VID—Four hexadecimal digits.
2. PID—Four hexadecimal digits.
3. Max. Power—Two hexadecimal digits with maximum setting of 250 (the value is in 2 mA units).
4. Serial Number—Any sequence of up to 63 characters (CP2101/2/3/4) or 16 characters (CP2105).
5. Product String—Any sequence of up to 126 characters (CP2101/2/3/4) or 47 characters (CP2105).
6. Release Version—Each field is a decimal number value 0–99.
7. Flush Buffers—Selects which buffers to empty upon the Open and Close events. Applies to CP2104/5 devices
only.
8. Interface 0 and 1 Strings—Any sequence of up to 32 characters. Applies to CP2105 only.
9. Device Mode—Selects the operating mode for the Enhanced and Standard interfaces. Applies to CP2105 only.
Notes:
1. Avoid connecting more than one device containing the same VID, PID, and serial number combination.
2. When the serial number of a CP210x device is changed and the device is reset by calling the Host API function
CP210x_Reset(), the device will reenumerate, and the device driver will be installed.
3. The serial number and product string are automatically converted to Unicode strings before programming.
4
Rev. 2.0
AN144
4.2. Customizing Device Descriptors using CP2110SetIDs.exe (CP2110)
CP2110SetIDs.exe is an example program that uses the CP2110 API Functions implemented by
SLABHIDtoUART.dll. The program window is shown in Figure 2. CP2110SetIDs.exe demonstrates the method of
accessing and changing the descriptors contained in the connected device's programmable area.
The various customizable fields of the CP2110 devices are only programmable one time using the program. After
the fields are programmed once, CP2110SetIDs can access the fields, but it is not able to reprogram them.
Figure 2. CP2110SetIDs Application
When CP2110SetIDs.exe is launched, the program searches for any CP2110 devices attached to the PC. The full
path information for all of the devices found is inserted into the "Device Path" drop-down list, and the first device is
selected automatically. The application then queries information from the selected device using the API functions
and fills in the values for each of the selectable fields of the application. When a new device is selected from the
list, the fields are updated with information from the most recently selected device.
To change one or more of the values, click on the checkbox to the left of the field and enter the new value. Once
the new values are entered, click on the "Program Device" button. Once a field is programmed, the checkbox is no
longer selectable, indicating that the field is locked from further programming.
Rev. 2.0
5
AN144
The values entered are subject to the following limitations:
1. VID—2-byte value in hexadecimal.
2. PID—2-byte value hexadecimal.
3. Max. Power—1-byte value in hexadecimal digits with maximum setting of 0xFA (the value is in 2 mA units).
4. Release Version—Each field is a decimal number value 0-255.
5. Manufacturer String—Any sequence of up to 30 ASCII characters
6. Product String—Any sequence of up to 30 ASCII characters.
7. Serial Number—Any sequence of up to 30 ASCII characters.
If the “Prevent Further Programming” checkbox is selected, all customizable fields of the CP2110 are permanently
locked and are no longer customizable.
See “AN434: CP2110 Interface Specification” for a full description of each of the customizable parameters.
If you are using the CP2110SetIDs to program multiple devices, you can save the customized values to a text file
using the File  Save and File  Save As commands. When connecting a new device, use the File  Open
command to retrieve the saved settings, which are then directly programmable to the new device.
Notes:
1. Avoid connecting more than one device containing the same VID, PID, and serial number combination.
2. GPIO.0 / CLK must be configured as a “CLK Output - Push Pull” before configuring the “CLK Output Divider” setting.
3. The Manufacturer String, Product String, and Serial Number are automatically converted to Unicode strings before
programming.
6
Rev. 2.0
AN144
4.3.
Customizing Device Descriptors Using CP2112SetIDs.exe (CP2112)
CP2112SetIDs.exe is an example program that uses the CP2112 API Functions implemented by
SLABHIDtoUART.dll. The program window is shown in Figure 3. CP2112SetIDs.exe demonstrates the method of
accessing and changing the descriptors contained in the connected device's programmable area.
The various customizable fields of the CP2112 devices are only programmable one time using the program. After
the fields are programmed once, CP2112SetIDs can access the fields, but it is not able to reprogram them.
Figure 3. CP2112SetIDs Application
When CP2112SetIDs.exe is launched, the program searches for any CP2112 devices attached to the PC. The full
path information for all of the devices found is inserted into the “Device Path” drop-down list, and the first device is
selected automatically. The application then queries information from the selected device using the API functions
and fills in the values for each of the selectable fields of the application. When a new device is selected from the
list, the fields will be updated with information from the most recently selected device.
To change one or more of the values, click on the checkbox to the left of the field, and enter the new value. Once
the new values are entered, click on the “Program Device” button.
Rev. 2.0
7
AN144
The values entered are subject to the following limitations:
1. VID—2-byte value in hexadecimal.
2. PID—2-byte value hexadecimal.
3. Max. Power—1 byte value in hexadecimal digits with maximum setting of 0xFA (the value is in 2 mA units).
4. Release Version—Each field is a decimal number value 0–255.
5. Manufacturer String—Any sequence of up to 30 ASCII characters
6. Product String—Any sequence of up to 30 ASCII characters.
7. Serial Number—Any sequence of up to 30 ASCII characters.
If the “Prevent Further Programming” checkbox is selected, all customizable fields of the CP2112 are permanently
locked and are no long customizable.
See “AN496: CP2112 HID USB-to-SMBus API Specification” for a full description of each of the customizable
parameters.
If you are using the CP2112SetIDs to program multiple devices, the customized values can be saved to a text file
using the File  Save and File  Save As commands. When connecting a new device, use the File  Open
command to retrieve the saved settings, which can be directly programmed to the new device.
Notes:
1. Avoid connecting more than one device containing the same VID, PID, and serial number combination.
2. The Manufacturer String, Product String, and Serial Number are automatically converted to Unicode strings before
programming.
4.4. Building CP210xSetIDs.exe, CP2110SetIDs.exe, or CP2112SetIDs.exe
Open the corresponding project file for the program with the *.dsw extension in Visual Studio 6.0. Select “Release”
or “Debug”, and build the project.
4.5. Creating Custom Applications
For CP2101/2/3/4/5 devices, custom applications can use the CP210x Host API implemented in
CP210xManufacturing.DLL.
To
use
functions
implemented
in
CP210xManufacturing.DLL,
link
CP210xManufacturing.LIB with your Visual C++ 6.0 application. Include CP210xManufacturingDLL.h in any file
that calls functions implemented in CP210xManufacturing.DLL. See “5. CP210x Host API Functions (CP2101/2/3/
4/5)” for more information regarding the DLL.
For CP2110 devices, custom applications can use the CP2110 API implemented in SLABHIDtoUART.dll. To use
functions implemented in SLABHIDtoUART.dll, link SLABHIDtoUART.lib with your Visual C++ 6.0 application.
Include SLABCP2110.h in any file that calls functions implemented in SLABHIDtoUART.dll. See “AN433: CP2110
HID to UART API Specification” for more details.
For CP2112 devices, custom applications can use the CP2112 API implemented in SLABHIDtoSMBus.dll. To use
functions implemented in SLABHIDtoSMBus.dll, link SLABHIDtoSMBus.lib with your Visual C++ 6.0 application.
Include SLABCP2112.h in any file that calls functions implemented in SLABHIDtoSMBus.dll. See “AN496: CP2112
HID USB to SMBus API Specification” for more details.
8
Rev. 2.0
AN144
5. CP210x Host API Functions (CP2101/2/3/4/5)
The CP210x Host API is provided as a means to facilitate production of customized CP210x devices. The API
allows access to the CP210x device for retrieving and setting the VID, PID, product string, serial number, selfpower attribute, maximum power consumption, and device version.
The CP210x Host API is provided in the form of a Windows Dynamic Link Library (DLL),
CP210xManufacturing.DLL. The host interface DLL communicates with the bridge controller device via the
provided device driver and the operating system's USB stack. The following is a list of the available host API
functions:
CP210x_GetNumDevices()
CP210x_GetProductString()
CP210x_GetPartNumber()
CP210x_Open()
CP210x_Close()
Returns the number of CP210x devices connected.
Returns a descriptor from the registry for a CP210x USB device.
Returns the 1-byte Part Number of a CP210x device.
Opens a CP210x device as a USB device and returns a handle.
Closes a CP210x device handle.
CP210x_SetVid()
CP210x_SetPid()
CP210x_SetProductString()
CP210x_SetInterfaceString()
CP210x_SetSerialNumber()
CP210x_SetSelfPower()
CP210x_SetMaxPower()
CP210x_SetFlushBufferConfig()
CP210x_SetDeviceMode()
CP210x_SetDeviceVersion()
CP210x_SetBaudRateConfig()
CP210x_SetLockValue()
CP210x_SetPortConfig()
CP210x_SetDualPortConfig()
Sets the 2-byte vendor ID of a CP210x device.
Sets the 2-byte product ID of a CP210x device.
Sets the product description string of a CP210x device.
Sets the interface string of a CP2105 device.
Sets the serial number string of a CP210x device.
Sets the self-power attribute of a CP210x device.
Sets the maximum power consumption of a CP210x device.
Sets the flush buffer configuration of CP2104/5 devices.
Sets the operating modes of both interfaces of a CP2105 device.
Sets version number of the CP210x device.
Sets the baud rate configuration data of a CP210x device.
Sets the 1-byte Lock Value of a CP210x device.
Sets the port configuration of a CP2101/2/3/4 device.
Sets the port configuration of a CP2105 device.
CP210x_GetDeviceProductString()
CP210x_GetDeviceInterfaceString()
CP210x_GetDeviceSerialNumber()
CP210x_GetDeviceVid()
CP210x_GetDevicePid()
CP210x_GetSelfPower()
CP210x_GetMaxPower()
CP210x_GetFlushBufferConfig()
CP210x_GetDeviceMode()
CP210x_GetDeviceVersion()
CP210x_GetBaudRateConfig()
CP210x_GetLockValue()
CP210x_GetPortConfig()
CP210x_GetDualPortConfig()
Gets the product description string of a CP210x device.
Gets the interface string of a CP2105 device.
Gets the serial number string of a CP210x device.
Gets the vendor ID of a CP210x device.
Gets the product ID of a CP210x device.
Gets the self-power attribute of a CP210x device.
Gets the maximum power consumption value of a CP210x device.
Gets the flush buffer configuration of CP2104/5 devices.
Gets the operating modes of interfaces of a CP2105 device.
Gets the version number of a CP210x device.
Gets the baud rate configuration data of a CP210x device.
Gets the 1-byte Lock Value of a CP210x device.
Gets the port configuration of a CP210x device.
Gets the port configuration of a CP2105 device.
CP210x_Reset()
Resets a CP210x device.
Rev. 2.0
9
AN144
In general, the user initiates communication with the target CP210x device by making a call to
CP210x_GetNumDevices(). This call returns the number of CP210x target devices. This number is used as a
range when calling CP210x_GetProductString() to build a list of devices connected to the host machine.
A handle to the device must first be opened by a call to CP210x_Open() using an index determined from the call to
CP210x_GetNumDevices(). The handle will be used for all subsequent accesses. When I/O operations are
complete, the device handle is closed by a call to CP210x_Close().
When programming a CP2105 device to configure the mode, the following functions must be called in the following
order:
CP210x_SetDeviceMode()
CP210x_SetDualPortConfig()
The remaining functions are provided to allow access to customizable values contained in the CP210x
programmable area.
10
Rev. 2.0
AN144
5.1. CP210x_GetNumDevices
Description:
This function returns the number of CP210x devices connected to the host.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_GetNumDevices( LPDWORD NumDevices )
Parameters:
1. NumDevices—Address of a DWORD that will contain the number of devices.
Return Value: CP210x_STATUS = CP210x_SUCCESS,
CP210x_DEVICE_NOT_FOUND,
CP210x_INVALID_PARAMETER
5.2. CP210x_GetProductString
Description:
This function returns a NULL-terminated serial number (S/N) string, product description string, or
full path string for the device specified by an index passed in the DeviceNum parameter. The index
of the first device is 0, and the index of the last device is the value (NumDevices) returned by
CP210x_GetNumDevices() - 1.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_GetProductString( DWORD DeviceNum, 
LPVOID DeviceString, DWORD Options )
Parameters:
1. DeviceNum—Index of the device for which the product description string, serial number, or full
path is desired.
2. DeviceString—Variable of type CP210x_DEVICE_STRING returning the NULL-terminated
serial number, device description or full path string.
3. Options—Flag that determines if DeviceString contains the product description, serial number,
or full-path string.
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_DEVICE_NOT_FOUND,
CP210x_INVALID_PARAMETER
Rev. 2.0
11
AN144
5.3. CP210x_GetPartNumber
Description:
Returns the 1-byte Part Number contained in a CP210x device.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS WINAPI CP210x_GetPartNumber(HANDLE cyHandle, 
LPBYTE lpbPartNum);
Parameters:
1. Handle—Handle to the device returning a Part Number.
2. PartNum—Pointer to a 1-byte value returning the Part Number of the device.
A CP210x_CP2101_DEVICE denotes a CP2101 device, and a CP210x_CP2102_DEVICE
denotes a CP2102 device.
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_INVALID_PARAMETER,
CP210x_INVALID_HANDLE,
CP210x_DEVICE_IO_FAILED
5.4. CP210x_Open
Description:
Opens and returns a handle to a device using a device number determined by the number
returned from CP210x_GetNumDevices().
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_Open( DWORD DeviceNum, HANDLE* Handle )
Parameters:
1. DeviceNum—Device index. 0 for the first device, 1 for the second, etc.
2. Handle—Pointer to a variable where the handle to the device will be stored. This handle will be
used for all subsequent accesses to the device.
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_DEVICE_NOT_FOUND,
CP210x_INVALID_PARAMETER
5.5. CP210x_Close
Description:
Closes an open device handle.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_Close( HANDLE Handle )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_INVALID_HANDLE
12
Rev. 2.0
AN144
5.6. CP210x_SetVid
Description:
Sets the 2-byte Vendor ID field of the Device Descriptor of a CP210x device.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_SetVid( HANDLE Handle, WORD Vid )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. VID—2-byte Vendor ID value.
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_INVALID_HANDLE,
CP210x_DEVICE_IO_FAILED
5.7. CP210x_SetPid
Description:
Sets the 2-byte Product ID field of the Device Descriptor of a CP210x device.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_SetPid( HANDLE Handle, WORD Pid )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. PID—2-byte Product ID value.
Return Value: CP210x_STATUS = CP210x_SUCCESS,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
Rev. 2.0
13
AN144
5.8. CP210x_SetProductString
Description:
Sets the Product Description String of the String Descriptor of a CP210x device. If the string is not
already in Unicode format, the function will convert the string to Unicode before committing it to
programmable memory. The character size limit (in characters, not bytes), NOT including a NULL
terminator, is CP210x_MAX_PRODUCT_STRLEN or CP2105_MAX_PRODUCT_STRLEN.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_SetProductString( HANDLE Handle, LPVOID Product,
BYTE Length, BOOL ConvertToUnicode=TRUE )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. Product—Buffer containing the Product String value.
3. Length—Length of the string in characters (not bytes), NOT including a NULL terminator.
4. ConvertToUnicode—Boolean flag that tells the function if the string needs to be converted to
Unicode. The flag is set to TRUE by default (i.e., the string is in ASCII format and needs to be
converted to Unicode).
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_INVALID_PARAMETER,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
5.9. CP210x_SetInterfaceString
Description:
Sets the Interface String for the one of the two interfaces available on the CP2105. If the string is
not already in Unicode format, the function will convert the string to Unicode before committing it to
programmable memory. The character size limit (in characters, not bytes), NOT including a NULL
terminator, is CP2105_MAX_INTERFACE_STRLEN.
Supported Devices: CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_SetInterfaceString( HANDLE Handle, BYTE InterfaceNumber, LPVOID Interface, BYTE Length, BOOL ConvertToUnicode)
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. InterfaceNumber—Set to 0 for Enhanced Interface String, or 1 for Standard Interface String.
3. Interface—Buffer containing the Interface String.
4. Length—Length of the string in characters (not bytes), NOT including a NULL terminator.
5. ConvertToUnicode—Boolean flag that tells the function if the string needs to be converted to
Unicode. The flag is set to TRUE by default (i.e., the string is in ASCII format and needs to be
converted to Unicode).
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_INVALID_PARAMETER,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
14
Rev. 2.0
AN144
5.10. CP210x_SetSerialNumber
Description:
Sets the Serial Number String of the String Descriptor of a CP210x device. If the string is not
already in Unicode format, the function will convert the string to Unicode before committing it to
programmable memory. The character size limit (in characters, not bytes), NOT including a NULL
terminator, is CP210x_MAX_SERIAL_STRLEN.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_SetSerialNumber( HANDLE Handle, 
LPVOID SerialNumber, BYTE Length, BOOL ConvertToUnicode=TRUE )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. SerialNumber—Buffer containing the Serial Number String value.
3. Length—Length in characters (not bytes), NOT including a NULL terminator.
4. ConvertToUnicode—Boolean flag that tells the function if the string needs to be converted to
Unicode. The flag is set to TRUE by default, i.e. the string is in ASCII format and needs to be
converted to Unicode.
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_INVALID_PARAMETER,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
5.11. CP210x_SetSelfPower
Description:
Sets or clears the Self-Powered bit of the Power Attributes field of the Configuration Descriptor of
a CP210x device.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_SetSelfPower( HANDLE Handle, BOOL SelfPower )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. SelfPower—Boolean flag where TRUE means set the Self-Powered bit, and FALSE means
clear the Self-Powered bit.
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
Rev. 2.0
15
AN144
5.12. CP210x_SetMaxPower
Description:
Sets the Max Power field of the Configuration Descriptor of a CP210x device.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_SetMaxPower( HANDLE Handle, BYTE MaxPower )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. MaxPower—1-byte value representing the maximum power consumption of the CP210x USB
device, expressed in 2 mA units.
Return Value: CP210x_STATUS = CP210x_SUCCESS,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
5.13. CP210x_SetFlushBufferConfig
Description:
Sets the Flush Buffer configuration of a CP210x device.
Supported Devices: CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_SetMaxPower( HANDLE Handle, 
BYTE FlushBufferConfig )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. FlushBufferConfig—Set to determine which buffer(s) to flush (TX and/or RX) and upon which
event (Open and/or Close). See the header file for the bit defintions for this byte value.
Return Value: CP210x_STATUS = CP210x_SUCCESS,
CP210x_INVALID_HANDLE, 
CP210x_FUNCTION_NOT_SUPPORTED
CP210x_DEVICE_NOT_FOUND
16
Rev. 2.0
AN144
5.14. CP210x_SetDeviceMode
Description:
Sets the operating mode (GPIO or Modem) or each Interface of a CP210x device.
Supported Devices: CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_SetMaxPower( HANDLE Handle, 
BYTE DeviceModeECI, BYTE DeviceModeSCI)
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. DeviceModeECI—Set to 0 for modem mode for Enhanced interface. Set to 1 for GPIO mode.
3. DeviceModeSCI—Set to 0 for modem mode for Enhanced interface. Set to 1 for GPIO mode.
Return Value: CP210x_STATUS = CP210x_SUCCESS,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_NOT_FOUND
CP210x_FUNCTION_NOT_SUPPORTED
5.15. CP210x_SetDeviceVersion
Description:
Sets the Device Release Version field of the Device Descriptor of a CP210x device.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_SetDeviceVersion( HANDLE Handle, WORD Version )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. Version—2-byte Device Release Version number in Binary-Coded Decimal (BCD) format with
the upper two nibbles containing the two decimal digits of the major version and the lower two
nibbles containing the two decimal digits of the minor version.
Return Value: CP210x_STATUS = CP210x_SUCCESS,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
Rev. 2.0
17
AN144
5.16. CP210x_SetBaudRateConfig
Description:
Sets the baud rate configuration data of a CP210x device.
Supported Devices: CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS WINAPI CP210x_SetBaudRateConfig(HANDLE cyHandle,
BAUD_CONFIG* baudConfigData);
Parameters:
1. Handle—Handle to the device from which to get the Part Number.
2. BaudConfigData—Pointer to a BAUD_CONFIG structure containing the Baud Config data to
be set on the device.
Return Value: CP210x_STATUS = CP210x_SUCCESS,
CP210x_INVALID_PARAMETER, 
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
5.17. CP210x_SetLockValue
Description:
Sets the 1-byte Lock Value of a CP210x device.
Supported Devices: CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS WINAPI CP210x_SetLockValue(HANDLE cyHandle);
Parameters:
1. Handle—Handle of the device to lock. This will permanently set the lock value to 0x01.

WARNING: Setting the lock value locks ALL customizable data and cannot be reset; only use
this function to keep all customizable data on the part permanently.
Return Value: CP210x_STATUS = CP210x_SUCCESS,
CP210x_INVALID_PARAMETER, 
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
18
Rev. 2.0
AN144
5.18. CP210xSetPortConfig
Description:
Sets the current port pin configuration from the CP210x device.
Supported Devices: CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210X_STATUS
Parameters:
1. Handle—Handle to the device as returned by CP210x_Open()
CP210x_SetPortConfig(HANDLE Handle, LPVOID PortConfig)
2. PortConfig—Pointer to a PORT_CONFIG structure
Return Value: CP210X_STATUS = CP210X_SUCCESS,
CP210X_INVALID_HANDLE,
CP210X_DEVICE_IO_FAILED,
CP210X_UNSUPPORTED_DEVICE
5.19. CP210xSetDualPortConfig
Description:
Sets the current port pin configuration from the CP210x device. SetDeviceMode() must be called
before calling this function.
Supported Devices: CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210X_STATUS
fig)
Parameters:
1. Handle—Handle to the device as returned by CP210x_Open()
CP210x_SetPortConfig(HANDLE Handle, LPVOID DualPortCon-
2. DualPortConfig—Pointer to a DUAL_PORT_CONFIG structure
Return Value: CP210X_STATUS = CP210X_SUCCESS,
CP210X_INVALID_HANDLE,
CP210X_DEVICE_IO_FAILED,
CP210X_UNSUPPORTED_DEVICE
Rev. 2.0
19
AN144
5.20. CP210x_GetDeviceProductString
Description:
Returns the Product Description String of the String Descriptor of a CP210x device. If the ConvertToASCII parameter is set, the string will be converted to ASCII format before being returned to the
caller. The character size limit (in characters, not bytes), NOT including a NULL terminator, is
CP210x_MAX_PRODUCT_STRLEN.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_GetDeviceProductString( HANDLE Handle, 
LPVOID Product, LPBYTE Length, BOOL ConvertToASCII=TRUE )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. Product—Pointer to a buffer returning the Product String value.
3. Length—Pointer to a BYTE value returning the length of the string in characters (not bytes),
NOT including a NULL terminator.
4. ConvertToASCII—Boolean flag that tells the function whether the string needs to be converted
to ASCII before it is returned to the caller. The flag is set to TRUE by default (i.e., the caller is
expecting the string in ASCII format).
Return Value: CP210x_STATUS = CP210x_SUCCESS,
CP210x_INVALID_PARAMETER,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
20
Rev. 2.0
AN144
5.21. CP210x_GetDeviceInterfaceString
Description:
Gets the specified interface string from a CP210x device. If the ConvertToASCII parameter is set,
the string will be converted to ASCII format before being returned to the caller. The character size
limit
(in
characters,
not
bytes),
NOT
including
a
NULL
terminator,
is
CP210x_MAX_SERIAL_STRLEN.
Supported Devices: CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_GetDeviceInterfaceString( HANDLE Handle, 
BYTE InterfaceNumber, LPVOID Interface, BYTE Length, BOOL ConvertToASCII)
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. InterfaceNumber —Set to 0 for Enhanced Interface. Set to 1 for Standard Interface.
3. Interface—Pointer to buffer returning the selected Interface String value.
4. Length—Pointer to a BYTE value returning the length of the string in characters (not bytes),
NOT including a NULL terminator.
5. ConvertToASCII—Boolean flag that tells the function whether the string needs to be converted
to ASCII before it is returned to the caller. The flag is set to TRUE by default (i.e., the caller is
expecting the string in ASCII format).
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_INVALID_PARAMETER,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
Rev. 2.0
21
AN144
5.22. CP210x_GetDeviceSerialNumber
Description:
Gets the Serial Number String of the String Descriptor of a CP210x device. If the ConvertToASCII
parameter is set, the string will be converted to ASCII format before being returned to the caller.
The character size limit (in characters, not bytes), NOT including a NULL terminator, is
CP210x_MAX_SERIAL_STRLEN.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_GetDeviceSerialNumber( HANDLE Handle, 
LPVOID SerialNumber, LPBYTE Length, BOOL ConvertToASCII=TRUE )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. SerialNumber —Pointer to a buffer returning the Serial Number String value.
3. Length—Pointer to a BYTE value returning the length of the string in characters (not bytes),
NOT including a NULL terminator.
4. ConvertToASCII—Boolean flag that tells the function whether the string needs to be converted
to ASCII before it is returned to the caller. The flag is set to TRUE by default (i.e., the caller is
expecting the string in ASCII format).
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_INVALID_PARAMETER,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
5.23. CP210x_GetDeviceVid
Description:
Returns the 2-byte Vendor ID field of the Device Descriptor of a CP210x device.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_GetDeviceVid( HANDLE Handle, LPWORD Vid )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. VID—Pointer to a 2-byte value that returns the Vendor ID of the CP210x device.
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_INVALID_PARAMETER,
CP210x_INVALID_HANDLE,
CP210x_DEVICE_IO_FAILED
22
Rev. 2.0
AN144
5.24. CP210x_GetDevicePid
Description:
Returns the 2-byte Product ID field of the Device Descriptor of a CP210x device.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_GetDevicePid( HANDLE Handle, LPWORD Pid )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. PID—Pointer to a 2-byte value that returns the Product ID of the CP210x device.
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_INVALID_PARAMETER,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
5.25. CP210x_GetSelfPower
Description:
Returns the state of the Self-Powered bit of the Power Attributes field of the Configuration Descriptor of a CP210x device.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_GetSelfPower( HANDLE Handle, LPBOOL SelfPower )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. SelfPower—Pointer to a boolean flag where TRUE means the Self-Powered bit is set, and
FALSE means the Self-Powered bit is cleared.
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_INVALID_PARAMETER,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
Rev. 2.0
23
AN144
5.26. CP210x_GetMaxPower
Description:
Returns the 1-byte Max Power field of the Configuration Descriptor of a CP210x device.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_GetMaxPower( HANDLE Handle, LPBYTE MaxPower )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. MaxPower—Pointer to a 1-byte value returning the Maximum power consumption of the
CP210x USB device expressed in 2 mA units.
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_INVALID_PARAMETER,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
5.27. CP210x_GetMaxPower
Description:
Returns the 1-byte Max Power field of the Configuration Descriptor of a CP210x device.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_GetMaxPower( HANDLE Handle, LPBYTE MaxPower )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. MaxPower—Pointer to a 1-byte value returning the Maximum power consumption of the
CP210x USB device expressed in 2 mA units.
Return Value: CP210x_STATUS = CP210x_SUCCESS, 
CP210x_INVALID_PARAMETER,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
24
Rev. 2.0
AN144
5.28. CP210x_GetFlushBufferConfig
Description:
Returns the flush buffer configuration of a CP210x device.
Supported Devices: CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_GetFlushBufferConfig( HANDLE Handle, 
LPWORD FlushBufferConfig )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. FlushBufferConfig—Pointer to the values which indicates which buffer(s) are flushed (TX and/
or RX) and upon which event (Open and/or Close). See the header file for the bit defintions for
this byte value.
Return Value: CP210x_STATUS = CP210x_SUCCESS,
CP210x_DEVICE_NOT_FOUND,
CP210x_INVALID_HANDLE, 
CP210x_FUNCTION_NOT_SUPPORTED
5.29. CP210x_GetDeviceMode
Description:
Gets the operating mode (GPIO or Modem) or each Interface of a CP210x device.
Supported Devices: CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_SetMaxPower( HANDLE Handle, 
BYTE DeviceModeECI, BYTE DeviceModeSCI)
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
2. DeviceModeECI—Pointer to a 1-byte value returning the 0 if interface is in Modem mode, or 1
if GPIO mode.
3. DeviceModeSCI—Pointer to a 1-byte value returning the 0 if interface is in Modem mode, or 1
if GPIO mode.
Return Value: CP210x_STATUS = CP210x_SUCCESS,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_NOT_FOUND
CP210x_FUNCTION_NOT_SUPPORTED
Rev. 2.0
25
AN144
5.30. CP210x_GetBaudRateConfig
Description:
Returns the baud rate configuration data of a CP210x device.
Supported Devices: CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS WINAPI CP210x_GetBaudRateConfig(HANDLE cyHandle,
BAUD_CONFIG* baudConfigData);
Parameters:
1. Handle—Handle to the device on which to determine the lock value.
2. BaudConfigData—Pointer to a BAUD_CONFIG structure returning the Baud Config data of the
device.
Return Value: CP210x_STATUS = CP210x_SUCCESS,
CP210x_INVALID_PARAMETER,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
5.31. CP210x_GetLockValue
Description:
Returns the 1-byte Lock Value of a CP210x device.
Supported Devices: CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS WINAPI CP210x_GetLockValue(HANDLE cyHandle,
LPBYTE lpbLockValue);
Parameters:
1. Handle—Handle to the device on which to determine the lock value.
2. LockValue—Pointer to a 1-byte value returning the Lock Value of the device. A 0x01 denotes
that the device is locked, and a 0x00 denotes that the device is unlocked.
Return Value: CP210x_STATUS = CP210x_SUCCESS,
CP210x_INVALID_PARAMETER,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
26
Rev. 2.0
AN144
5.32. CP210x_GetPortConfig
Description:
Gets the current port pin configuration from the CP210x device.
Supported Devices: CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210X_STATUS
Parameters:
1. Handle—Handle to the device as returned by CP210x_Open()
CP210x_GetPortConfig(HANDLE Handle, LPVOID PortConfig)
2. Port Config—Pointer to a PORT_CONFIG structure
Return Value: CP210X_STATUS = CP210X_SUCCESS,
CP210X_INVALID_HANDLE,
CP210X_DEVICE_IO_FAILED,
CP210X_UNSUPPORTED_DEVICE
5.33. CP210xGetDualPortConfig
Description:
Gets the current port pin configuration from the CP210x device.
Supported Devices: CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210X_STATUS
fig)
Parameters:
1. Handle—Handle to the device as returned by CP210x_Open()
CP210x_SetPortConfig(HANDLE Handle, LPVOID DualPortCon-
2. DualPortConfig—Pointer to a DUAL_PORT_CONFIG structure
Return Value: CP210X_STATUS = CP210X_SUCCESS,
CP210X_INVALID_HANDLE,
CP210X_DEVICE_IO_FAILED,
CP210X_UNSUPPORTED_DEVICE
5.34. CP210x_Reset
Description:
Initiates a reset of the USB interface.
Note: There is a delay of ~1 second before the reset is initiated by the device firmware to give the application time to call
CP210x_Close() to close the device handle. No further operations should be performed with the device until it resets, reenumerates in Windows, and a new handle is opened.
Supported Devices: CP2101, CP2102, CP2103, CP2104, CP2105
Location:
CP210x Manufacturing DLL
Prototype:
CP210x_STATUS CP210x_Reset( HANDLE Handle )
Parameters:
1. Handle—Handle to the device to close as returned by CP210x_Open().
Return Value: CP210x_STATUS = CP210x_SUCCESS,
CP210x_INVALID_HANDLE, 
CP210x_DEVICE_IO_FAILED
Rev. 2.0
27
AN144
DOCUMENT CHANGE LIST
Revision 1.4 to Revision 1.5







Updated text in "1. Introduction" on page 1.
Updated text in "3. Customizing Driver Installations,
CP210x Custom Setup Utility (CP2101/2/3/4/5)" on
page 1.
Sections 3.1 through 3.7 removed.
“Customizing Driver Installations, Macintosh OS9
and OSX” removed.
CP210x.DLL changed to CP210xManufacturing.DLL
CP210x.LIB changed to CP210xManufacturing.LIB
CP210x.h changed to CP210xManufacturingDLL.h
Revision 1.5 to Revision 1.6

Added CP2103 to Relevant Devices on page 1.
"4.4. Building CP210xSetIDs.exe,
CP2110SetIDs.exe, or CP2112SetIDs.exe" on page
8.
Updated title
 Added "5.32. CP210x_GetPortConfig" on page 27.
 Added "5.18. CP210xSetPortConfig" on page 19.
 " Appendix—Type Definitions and Constants" on
page 23.

Updated
code.
Revision 1.6 to Revision 1.7

Corrected typo in the warning in section "5.17.
CP210x_SetLockValue" on page 18.
 Correct PDF bookmarks.
Revision 1.7 to Revision 1.8

Added support for CP2104, CP2105.
Revision 1.8 to Revision 1.9

Added support for CP2110 and CP2112.
Revision 1.9 to Revision 2.0

Added function definitions for new CP2104/CP2105related functions in Manufacturing DLL.
 Removed Appendix.
28
Rev. 2.0
AN144
NOTES:
Rev. 2.0
29
AN144
CONTACT INFORMATION
Silicon Laboratories Inc.
400 West Cesar Chavez
Austin, TX 78701
Tel: 1+(512) 416-8500
Fax: 1+(512) 416-9669
Toll Free: 1+(877) 444-3032
Please visit the Silicon Labs Technical Support web page:
https://www.silabs.com/support/pages/contacttechnicalsupport.aspx
and register to submit a technical support request.
The information in this document is believed to be accurate in all respects at the time of publication but is subject to change without notice.
Silicon Laboratories assumes no responsibility for errors and omissions, and disclaims responsibility for any consequences resulting from
the use of information included herein. Additionally, Silicon Laboratories assumes no responsibility for the functioning of undescribed features
or parameters. Silicon Laboratories reserves the right to make changes without further notice. Silicon Laboratories makes no warranty, representation or guarantee regarding the suitability of its products for any particular purpose, nor does Silicon Laboratories assume any liability
arising out of the application or use of any product or circuit, and specifically disclaims any and all liability, including without limitation consequential or incidental damages. Silicon Laboratories products are not designed, intended, or authorized for use in applications intended to
support or sustain life, or for any other application in which the failure of the Silicon Laboratories product could create a situation where personal injury or death may occur. Should Buyer purchase or use Silicon Laboratories products for any such unintended or unauthorized application, Buyer shall indemnify and hold Silicon Laboratories harmless against all claims and damages.
Silicon Laboratories and Silicon Labs are trademarks of Silicon Laboratories Inc.
Other products or brandnames mentioned herein are trademarks or registered trademarks of their respective holders.
30
Rev. 2.0