AN571 CP210 X V IRTUAL COM P ORT I NTERFACE 1. Introduction This document describes the CP210x Virtual COM Port interface between the host and CP210x device for the purposes of creating custom drivers that interface with the CP210x. For more information on how to customize the CP210x hardware, see “AN144: CP210x/CP211x Device Customization Guide” on the Silicon Labs Application Notes webpage: https://www.silabs.com/products/mcu/Pages/ApplicationNotes.aspx 1.1. Related Documents Universal Serial Bus Specification: version 2.0 (also referred to as the USB Specification). This specification is available at http://www.usb.org. Universal Serial Bus Class Definitions for Communication Devices: version 1.1 (also referred to as the CDC Specification, where “CDC” stands for “Communication Device Class”. This specification is available at http:// www.usb.org. ANSI/TIA-602: Serial Asynchronous Automatic Dialing and Control - available at http://www.eia.org. 1.2. Terms end device: refers to the hardware connected to the CP210x UART pins. host: refers to the PC driver and host controller. 2. Interface Architecture The CP210x device implements one or more communications interfaces implemented using the Bulk protocol. These USB Bulk pipes transport data only and any status information must be obtained from the control pipe. To configure and control the port, the host sends requests to the device via the control pipe. The host uses these requests to perform such functions as setting the baud rate, setting handshaking modes, and configuring special characters. To send data from the host to the port, the host queues BULK-OUT packets to the endpoint of the interface associated with the port. The data from these packets will be loaded into the interface’s data buffers and passed on to the external device. To move data from the port to the host, the host issues IN requests to the port’s data IN endpoint. Rev. 0.1 12/10 Copyright © 2010 by Silicon Laboratories AN571 AN571 3. Flow Control The Virtual COM Port protocol is designed to allow ports to perform the same handshaking that is performed by PCs when running Windows with a real serial port. To do this, the device is required to follow detailed rules for flow control. The Virtual COM Port protocol provides full-duplex data streams. The transmit stream is used for data from the host to the serial port; the receive stream is used for data from the serial port to the host. Each stream has provisions for flow control. Transmit flow control allows the end device to ask the port to stop transmitting data. The CP210x will continue to accept OUT data from the host until its internal buffers are full, and then will NACK further OUT packets to the transmit endpoint. When the end device has accepted enough data from the CP210x buffers, the CP210x will accept more OUT packets from the host. Receive flow control allows the port to ask the end device to stop transmitting data to the host. The CP210x device holds the data received from the end device in buffers until the host asks for it. If the host does not ask for data in a timely fashion (usually because the application is busy), the CP210x’s buffers may start to fill up, and the CP210x uses receive flow control to ask the end device to stop sending data. When the host catches up and empties the CP210x’s buffers, the CP210x then uses receive flow control to ask the end device to resume sending data. All flow-control handling is performed in the CP210x device. This is done for two reasons: To reduce overhead at the host. To eliminate latency for responding to flow-control events. The host’s only involvement with flow control is to set the device into the desired flow control mode. 3.1. XON/XOFF Flow Control Two characters are defined by the “set special characters” mechanism (SET_CHARS): XON (normally 0x11, CTRL/Q), and XOFF (normally 0x13, CTRL/S). The same values are used for XON and XOFF for both transmit and receive flow control. XON and XOFF may be set to the same character, but usually are different. The CP210x device follows “OS/2 rules:” if transmit flow control says “don’t transmit”, the port prevents any characters from being transmitted, including the flow control characters. The device normally stops transmitting whenever it sends XOFF for receive flow control. The port resumes transmitting only when it sends XON to allow the remote device to send data. This prevents a potential buffer overflow because the flow control characters cannot be transmitted while XOFF is in effect. 3.2. Flow Control Rules 2 The CP210x uses a bit pattern similar to the ulHoldReasons mask from the Serial Status response (see Table 8) to control transmission. If any of the hold reasons are set, the CP210x will not send (except that certain characters, such as XON for receive flow control, can always be sent). If the CP210x sends an XOFF special character in order to stop reception, the device will transmitting until the device decides to send XON. While transmission is halted, the CP210x will set bit 4 in ulHoldReasons (see Table 8). If the CP210x receives an XOFF special character and is configured to XON/XOFF flow control mode, then the CP210x will stop transmitting characters. While stopped, the CP210x sets bit 3 in ulHoldReasons. When an XON is received, the CP210x clears bit 3 in ulHoldReasons and resumes transmission if ulHoldReasons [5..0] is now zero. If the CP210x is instructed to send a BREAK, it will stop sending normal characters while BREAK is asserted and set bit 5 of ulHoldReasons. If the CP210x is waiting for any of the modem control signals CTS, DSR or DCD, the CP210x sets the appropriate bits in ulHoldReasons when the corresponding signal is causing a delay; the device will clear those bits when the hold condition is removed, either because the flow-control programming was changed, or because the signal changed state externally. Immediate characters are not blocked by software flow control (either due to XOFF sent or due to XOFF received). However, they are held off by BREAK, CTS handshaking, DSR handshaking or DCD handshaking (if enabled and holding off traffic). After sending an XOFF, the CP210x sends XON to start receiving data only if output is not being held, or otherwise if either a sent XOFF or a received XOFF is the only reason that output is being held. Rev. 0.1 AN571 4. CP210x Hardware Descriptors The CP210x device descriptor contains zero in the bDeviceClass, bDeviceSubClass, and bDeviceProtocol fields. All other fields are set as defined in Section 9.6.1 "Device" of the USB Specification. Table 1. CP210x Default Device Descriptor Offset Field Size Value Description 0 bLength 1 0x12 Size of the descriptor in bytes. 1 bDescriptorType 1 0x01 Device descriptor type code. 2 bcdUSB 2 0x0110 or 0x0200 Claimed version compliance, where the LSB is the low order and the MSB is the high order (0x0100 is version 1.0). 4 bDeviceClass 1 0x00 Indicates that this device is of no particular device class. 5 bDeviceSubClass 1 0x00 Inidicates that there’s no particular subclass. 6 bDeviceProtocol 1 0x00 No device-specific protocol. 7 bMaxPacketSize 1 0x40 Indicates the maximum packet size for Endpoint0. 8 idVendor 2 0x10C4 10 idProduct 2 12 bcdDevice 2 0x0100 14 iManufacturer 1 0x01 Manufacturer string descriptor index. 15 iProduct 1 0x02 Product string descriptor index. 16 iSerialNumber 1 0x03 or 0x05 17 bNumConfigurations 1 0x01 Manufacturer’s Vendor ID. 0xEA60 or 0xEA70 Manufacturer’s Product ID. Rev. 0.1 Product version in BCD. Serial string descriptor index. Number of possible configurations. 3 AN571 Table 2. CP210x Default Configuration Descriptor Offset Field Size Value Description 0 bLength 1 0x09 Size of the descriptor in bytes. 1 bDescriptorType 1 0x02 Configuration descriptor type code. 2 wTotalLength 2 0x0020 or 0x0037 4 bNumInterfaces 1 0x01 or 0x02 Number of interfaces in this configuration (CP2105 has two interfaces). 5 bConfigurationValue 1 0x01 Indicates the value to be used in a Set Configuration packet to activate this configuration. 6 iConfiguration 1 0x00 Index of the string descriptor describing this configuration. 7 bmAttributes 1 0x80 Indicates the characteristics of the device when this configuration is selected: Total length of data returned for configuration 0 (stored in little-endian order). bit 7 set: Device is bus powered. bit 6 set: Device is self powered. bit 5-0: reserved. 8 4 MaxPower 1 0x32 Rev. 0.1 Maximum power consumption in 2mA units. For self-powered devices, this field is zero. AN571 Table 3. CP210x Default Interface Descriptor Offset Field Size Value Description 0 bLength 1 0x09 Size of the descriptor in bytes. 1 bDescriptorType 1 0x04 Interface descriptor type code. 2 bInterfaceNumber 1 0x00 or 0x01 3 bAlternateSetting 1 0x00 Indicates the alternate setting which enables the interface to operate as described. 4 bNumEndpoints 1 0x02 This interface has 2 Endpoints. 5 bInterfaceClass 1 0xFF Indicates that this is a vendor-specific interface. 6 bInterfaceSubClass 1 0x00 No particular subclass. 7 bInterfaceProtocol 1 0x00 The interface uses no specific protocol. 8 iInterface 1 The interface described by this descriptor (CP2105 devices have two interfaces). 0x02, 0x03, or 0x04 Index of the string descriptor describing this interface. Table 4. CP210x Default IN Endpoint Descriptor Offset Field Size Value Description 0 bLength 1 0x07 Size of the descriptor in bytes. 1 bDescriptorType 1 0x05 Endpoint descriptor type code. 2 bEndpointAddress 1 0x81 or 0x82 3 bmAttributes 1 0x02 4 wMaxPacketSize 2 0x0040 or 0x0020 5 bInterval 1 0x00 Rev. 0.1 IN Endpoint (either Endpoint 1 or Endpoint 2). Bulk Endpoint. The maximum packet size is 64 or 32 bytes. Not used for Bulk Endpoints. 5 AN571 Table 5. CP210x Default OUT Endpoint Descriptor 6 Offset Field Size Value Description 0 bLength 1 0x07 Size of the descriptor in bytes. 1 bDescriptorType 1 0x05 Endpoint descriptor type code. 2 bEndpointAddress 1 0x01 or 0x02 3 bmAttributes 1 0x02 4 wMaxPacketSize 2 0x0040 or 0x0020 5 bInterval 1 0x00 Rev. 0.1 OUT Endpoint (either Endpoint 1 or Endpoint 2). Bulk Endpoint. The maximum packet size is 64 or 32 bytes. Not used for Bulk Endpoints. AN571 5. CP210x Control Commands The CP210x commands in Table 6 follow the standard USB Setup packet structure and are defined in addition to the messages defined as part of Chapter 9 of the USB Specification. The interface number can be obtained from the CP210x descriptors upon enumeration and driver load. This section discusses each of these commands. Table 6. Interface Commands Name Code Description IFC_ENABLE 0x00 Enable or disable the interface. 8 SET_BAUDDIV 0x01 Set the baud rate divisor. 8 GET_BAUDDIV 0x02 Get the baud rate divisor. 8 SET_LINE_CTL 0x03 Set the line control. 9 GET_LINE_CTL 0x04 Get the line control. 10 SET_BREAK 0x05 Set a BREAK. 14 IMM_CHAR 0x06 Send character out of order. 14 SET_MHS 0x07 Set modem handshaking. 10 GET_MDMSTS 0x08 Get modem status. 11 SET_XON 0x09 Emulate XON. 11 SET_XOFF 0x0A Emulate XOFF. 12 SET_EVENTMASK 0x0B Set the event mask. 12 GET_EVENTMASK 0x0C Get the event mask. 13 GET_EVENTSTATE 0x16 Get the event state. 13 SET_CHAR 0x0D Set special character individually. 14 GET_CHARS 0x0E Get special characters. 15 GET_PROPS 0x0F Get properties. 15 GET_COMM_STATUS 0x10 Get the serial status. 14 RESET 0x11 Reset. 8 PURGE 0x12 Purge. 15 SET_FLOW 0x13 Set flow control. 11 GET_FLOW 0x14 Get flow control. 11 EMBED_EVENTS 0x15 Control embedding of events in the data stream. 16 GET_BAUDRATE 0x1D Get the baud rate. 9 SET_BAUDRATE 0x1E Set the baud rate. 8 SET_CHARS 0x19 Set special characters. 15 VENDOR_SPECIFIC 0xFF Vendor specific command. 17 Rev. 0.1 Page 7 AN571 5.1. IFC_ENABLE (0x00) bmRequestType bRequest wValue wIndex wLength Data 01000001b IFC_ENABLE Boolean interface 0 None This command enables or disables the specified CP210x interface. If wValue is 0x0001, the interface is enabled and serial data can be transmitted. If wValue is zero, the interface is disabled. Host drivers should enable the interface before sending any of the other commands specified by this document. For maximum compatibility with Windows, the CP210x will not change its baud rate or line control parameters on enable or disable. However, the CP210x may lower DTR. 5.2. RESET (0x11) bmRequestType bRequest wValue wIndex wLength Data 01000001b RESET 0 interface 0 None This command is in place for compatibility reasons. The CP210x device will ignore this command. 5.3. SET_BAUDDIV (0x01) bmRequestType bRequest wValue wIndex wLength Data 01000001b SET_BAUDDIV baud rate divisor interface 0 None This command sets the baud rate for the specified interface according to wValue. The value is determined by dividing the desired baud rate into 3.6864 MHz. 5.4. GET_BAUDDIV (0x02) bmRequestType bRequest wValue wIndex wLength Data 11000001b GET_BAUDDIV 0 interface 2 baud rate divisor This command gets the baud rate for the specified interface. The value is determined by multiplying the baud rate divisor returned by 3.6864 MHz. 5.5. SET_BAUDRATE (0x1E) bmRequestType bRequest wValue wIndex wLength Data 01000001b SET_BAUDRATE 0 interface 4 baud rate This command sets the baud rate for the specified interface, according to a 4-byte value specified in the Data phase of the control request. 8 Rev. 0.1 AN571 5.6. GET_BAUDRATE (0x1D) bmRequestType bRequest wValue wIndex wLength Data 11000001b GET_BAUDRATE 0 interface 4 baud rate This command gets the baud rate for the CP210x interface. 5.7. SET_LINE_CTL (0x03) bmRequestType bRequest wValue wIndex wLength Data 01000001b SET_LINE_CTL line control interface 0 None This command adjusts the line control settings for the selected CP210x interface, according to the value of wValue. The settings will only take effect if the selection is valid for the interface (see the specific CP210x data sheet for more details). If an invalid setting is selected, the CP210x will issue a USB procedural stall. The settings are as follows: bits 3-0: Stop bits: 0 = 1 stop bit 1 = 1.5 stop bits 2 = 2 stop bits other values reserved. bits 7-4: Parity setting: 0 = none. 1 = odd. 2 = even. 3 = mark. 4 = space. other values reserved. bits 15-8: Word length, legal values are 5, 6, 7 and 8. Rev. 0.1 9 AN571 5.8. GET_LINE_CTL (0x04) bmRequestType bRequest wValue wIndex wLength Data 11000001b GET_LINE_CTL 0 interface 2 line control This command gets the line control settings for the selected CP210x interface. The settings are as follows: bits 3-0: Stop bits: 0 = 1 stop bit. 1 = 1.5 stop bits. 2 = 2 stop bits. other values reserved. bits 7-4: Parity setting: 0 = none. 1 = odd. 2 = even. 3 = mark. 4 = space. other values reserved. bits 15-8: Word length, legal values are 5, 6, 7 and 8. 5.9. SET_MHS (0x07) bmRequestType bRequest wValue wIndex wLength Data 01000001b SET_MHS bit mask interface 0 None This command sets the modem handshaking states for the selected CP210x interface according to the value of wValue. DTR and RTS values can be set only if the current handshaking state of the interface allows direct control of the modem control lines. bit 0: DTR state. bit 1: RTS state. bits 2–7: reserved. bit 8: DTR mask, if clear, DTR will not be changed. bit 9: RTS mask, if clear, RTS will not be changed. bits 10–15: reserved. 10 Rev. 0.1 AN571 5.10. GET_MDMSTS (0x08) bmRequestType bRequest wValue wIndex wLength Data 11000001b GET_MDMSTS 0 interface 1 modem status This command returns the current states of the RS-232 modem control lines for the specified CP210x interface. The modem control line status byte is defined as follows: bit 0: DTR state (as set by host or by handshaking logic in CP210x). bit 1: RTS state (as set by host or by handshaking logic in CP210x). bits 2–3: reserved. bit 4: CTS state (as set by end device). bit 5: DSR state (as set by end device). bit 6: RI state (as set by end device). bit 7: DCD state (as set by end device). 5.11. SET_FLOW (0x13) bmRequestType bRequest wValue wIndex wLength Data 01000001b SET_FLOW 0 interface 0x0010 See Table 9 This command sets the flow control state of the specified CP210x interface. 5.12. GET_FLOW (0x14) bmRequestType bRequest wValue wIndex wLength Data 11000001b GET_FLOW 0 interface 0x0010 See Table 9 This command gets the flow control state of the specified CP210x interface. 5.13. SET_XON (0x09) bmRequestType bRequest wValue wIndex wLength Data 01000001b SET_XON 0 interface 0 None Emulate the receipt of XON (transmit flow control). If the CP210x interface was in XOFF state and if hardware handshaking permits, the interface will resume transmitting data to the external device. If the CP210x interface is not waiting for XON, this command has no effect. Rev. 0.1 11 AN571 5.14. SET_XOFF (0x0A) bmRequestType bRequest wValue wIndex wLength Data 01000001b SET_XOFF 0 interface 0 None Emulate the receipt of XOFF (transmit flow control) from the end device. The CP210x interface will stop sending characters to the end device as soon as possible and will not resume until an XON is received from the end device, or else SET_XON is received from the host. The interface may continue to accept BULK OUT packets if there is enough buffer memory available inside the device. If the CP210x interface is already stopped, this command has no effect. 5.15. SET_EVENTMASK (0x0B) bmRequestType bRequest wValue wIndex wLength Data 01000001b SET_EVENTMASK wait mask interface 0 None wValue represents the wait mask as follows: bit 0: RI trailing edge occurred. bit 1: unused. bit 2: The receive buffer is 80% full. bits 3–7: unused. bit 8: Character received. bit 9: Special character received. bit 10: The transmit queue is empty. bit 11: CTS state changed. bit 12: DSR state changed. bit 13: DCD state changed. bit 14: Line break received. bits 15: A line-status error occurred. 12 Rev. 0.1 AN571 5.16. GET_EVENTMASK (0x0C) bmRequestType bRequest wValue wIndex wLength Data 11000001b GET_EVENTMASK 0 interface 2 wait mask Data represents the wait mask as follows: bit 0: RI trailing edge occurred. bit 1: unused. bit 2: The receive buffer is 80% full. bits 3–7: unused. bit 8: Character received. bit 9: Special character received. bit 10: The transmit queue is empty. bit 11: CTS state changed. bit 12: DSR state changed. bit 13: DCD state changed. bit 14: Line break received. bits 15: A line-status error occurred. 5.17. GET_EVENTSTATE (0x16) bmRequestType bRequest wValue wIndex wLength Data 11000001b GET_EVENTSTATE 0 interface 2 event state Data represents the event state as follows: bit 0: RI trailing edge occurred. bit 1: unused. bit 2: The receive buffer is 80% full. bits 3–7: unused. bit 8: Character received. bit 9: Special character received. bit 10: The transmit queue is empty. bit 11: CTS state changed. bit 12: DSR state changed. bit 13: DCD state changed. bit 14: Line break received. bits 15: A line-status error occurred. Rev. 0.1 13 AN571 5.18. SET_BREAK (0x05) bmRequestType bRequest wValue wIndex wLength Data 01000001b SET_BREAK break state interface 0 None If wValue is 0x0001, then a BREAK is transmitted. If wValue is 0x000, then BREAK is reset. This is not necessarily synchronized with queued transmit data. This command is not supported on the second CP2105 interface. 5.19. GET_COMM_STATUS (0x10) bmRequestType bRequest wValue wIndex wLength Data 11000001b GET_COMM_STATUS 0 interface 0x0013 See Table 8 This command will return the serial status of the CP210x interface specified by wIndex. The returned Serial Status structure has information on the amount of data in the CP210x’s transmit and receive queues and other transmission information. 5.20. IMM_CHAR (0x06) bmRequestType bRequest wValue wIndex wLength Data 01000001b IMM_CHAR char interface 0 None The character specified by wValue (which must be in the range 0x00-0xFF) is queued to be transmitted as soon as possible (bypassing any characters waiting in the queue). The CP210x will return an error if the value of wValue is out of range. Because the default pipe is a shared resource, the CP210x will not delay completion of this request. If IMM_CHAR is received and the device cannot buffer the character immediately, the CP210x will return an error indication. 5.21. SET_CHAR (0x0D) bmRequestType bRequest wValue wIndex wLength Data 01000001b SET_CHAR special char and index value interface 0 None The individual special character values are set using wValue as follows: bits 0–7: Index of the character to set: 0 = EofChar 1 = ErrorChar 2 = BreakChar 3 = EventChar 4 = XonChar 5 = XoffChar bit 8–15: Character value to set for the specified index. 14 Rev. 0.1 AN571 5.22. SET_CHARS (0x19) bmRequestType bRequest wValue wIndex wLength Data 01000001b SET_CHARS 0 interface 0x0006 See Table 12 The special character values are set using the six-byte array passed as Data. It is an error for the host to send anything other than six bytes, and the CP210x will return an error if this occurs. 5.23. GET_CHARS (0x0E) bmRequestType bRequest wValue wIndex wLength Data 11000001b GET_CHARS 0 interface 0x0006 See Table 12 The special character values are returned using the six-byte array passed as Data. 5.24. GET_PROPS (0x0F) bmRequestType bRequest wValue wIndex wLength Data 11000001b GET_PROPS 0 interface 0x0100 See Table 7 This command causes the interface to respond with a communication properties response that describes the capabilities of this interface. The details of this response are shown in Table 7. 5.25. PURGE (0x12) bmRequestType bRequest wValue wIndex wLength Data 01000001b PURGE mask; see below interface 0 None This command causes the CP210x to purge the selected transmit or receive queues, based on the value of the mask. The bit meanings are as follows: bit 0: Clear the transmit queue. bit 1: Clear the receive queue. bit 2: Clear the transmit queue. bit 3: Clear the receive queue. Rev. 0.1 15 AN571 5.26. EMBED_EVENTS (0x15) bmRequestType bRequest wValue wIndex wLength Data 01000001b EMBED_EVENTS 0 or escape character interface 0 None This command selects or deselects event insertion mode, depending on the value of wValue. If wValue is zero, then the CP210x-to-host data stream consists only of data from the serial port. If wValue is non-zero, then events are multiplexed with data. Events are marked by a special character selected by wValue (which must be in the range 0x01-0xFF), followed by one or more bytes of qualifying code. The CP210x will check wValue and return an error indication if wValue is out of range. Event insertion mode is disabled by USB device reset or interface disable (IFC_ENABLE with wValue == 0x0000). The CP210x will mark events by interleaving special characters in the data stream transmitted to the PC. Events are marked as follows (<ESCCHAR> is the value selected by wValue): <ESCCHAR> <0x00>: Indicates that the <ESCCHAR> itself appeared in the input stream. <ESCCHAR> <0x01> <lsrval> <dataval>: Indicates that a line status register change occurred when a data byte was waiting to be received. <lsrval> is the new line status register value; <dataval> is the next data character. <ESCCHAR> <0x02> <lsrval>: Indicates that a line status register change occurred when no data byte was waiting to be received. <lsrval> is the new line status register value. <ESCCHAR> <0x03> <msrval>: Indicates that a modem status register change has occurred. <msrval> is the new value. The Line Status Register value is encoded as follows: bit 0: Data ready, Only set when the port is encoding an event with both <lsrval> and <dataval> bytes (that is, if the sequence is <ESCCHAR> <0x01> <lsrval> <dataval>). bit 1: Hardware Overrun, A receiver hardware overrun occurred. bit 2: Parity Error, A parity error occurred. bit 3: Framing error, A framing error occurred. bit 4: Break, A break was detected. bits 5–7: reserved (always 000). The Modem Status Register value is encoded as follows: bit 0: Delta CTS, Set if there has been a change in CTS. bit 1: Delta DSR, Set if there has been a change in DSR. bit 2: Trailing edge RI, Set if the falling edge of RI has occurred. bit 3: Delta DCD, Set if there has been a change in DCD. bit 4: CTS, Current state of CTS. bit 5: DSR, Current state of DSR. bit 6: RI, Current state of RI. bit 7: DCD, Current state of DCD. 16 Rev. 0.1 AN571 5.27. VENDOR_SPECIFIC (0xFF) bmRequestType bRequest wValue wIndex wLength Data See below VENDOR_SPECIFIC See below See below See below See below This command is used for any vendor specific commands. These are as follows: 5.27.1. WRITE_LATCH (CP2103/4) bmRequestType bRequest wValue wIndex wLength Data 01000001b VENDOR_SPECIFIC 0x37E1 write latch value 0 None The write latch value that is supplied in wIndex is represented as follows: bits 0–7: Mask of the latch state (in bits 8-15) to write, where bit 0 is GPIO0, bit 1 is GPIO1, etc. up tp GPIOn where n is the total number of GPIO pins the interface supports. bits 8–15: Latch state to write, where bit 8 is GPIO0, bit 9 is GPIO1, etc. up to GPIOn where n is the total number of GPIO pins the interface supports. 5.27.2. WRITE_LATCH (CP2105) bmRequestType bRequest wValue wIndex wLength Data 01000001b VENDOR_SPECIFIC 0x37E1 interface 2 write latch value The write latch value that is supplied in the Data phase is represented as follows: bits 0–7: Mask of the latch state (in bits 8-15) to write, where bit 0 is GPIO0, bit 1 is GPIO1, etc. up tp GPIOn where n is the total number of GPIO pins the interface supports. bits 8–15: Latch state to write, where bit 8 is GPIO0, bit 9 is GPIO1, etc. up to GPIOn where n is the total number of GPIO pins the interface supports. 5.27.3. READ_LATCH (CP2103/4) bmRequestType bRequest wValue wIndex wLength Data 11000001b VENDOR_SPECIFIC 0x00C2 0 1 read latch value The read latch value that is returned is represented as follows: bits 0–7: Current latch state, where bit 0 is GPIO0, bit 1 is GPIO1, etc. up to GPIOn where n is the total number of GPIO pins the interface supports. 5.27.4. READ_LATCH (CP2105) bmRequestType bRequest wValue wIndex wLength Data 11000001b VENDOR_SPECIFIC 0x00C2 interface 1 read latch value The read latch value that is returned is represented as follows: bits 0–7: Current latch state, where bit 0 is GPIO0, bit 1 is GPIO1, etc. up to GPIOn where n is the total number of GPIO pins the interface supports. Rev. 0.1 17 AN571 6. Control Formats This section describes the additional data structures that are transmitted or received in conjunction with the commands discussed in "5. CP210x Control Commands" on page 7. Table 7. Communication Properties Response Offset Field Size Value 0 wLength 2 Number: 0x???? 2 bcdVersion 2 BCD: 0x0100 Version of response, in BCD: 0x0100 is Version 1.00. 4 ulServiceMask 4 Number: 0x00000001 Service provider identifier; 1 for compatbility with NT serial.sys. 8 reserved 4 0 12 ulMaxTxQueue 4 Number Maximum transmit queue size. 16 ulMaxRxQueue 4 Number Maximum receive queue size. 20 ulMaBaud 4 Number Maximum baud rate. 24 ulProvSubType 4 Code: 0 1 6 Description Size of structure in bytes. This must reflect the total available size, even if the host requests fewer bytes. reserved Indicates kind of device: Unspecified RS-232 Modem or TA All other values are reserved. 28 ulProvCapabilities 4 BitMask Capabilities Mask. Bits are: 0: DTR/DSR support 1: RTS/CTS support 2: DCD support 3: Can check parity 4: XON/XOFF support 5: Can set XON/XOFF characters 6: reserved 7: reserved 8: Can set special characters 9: Supports 16-bit mode (always 0) All other bits are reserved. 18 Rev. 0.1 AN571 Table 7. Communication Properties Response (Continued) Offset Field Size Value 32 ulSettableParams 4 BitMask Description Settable parameters mask. Bits are: 0: Can set parity type 1: Can set baud 2: Can set number of data bits 3: Can set stop-bits 4: Can set handshaking 5: Can set parity checking 6: Can set carrier-detect checking All other bits are reserved. 36 ulSettableBaud 4 BitMask Settable baud rates mask. Bits are: 0: 75 baud 1: 110 baud 2: 134.5 baud 3: 150 baud 4: 300 baud 5: 600 baud 6: 1200 baud 7: 1800 baud 8: 2400 baud 9: 4800 baud 10: 7200 baud 11: 9600 baud 12: 14,400 baud 13: 19,200 baud 14: 38,400 baud 15: 56,000 baud 16: 128,000 baud 17: 115,200 baud 18: 57,600 baud 19-27: reserved 28: the CP210x supports additional baud rates other than those defined by bits 0-18. (There is no way to determine what these baud rates are, other than by trying to select them.) 29-31: reserved Rev. 0.1 19 AN571 Table 7. Communication Properties Response (Continued) Offset Field Size Value 40 wSettableData 2 BitMask Description Capabilities mask for permissible data bit settings: 0: 5 data bits 1: 6 data bits 2: 7 data bits 3: 8 data bits 4: 16 data bits 5: 16 data bits, extended 6-15: reserved 20 44 ulCurrentTx-Queue 4 Number Current size of the transmit queue (allocated). 48 ulCurrentRx-Queue 4 Number Current size of the receive queue (allocated). 52 Reserved 4 BitMask Reserved 56 Reserved 4 BitMask Reserved 60 uniProvName 15 “SILABS USB Vx.y” Unicode string identifying the vendor of the device. The last three characters indicate the version. Rev. 0.1 AN571 Table 8. Serial Status Response Offset Field Size Value 0 ulErrors 4 BitMask Description Defines the current error status: bit 0: break bit 1: framing error bit 2: hardware overrun bit 3: queue overrun bit 4: parity error bits 5-31: reserved. 4 ulHoldReasons 4 BitMask Reason(s) CP210x is holding: Transmit: bit 0: waiting for CTS bit 1:waiting for DSR bit 2: waiting for DCD bit 3: waiting for XON bit 4: XOFF sent, waiting bit 5: waiting on BREAK Receive: bit 6: waiting for DSR bits 7-31: reserved. 8 ulAmountInInQueue 4 Number Number of bytes waiting in the input queue. 12 ulAmountInOutQueue 4 Number Number of bytes waiting in hte output queue. 16 bEofReceived 1 Boolean Always zero. 17 bWaitForImmediate 1 Boolean 0x01 if waiting for an immediate transmission to be sent. 18 bReserved 1 Zero Reserved for future use. Table 9. Flow Control State Setting/Response Offset Field Size Value Description 0 ulControlHandshake 4 Code Control handshake: see Table 10 for more information. 4 ulFlowReplace 4 Code Control handshake: see Table 11 for more information. 8 ulXonLimit 4 Number Threshold for sending XON. When the available space rises above this amount, XON will be sent (if in auto-receive mode). 12 ulXoffLimit 4 Number Threshold for sending XOFF. When available space drops below this amount, XOFF will be sent (if in auto receive mode). Rev. 0.1 21 AN571 Table 10. Bits in ulControlHandshake 22 Bit Name Size Value Description 0-1 SERIAL_DTR_MASK 2 Code This field controls the state of the DTR output for this interface. The following binary values are defined: 00: DTR is held inactive. 01: DTR is held active. 10: DTR is controlled by the CP210x device. 11: Reserved 2 Reserved 1 Flag Reserved—must always be zero. 3 SERIAL_CTS_HANDSHAKE 1 Flag Controls how the CP210x interprets CTS from the end device: 0: CTS is simply a status input. 1: CTS is a handshake line. 4 SERIAL_DSR_HANDSHAKE 1 Flag Controls how the CP210x interprets DSR: 0: DSR is simply a status input. 1: DSR is a handshake line. 5 SERIAL_DCD_HANDSHAKE 1 Flag Controls how the CP210x interprets DCD from the end device: 0: DCD is simply a status input. 1: DCD is a handshake line. 6 SERIAL_DSR_SENSITIVITY 1 Flag Controls whether DSR controls input data reception: 0: DSR is simply a status input. 1: DSR low discards data 7-31 Reserved 25 Reserved Rev. 0.1 AN571 Table 11. Bits in ulFlowReplace Bit Name Size Value Description 0 SERIAL_AUTO_TRANSMIT 1 Flag Controls whether the CP210x acts on XON/XOFF characters received from the end device. 0: No XON/XOFF processing. 1: XON/XOFF start/stop output to serial port. 1 SERIAL_AUTO_RECEIVE 1 Flag Controls whether the CP210x will try to transmit XON/XOFF in order to start/stop the reception of data from an endl device. If set, XOFF (as defined by the SET_CHARS command) will be sent by the CP210x to the end device when the CP210x’s buffers are more than 80% full (or as selected by the XOFF threshold). XON will be sent when the interface’s buffers drop below the XON threshold, as long as it is fine to do so. 2 SERIAL_ERROR_CHAR 1 Flag Controls how CP210x handles characters that are received with errors: 0: The character is discarded. 1: The character is discarded, and the ERROR special-character is inserted. The ERROR character must be programmed by the host using the SET_CHARS messages (Section 5.22). 3 SERIAL_NULL_STRIPPING 1 Flag If set, any NULL characters received by the CP210x from the end device will be discarded and will not be passed to the host. If clear, NULL characters are treated as data. 4 SERIAL_BREAK_CHAR 1 Flag If set, a received break condition causes the CP210x to insert a BREAK special character (section 5.18) in the receive data stream. If clear, BREAK does not affect the input data stream. In either case, a received break always causes the appropriate bit of the error mask to be set. 5 Reserved 1 6–7 SERIAL_RTS_MASK 2 Reserved Reserved Code Rev. 0.1 This field controls the RTS line. 00: RTS is statically inactive. 01: RTS is statically active. 10: RTS is used for receive flow control. 11: RTS is transmit active signal. 23 AN571 Table 11. Bits in ulFlowReplace (Continued) Bit Name Size Value Description 8–30 Reserved 23 zero Reserved—must be written as zero. 31 SERIAL_XOFF_CONTINUE 1 Flag If set, then the CP210x will send XON/ XOFF receive flow control characters to the end device, even if the end device has sent XOFF to suspend output and has not yet sent XON to resume. Table 12. Special Characters Response 24 Offset Field Size Value 0 bEofChar 1 Number The character that indicates EOF (on the input). 1 bErrorChar 1 Number The character that should be inserted in the input stream when an error occurs. 2 bBreakChar 1 Number The character that should be inserted in the input stream when a break is detected. 3 bEventChar 1 Number The special character that causes bit 2 of the event-occurred mask to be set whenever it is received. 4 bXonChar 1 Number The character used for XON. 5 bXoffChar 1 Number The character used for XOFF. Rev. 0.1 Description AN571 NOTES: Rev. 0.1 25 AN571 CONTACT INFORMATION Silicon Laboratories Inc. 400 West Cesar Chavez Austin, TX 78701 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. 26 Rev. 0.1