Fact-checked by Grok 2 weeks ago

USB communications device class

The USB Communications Device Class (CDC) is a standardized composite class in the Universal Serial Bus (USB) specification that defines protocols, descriptors, and structures for communication , enabling them to connect to USB hosts and perform functions such as , transfer, and networking. Defined by the (USB-IF), the CDC uses base class code 02h for communication (handling management and call control) and 0Ah for associated (managing or isochronous transfers), allowing to emulate traditional ports or network connections without requiring custom drivers on compliant hosts. Introduced in version 1.1 of the specification in , the CDC has evolved to support a wide range of devices, including modems, ISDN terminal adapters, telephones, Ethernet controllers, and networking adapters, by providing models for both legacy and modern communication protocols. The latest revision, version 1.2 released in May 2025, incorporates errata and enhancements for improved interoperability, particularly in wireless mobile communications. Key subclasses include the Abstract Control Model (ACM, subclass 02h) for emulating serial control in modems and devices; the Ethernet Networking Control Model (ENCM, subclass 06h) for USB-to-Ethernet adapters; and more recent additions like the Network Control Model (NCM, subclass 0Dh) and Mobile Broadband Interface Model (MBIM, subclass 0Eh) for high-speed networking and cellular data. The CDC structure typically involves a communication class interface for control elements (e.g., line coding, notifications for serial state or network connection) paired with one or more data class interfaces for actual payload transfer, supporting protocols like PPP for point-to-point networking or HDLC for ISDN channels. This class is widely supported in operating systems, such as Windows (via drivers like Usbser.sys for ACM and UsbNcm.sys for NCM), ensuring plug-and-play functionality for devices ranging from USB-to-serial converters to 5G modems. By standardizing these elements, the CDC promotes interoperability across USB ecosystems while allowing subclass-specific extensions for specialized applications like multi-channel ISDN or ATM cell transport.

Overview

Definition and purpose

The USB Communications Device Class (CDC) is a standardized composite device class within the Universal Serial Bus (USB) framework, comprising the Communication Device Class (base class code 02h) for control functions and the CDC-Data Class (base class code 0Ah) for data interfaces. This structure allows USB devices to multiplex multiple communication functions, such as serial ports, modems, and networking capabilities, over a single USB connection. The primary purpose of the USB CDC is to enable USB-connected devices to emulate established legacy communication interfaces, including serial ports and Ethernet networking, while also accommodating emerging protocols in a vendor-neutral manner. By defining common protocols and descriptors, it allows these devices to operate without requiring proprietary drivers, facilitating seamless integration with host systems for and data transfer applications. Key benefits of the USB CDC include reduced development costs for drivers, enhanced interoperability across diverse host platforms, and support for various USB transfer types—such as bulk for high-throughput data, interrupt for notifications, and control for commands—to handle communication efficiently. Developed by the (USB-IF) to extend beyond simpler classes like Human Interface Devices (HID) or , it standardizes communication device support in USB ecosystems. For instance, subclasses like the Abstract Control Model (ACM) enable emulation in a standardized way.

Scope and compatibility

The USB Communications Device Class (CDC) defines a standardized for integrating communication devices into the Universal Serial Bus (USB) ecosystem, primarily encompassing telecommunication services such as (PSTN) modems, (ISDN) adapters, fax machines, telephony devices, and emulations, as well as medium-speed networking interfaces including Ethernet and [Asynchronous Transfer Mode](/page/Asynchronous Transfer Mode) (ATM). This scope deliberately avoids high-level application protocols and excludes real-time streaming applications like audio or video, which are handled by other USB device classes such as Audio or Video. The class focuses on enabling the transport of communication data and control signals over USB without redefining underlying communication standards, allowing devices to leverage existing protocols like V.25ter for modems or HDLC for ISDN. CDC is compatible with USB Specification versions 1.1 and later, including full-speed (12 Mbps) and high-speed (480 Mbps) operations defined in USB 2.0, as well as SuperSpeed and higher rates in USB 3.x and through tunneling mechanisms that preserve . While inherently across USB revisions, the class is optimized for bulk transfer endpoints, which provide reliable, non-real-time data movement suitable for most CDC applications; data interfaces also support isochronous transfers where appropriate. However, CDC relies on host software for and is not designed for applications requiring guaranteed like synchronized , which use dedicated classes. Implementation of CDC devices depends on host operating system support for standardized class drivers, such as those provided in Windows, , and macOS, to interpret CDC descriptors and interfaces without custom firmware. Additionally, CDC can be combined in composite devices with other USB classes, for example, pairing communication interfaces with (HID) for control functions, as permitted by the USB composite device framework. The class is governed by the (USB-IF), with its core requirements outlined in the "Universal Serial Bus Communications Device Class Specification," initially released as version 1.1 in 1999.

History and development

Initial specification

The USB Communications Device Class (CDC) was developed by the (USB-IF), established in 1995, during the late 1990s to establish a standardized approach for communication over USB, responding to the increasing demand for integrating modems, ISDN adapters, fax machines, and early networking devices with personal computers and embedded systems. This effort addressed the fragmentation caused by proprietary connection methods prevalent in emerging mobile phones and personal digital assistants (PDAs), which often relied on custom serial interfaces for data transfer and synchronization. The initial specification, version 1.0, was approved by the Device Working Group (DWG) on May 8, 1998, providing a core framework that defined separate interfaces for communication control and data transport, suitable for both PC hosts and resource-constrained embedded applications. Building on the foundational USB architecture, the specification emphasized abstract control models to emulate legacy serial communications, such as RS-232 ports, ensuring backward compatibility with established software ecosystems for telephony and data exchange. Development of the CDC began with early drafts in December 1996, influenced by international standards like V.25ter for asynchronous modem command sets, which informed the handling of control signals and dialing procedures in USB contexts. The USB-IF's formation in created the collaborative structure necessary for such device class definitions, enabling contributions from major industry players including , , and to prioritize over vendor-specific implementations. This initial release laid the groundwork for subsequent subclasses, such as the Abstract Control Model (ACM), which further refined emulation.

Revisions and extensions

The USB Communications Device Class (CDC) specification underwent its first major revision with version 1.1, released in January 1999, which introduced enhancements for better handling of composite devices by defining how multiple interfaces could be grouped and associated within a single device configuration. This revision also included minor clarifications and fixes to the Abstract Control Model (ACM) and Ethernet Control Model (ECM) subclasses, improving compatibility and reducing ambiguities in descriptor usage for serial and networking applications. Version 1.2 of the CDC specification was originally released in January 2011, with the latest revision in May 2025, incorporating the Wireless Mobile Communications (WMC) subclass version 1.1 to support mobile broadband and wireless networking devices more effectively. This update added the Network Control Model (NCM) subclass, initially specified in version 1.0 in April 2009, to enable higher-throughput Ethernet-like networking over USB, particularly optimized for SuperSpeed (USB 3.x) interfaces by aggregating multiple packets into single transfers for improved efficiency. Subsequent errata and Engineering Change Notices (ECNs) through April 2025 addressed SuperSpeed compatibility issues, such as bulk transfer optimizations and descriptor alignments. Key extensions to the CDC framework include the NCM subclass, which was further refined in version 1.1 (April 2025) to support multi-gigabit Ethernet speeds over USB. Related but distinct from core CDC subclasses, the Interface Model (MBIM) specification, released in November 2011, builds on NCM principles for cellular modems, providing a standardized control model for IP-based mobile data connections while maintaining separation as a dedicated device class. Post-2020 developments have focused on incremental ECNs rather than full revisions, integrating CDC functionality with tunneling protocols to leverage higher speeds (up to 40 Gbps) for legacy CDC devices without major protocol changes, while addressing optimizations and challenges in low-power scenarios. These updates ensure broad host support in modern operating systems, such as Windows and , for emerging high-speed networking use cases.

Technical specifications

Base classes and interfaces

The USB Communications Device Class (CDC) establishes a foundational for communication devices through two primary base classes that define the core interfaces for and handling. The Communications and CDC base class, identified by the class code 02h, is designated for the communication interface responsible for managing device operations, including command issuance, control, and notifications such as line changes or updates. This enables the host to configure and monitor the device's communication functions via control transfers, ensuring standardized interaction without subclass-specific protocols at the base level. Complementing the control aspect, the CDC-Data base class, with class code 0Ah, applies to the data class that facilitates the actual transmission of user data, such as serial streams or network packets, independent of other USB classes. This base class supports generic data exchange and is typically assigned a subclass code of 00h to indicate no additional class-specific data protocol, allowing flexibility for various communication scenarios while relying on or isochronous transfers for reliability and . The separation of these base classes allows CDC devices to modularly separate management from delivery, promoting across different host systems. In terms of interface structure, a standard CDC function comprises two interfaces: the communications interface (using base class 02h) for control operations and the interface (using base class 0Ah) for flow. These interfaces are often grouped within a single USB configuration using an Interface Association Descriptor (IAD) in composite devices, which associates the pair to simplify host enumeration and driver binding. The communications interface includes class-specific functional descriptors, such as headers, to outline supported capabilities, while the data interface employs standard endpoint descriptors for transfer pipes. This dual-interface model ensures that control signaling does not interfere with high-throughput paths, with alternate interface settings available to adjust dynamically if needed. Endpoint usage in CDC devices follows USB conventions tailored to the class requirements, with 0 serving as the default control for setup requests and class-specific commands across both interfaces. The communications interface may incorporate an optional IN to deliver asynchronous notifications from the device to , such as serial state changes or events, enabling responsiveness without polling. For the data interface, bidirectional communication relies on paired bulk s—an IN for from device to host and an OUT for the reverse—optimized for reliable, non- transfers; isochronous s can substitute for time-sensitive applications like audio over USB. This configuration minimizes in control operations while maximizing throughput for , with short packets used to delineate logical segments in multi-packet transmissions. Subclass specifications may extend these base classes with additional functional descriptors or protocols, but the core architecture remains consistent for all CDC implementations.

Descriptors and requests

The USB Communications Device Class (CDC) employs specific class-specific descriptors to define communication interfaces and endpoints during device enumeration, enabling hosts to recognize and configure the device's capabilities. These descriptors are embedded within standard USB interface and endpoint descriptors, using the class code 0x02 for communication interfaces and 0x0A for associated data interfaces. The core structures are defined in CDC v1.1 (1999), with the latest revision v1.2 (May 2025) incorporating errata and enhancements for improved interoperability, particularly in wireless mobile communications, without altering the fundamental descriptor formats. Key descriptors include the CS_INTERFACE descriptor (bDescriptorType 0x24), which encapsulates functional descriptors for communication subclass capabilities, and the CS_ENDPOINT descriptor (bDescriptorType 0x25) for notification endpoints. The CS_INTERFACE begins with a mandatory Header Functional Descriptor (bDescriptorSubtype 0x00), containing bcdCDC to indicate the CDC specification release, such as 0x0120 for version 1.2. Subsequent functional descriptors vary by subclass; for instance, the Call Management Functional Descriptor (bDescriptorSubtype 0x01) includes a bmCapabilities bitfield where bit 0 indicates call management handled by the communication interface and bit 1 specifies handling by the data interface, along with bDataInterface identifying the linked data interface number. The Abstract Control Management Functional Descriptor (bDescriptorSubtype 0x02), used in subclasses like the Abstract Control Model (ACM), features a bmCapabilities bitfield that signals support for specific requests, such as bit 0 for SET_LINE_CODING and GET_LINE_CODING (along with SET_CONTROL_LINE_STATE and ) to manage serial line parameters. A Functional Descriptor (bDescriptorSubtype 0x06) groups multiple interfaces under a master interface for coordinated operation, listing slave interface numbers in a . For networking subclasses like , additional descriptors such as the Ethernet Networking Functional Descriptor (bDescriptorSubtype 0x0F) include iMACAddress for the device's and bmEthernetStatistics for supported statistics types. The CS_ENDPOINT descriptor applies to endpoints for asynchronous notifications, such as serial state changes, with bNotification set to values like 0x20 for NETWORK_CONNECTION. During enumeration, the process starts with the device descriptor declaring bDeviceClass 0x02 (or specified at the level for composite devices), followed by descriptors where the host parses descriptors to identify CDC classes, then extracts and validates the CS_INTERFACE functional descriptors to determine subclass support and capabilities. If descriptors are malformed or unsupported, the host may fail . CDC defines both standard and class-specific requests to manage operation, primarily directed to the communication 0. Standard requests include GET_LINE_CODING (bRequest 0x21), which retrieves a 7-byte structure comprising dwDTERate (little-endian uint32 for rate), bCharFormat (0 for 1 stop bit, 2 for 2 stop bits), bParityType (0 for none, 1 for odd, etc.), and bDataBits (5 to 8 typically), allowing hosts to query parameters. SET_LINE_CODING (bRequest 0x20) sets these same parameters to configure the line for . SET_CONTROL_LINE_STATE (bRequest 0x22) uses a 2-byte wValue where bit 0 asserts (DTR) and bit 1 asserts Request To Send (RTS), emulating signals to readiness. Class-specific requests provide extensibility; SEND_ENCAPSULATED_COMMAND (bRequest 0x00) transmits vendor-defined commands in a wLength to the device, while GET_ENCAPSULATED_RESPONSE (bRequest 0x01) retrieves the corresponding response. In networking contexts like , SET_ETHERNET_MULTICAST_FILTERS (bRequest 0x40) configures addresses via an array of 6-byte addresses to filter incoming packets. These requests support subclass-specific operations, such as Ethernet filtering in devices. Error handling in CDC relies on USB mechanisms, where devices respond to invalid or unsupported requests—such as directing SEND_ENCAPSULATED_COMMAND to a subclass without encapsulation support—by returning a on the , prompting the host to clear the stall and potentially reconfigure or abort the operation. This ensures robust and runtime interaction without violations.
BitDescriptionAbstract Control Management bmCapabilities
0Line coding and control supported1: Supports SET_LINE_CODING, GET_LINE_CODING, SET_CONTROL_LINE_STATE, and Serial_State notification
1SEND_BREAK supported1: Device can send break signals
2Network connection supported1: Supports Network_Connection notification
3-7Reserved0
This table illustrates the bmCapabilities bitfield structure for the Abstract Control Management descriptor, highlighting key serial control features.

Subclasses

Abstract Control Model (ACM)

The Abstract Control Model (ACM) is a subclass of the USB Communications Device Class (CDC) designed to emulate the behavior of traditional serial ports, such as those compliant with or V.24 standards, enabling USB devices to function as abstract endpoints without requiring specialized hardware protocols. It operates under the CDC base class code 02h with subclass code 02h, allowing devices to support UART-like operations including data transmission, flow control, and modem signaling. This model is particularly suited for legacy-compatible applications where host software expects standard serial port interactions. ACM devices incorporate specific functional descriptors to define their capabilities and interface structure. The Header Functional Descriptor specifies the CDC specification version, typically 1.10 (bcdCDC = 0110h). The ACM Functional Descriptor outlines supported features via a capabilities (bmCapabilities), including support for SET_LINE_CODING, SET_CONTROL_LINE_STATE, GET_LINE_CODING, SEND_BREAK, and SERIAL_STATE notifications (bit 1 set for ). Additional descriptors include the Call Management Functional Descriptor, which handles call setup over the Communication or Data interface (bmCapabilities indicating carrier-based or separate call support), and the Union Functional Descriptor, which designates a master Communication interface and one or more slave Data interfaces for data flow. These descriptors ensure proper and control setup between host and device. Key features of ACM include emulation of modem control signals, where the host sets (DTR) and Request to Send (RTS) via the SET_CONTROL_LINE_STATE request, and the device reports (DCD), Data Set Ready (DSR), and Ring Indicator (RI) via SERIAL_STATE notifications. Clear to Send (CTS) is handled through hardware flow control if enabled on the data interfaces. The protocol supports configurable line coding via the SET_LINE_CODING request, using a 7-byte structure: a 4-byte DWORD for baud rate (dwDTERate, supporting rates up to 2 Mbps), a byte for character format (bCharFormat: 0 for 1 stop bit, 1 for 1.5, 2 for 2), a byte for type (bParityType: 0 none, 1 odd, 2 even, 3 mark, 4 space), and a byte for data bits (bDataBits: typically 5-8 or 16). Notifications like SERIAL_STATE (type 20h) inform the host of status changes, including a 2-byte UART state bitmap including RX carrier (), TX carrier (DSR), break condition, ring signal detection, and error indicators (framing, , overrun). This setup facilitates applications such as debug consoles, industrial serial interfaces, and modem emulation. Representative implementations of ACM include USB-to-RS-232 adapters and microcontroller-based serial bridges. For instance, the series from Espressif Systems utilizes ACM for its native USB serial interface, enabling direct console access and data transfer without external converters. Similarly, microcontrollers from support ACM in their USB device stacks for virtual COM port functionality, commonly used in embedded debugging and sensor interfacing. These examples highlight ACM's role in bridging USB with legacy serial ecosystems.

Ethernet Networking Control Model (ECM)

The Ethernet Networking Control Model (ECM) is a subclass of the USB Communications Device Class (CDC) designed to enable Ethernet-style networking over USB connections, allowing devices to bridge USB to Ethernet networks by transporting raw s. It uses the CDC base class code 02h with subclass code 06h to identify ECM-compliant interfaces, providing a standardized way for hosts to recognize and configure such devices without proprietary drivers. This model focuses on low-level Ethernet frame handling, leaving higher-layer protocol processing, such as , to the host operating system. ECM devices typically include three key functional descriptors on the communication class interface: the Ethernet Networking Functional Descriptor, which specifies the device's (often index 0x00 for the primary address), (up to 1514 bytes excluding ), and statistics reporting intervals; the Union Functional Descriptor, defining the master communication interface (usually index 0) and one or more subordinate data interfaces (e.g., index 1); and the Ethernet Multicast Filtering Functional Descriptor, which supports up to 114 filter sets for efficient packet filtering. These descriptors enable the host to query and set network parameters during , ensuring compatibility with standard USB class drivers. Data transfer in ECM occurs via raw Ethernet II frames (without the FCS/CRC field) exchanged over dedicated bulk IN and bulk OUT endpoints on the data class , supporting full-speed USB (up to 12 Mbps) and high-speed USB (up to 480 Mbps) but not SuperSpeed modes. The host manages filtering through the class-specific request SET_ETHERNET_MULTICAST_FILTERS (bRequest 0x40), which programs up to four 6-byte filters or a full bitmask for , and queries status with GET_ETHERNET_POWER (bRequest 0x42). Connection status changes, such as link up/down or speed detection, are notified to the host via endpoints using CDC notifications like NETWORK_CONNECTION (0x2B). Unlike Microsoft-specific alternatives like , ECM provides an open-standard approach without built-in IP stack emulation, relying on the host's networking stack (e.g., NDIS on Windows) for bridging and routing. Common applications include USB Ethernet adapter dongles for legacy ports and early tethered hotspots from mobile devices, where ECM offered a simple, driverless solution for basic 10/100 Mbps networking before higher-throughput models emerged.

Network Control Model (NCM)

The Network Control Model (NCM) is a subclass of the (CDC) designed for high-speed networking over , particularly suited for aggregating or in modern devices. It serves as an extension for and later interfaces, enabling efficient transfer of multiple network datagrams within a single to support speeds exceeding 1 Gbps. This model addresses the limitations of earlier subclasses by optimizing for bulk transfers in high-bandwidth scenarios, such as tethered broadband connections. NCM devices utilize specific descriptors to define their capabilities. The mandatory NCM Functional Descriptor specifies parameters like the maximum number of datagrams per Network Transfer Block (NTB) and the block length, allowing hosts to configure optimal transfer sizes. An optional Union Descriptor associates the communications class with the data interface, facilitating composite device operation. Central to NCM is the NTB format, which encapsulates a header followed by multiple Ethernet frames or datagrams, reducing protocol overhead by batching data into 16-bit (up to 64 KiB) or 32-bit (up to 4 GiB) structures selectable at runtime. The protocol involves class-specific requests for and . The SET_NTB_INPUT_SIZE request allows to set the maximum NTB size for incoming data , with a minimum of 2048 bytes recommended for efficiency. Similarly, the GET_MAX_DATAGRAM_SIZE request retrieves the device's supported maximum size, aiding in MTU negotiation. NCM supports IPv4 and offloads, including and Neighbor Solicitation handling, to minimize host processing. For cellular applications, NCM integrates with the Mobile Broadband Interface Model (MBIM) for control signaling, where NCM handles the high-speed data path while MBIM manages commands. Compared to the Ethernet Networking Control Model (ECM), NCM significantly reduces overhead by encapsulating multiple Ethernet frames in one USB transfer, avoiding per-frame interrupts and headers that limit ECM to lower throughputs. This aggregation makes NCM more power-efficient, particularly for battery-powered devices, through features like selective wake and offload mechanisms. It is backward compatible with USB 2.0 High-Speed via fallback modes resembling ECM, ensuring interoperability with legacy hosts. The NCM specification originated as a dedicated subclass document released in version 1.0 on November 24, 2010, building on earlier CDC extensions. It gained traction with the advent of USB 3.0 in 2008, finding adoption in USB tethering for smartphones, Wi-Fi dongles, and Ethernet adapters requiring gigabit performance. The latest revision, NCM 1.1 released on April 3, 2025, extends support to multi-gigabit Ethernet over USB 4, enhancing capabilities for up to 120 Gbps in asymmetric configurations while maintaining compatibility with prior versions.

Mobile Broadband Interface Model (MBIM)

The Mobile Broadband Interface Model (MBIM) is a subclass of the USB Communications Device Class (CDC) designed for control and management of mobile broadband devices, such as cellular modems supporting , , and . It uses subclass code 0Eh under base class 02h, providing a standardized, abstract interface for operations like device registration, connection management, handling, and USSD commands, replacing vendor-specific AT commands. MBIM is typically paired with NCM for the high-speed data transfer path in composite devices. MBIM employs a message-based over bulk endpoints (control IN/OUT) for command/response exchanges, with notifications for events like signal strength changes or connection status via endpoints. Key functional descriptors include the MBIM Functional Descriptor specifying the supported (e.g., 1.0 bcdMBIM=0100h), and a Union Descriptor linking the communication and data interfaces. The supports abstract commands for selection, (e.g., PIN entry), packet filters, and configuration, ensuring interoperability across operating systems. MBIM 2.0, released in 2013, added support for advanced features like satellite broadband and extended diagnostics, while MBIM 1.0 (2011) focused on basic cellular control. It is natively supported in and later via the usbmbim.sys driver, and in via the cdc_mbim module, enabling plug-and-play for USB modems and tethered devices. This subclass promotes vendor-neutral development for mobile communications, complementing NCM for data and ensuring secure, efficient control in modern wireless ecosystems.

Implementations

Device-side implementation

Implementing the USB Communications Device Class (CDC) on the device side involves developing that enables a or to act as a peripheral, presenting communication interfaces such as virtual serial ports or network adapters to a USB host. This requires integrating a USB device stack that handles enumeration, descriptor management, and data transfer over defined endpoints, in accordance with the CDC specification released by the (USB-IF). Firmware stacks for USB CDC implementation typically leverage open-source or vendor-provided libraries to abstract low-level USB protocol details. Popular options include TinyUSB, an open-source cross-platform stack designed for resource-constrained embedded systems, which supports CDC subclasses like Abstract Control Model (ACM) through modular class drivers for endpoint configuration and request handling. Vendor-specific SDKs, such as STMicroelectronics' STM32 USB Device Library or Azure RTOS USBX, provide CDC class implementations tailored to their microcontroller families, including functions for buffer allocation and interrupt-driven data transfer. Microchip's USB Device Stack offers a layered framework with CDC function drivers that manage communication class requests and data buffering. These stacks handle USB enumeration by responding to host setup packets and configuring bulk or interrupt endpoints for data and control transfers, typically using 64-byte or 512-byte buffers to align with USB full-speed or high-speed packet sizes. Hardware requirements for USB CDC devices center on a with an integrated USB peripheral supporting at least full-speed operation (12 Mbps), as specified in the USB 2.0 core standard, to meet CDC's minimum throughput needs for communication tasks. The peripheral must include dedicated endpoints for , IN/OUT, and optional transfers, along with sufficient on-chip (at least 1-2 ) for descriptor storage and double-buffering to prevent data underruns during transfers. External components like crystals for precise clocking (48 MHz typical) and ESD protection on D+/D- lines are essential for reliable signaling, while power delivery must adhere to USB device limits (up to 500 mA at 5V). The implementation process begins with defining the device, configuration, and interface descriptors in firmware to specify the CDC class (0x02) and subclass (e.g., 0x02 for ACM), including endpoint addresses for control and data pipes. Developers then implement request handlers to process standard USB commands like GET_DESCRIPTOR and class-specific ones such as SET_LINE_CODING for ACM, parsing parameters like baud rate and data bits to configure the virtual serial state. A state machine manages line control signals (e.g., DTR/RTS) and packet assembly/disassembly, often using interrupts for endpoint events to forward data between the USB layer and application UART or network buffers. Buffer management ensures in-order delivery, with FIFO queues handling up to 512-byte packets for high-speed modes. Key challenges include supporting composite device configurations, where CDC interfaces share the USB bus with other classes like HID or MSC, requiring careful endpoint allocation and descriptor union to avoid conflicts during enumeration. Ensuring compliance involves using USB-IF tools like the USB Compliance Verifier (USBCV) to validate descriptor responses, endpoint behavior, and suspend/resume handling against the CDC specification. For high-throughput subclasses like Network Control Model (NCM), power budgeting becomes critical, as sustained data rates near 480 Mbps demand efficient DMA transfers and low-power states to stay within USB power envelopes. Representative examples illustrate practical deployments. On boards like the Leonardo, based on the ATmega32u4 , the built-in USB AVR implements CDC ACM as a virtual COM port, handling serial data via the Serial class without external converters. For Ethernet tethering, the in gadget mode uses kernel modules like g_ether to expose a CDC Ethernet Control Model () interface, configuring the USB controller to bridge host networking over a single cable.

Host-side support

Windows provides native support for USB Communications Device Class (CDC) devices through built-in drivers since Windows 2000. The usbser.sys driver handles the (ACM) subclass, enabling serial communications for modems and similar devices without additional installation for standard class-compliant hardware. For custom vendor ID (VID) and product ID (PID) combinations, an information file (INF) must be provided to map the device to the appropriate driver, ensuring proper enumeration. For networking subclasses like Ethernet Control Model (ECM), Windows uses rndis.sys as a fallback driver, which supports Remote Network Driver Interface Specification (RNDIS) devices often implemented for compatibility. Full support for the Network Control Model (NCM) subclass, including high-speed networking, is available via the UsbNcm.sys driver in Windows 8.1 and later versions, allowing devices to operate at USB 3.x speeds when compliant. Linux kernels include comprehensive out-of-the-box support for CDC subclasses through dedicated modules. The cdc_acm module manages ACM devices, presenting them as standard serial ports (/dev/ttyUSB*), while cdc_ether handles and basic NCM for Ethernet-like functionality. Advanced NCM support is provided by the cdc_ncm module, enabling high-throughput networking. Device enumeration occurs automatically via rules, which detect class descriptors and load the appropriate drivers without user intervention. macOS integrates CDC support via the IOKit , with built-in kernel extensions for ACM (com.apple.driver.usb.cdc.acm) and ECM subclasses, allowing seamless recognition as or network interfaces. For NCM, native support is available since macOS 10.15 () using the built-in com.apple.driver.usb.cdc.ncm , improving compatibility for modern high-speed devices. Other operating systems offer varying levels of CDC integration. supports CDC devices in USB host mode for tethering applications, primarily using or for reverse tethering, with libraries like usb-serial-for-android enabling ACM access in custom apps. Embedded real-time operating systems (RTOS), such as , provide CDC host support through middleware stacks like emUSB-Host, allowing integration in resource-constrained environments. Cross-platform applications can leverage libusb, a user-space library that abstracts USB access for CDC endpoints across Windows, , and macOS, bypassing kernel drivers for direct control. Common challenges in host-side CDC implementation include the prevalence of legacy , a Microsoft-proprietary protocol that lacks the security features of standard CDC subclasses and has prompted patches to disable it by default due to vulnerabilities. Custom extensions to CDC specifications require (USB-IF) certification to ensure interoperability and compliance, involving rigorous testing of descriptors and behaviors. Debugging often relies on tools like USBlyzer, a protocol analyzer that captures and decodes USB traffic to diagnose enumeration failures or data issues.

Applications

Serial and modem devices

USB-to-RS-232 and RS-485 adapters utilizing the USB Communications Device Class (CDC) enable connectivity for industrial automation systems, such as computer numerical control (CNC) machines and programmable logic controllers (PLCs), by emulating traditional interfaces over USB. These adapters convert USB signals to or electrical levels, supporting baud rates up to 921.6 kbps and facilitating data exchange in environments requiring robust, long-distance without the need for dedicated serial ports on modern hosts. COM ports created via CDC allow legacy software designed for physical serial connections to interface seamlessly with USB devices, preserving compatibility for applications in and control systems. In modem applications, the CDC Abstract Control Model (ACM) subclass emulates (PSTN) and (ISDN) modems, enabling USB devices to mimic analog and digital telephony interfaces for dial-up connections and data transfer. AT commands, standardized under ITU-T V.25ter, are supported through encapsulated requests on the Communication Class interface, allowing hosts to issue configuration, dialing, and control instructions to the device as if connected via a traditional modem. The Telephone Control Model (TCM) subclass extends this to fax and voice telephony, managing call states, ringer parameters, and line monitoring for multi-line USB telephone devices over PSTN lines. Embedded systems leverage CDC for debug interfaces in () devices, where microcontrollers expose a virtual console over USB for and development without additional . For instance, in ESP8266-based modules, USB-to- adapters bridge the UART console to a host PC, simulating a CDC ACM port for command-line interaction and . This approach also supports upgrading equipment, such as industrial sensors or controllers, by replacing physical cabling with USB connections, reducing wiring complexity while maintaining protocol compatibility. Key advantages of CDC in these scenarios include plug-and-play functionality, where devices are automatically recognized as serial ports by host operating systems without custom drivers, serving as a direct replacement for physical cables in field deployments. Composite USB configurations further enhance versatility by supporting multiple virtual ports over a single connection, allowing simultaneous emulation for data, control, and debug streams in resource-constrained devices. Representative examples include the Prolific PL2303 chip, widely used in USB-to-RS-232 adapters for its CDC-compliant bridge that handles UART-to-USB conversion with 96-byte buffers and compatibility across Windows, , and macOS. In mobile applications, smartphones like those with processors expose diagnostic ports via CDC ACM, enabling service tools to access and system logs over USB without proprietary interfaces.

Networking and telephony devices

USB Ethernet adapters leverage the Ethernet Control Model () and Network Control Model (NCM) subclasses of the USB CDC to provide RNDIS-free network connectivity, encapsulating Ethernet frames for transport over USB bulk endpoints without requiring proprietary drivers. ECM uses a simple header to prepend Ethernet frames, supporting command packets for link management like echo requests and suspend hints, while NCM aggregates multiple frames into network transfer blocks (NTBs) up to 64 KiB for improved efficiency in high-throughput scenarios. These models enable seamless integration in and higher docks, where NCM supports jumbo frames and offloads like computation to achieve speeds, as seen in adapters like the Plugable USB3-E1000. Smartphone USB tethering commonly employs NCM for high-speed data sharing, with devices using CDC-NCM to present a virtual Ethernet interface upon enabling Personal Hotspot, allowing direct connectivity to the host without additional configuration. devices similarly adopt CDC-NCM for USB tethering, aggregating cellular data into Ethernet-like packets for efficient transfer to hosts like systems. and dongles occasionally incorporate CDC interfaces for control and configuration, such as status notifications or updates, though primary data paths often rely on vendor-specific protocols. In telephony applications, the Wireless Handset Control Model (WHCM) subclass facilitates USB connections for cordless handsets and basic functions, using subclass code 0x08 to manage call setup and audio routing in compliance with CDC specifications. Cellular modems for and leverage the Mobile Broadband Interface Model (MBIM) as a CDC extension (subclass 0x0E), enabling multiplexed sessions over a single USB channel for high-speed data, with support for up to 256 concurrent connections via VLAN-like subinterfaces. modems, such as the X24 LTE and X series variants, implement MBIM over USB to deliver peak downloads exceeding 2 Gbps, integrating seamlessly with host drivers for access. VoIP integration utilizes CDC's call management capabilities, allowing USB devices to handle signaling for voice-over- sessions through standardized control interfaces. Advanced deployments include the ATM Networking Control Model (subclass 07h) for legacy telecommunications infrastructure, transporting cells over USB to bridge older telco equipment with modern hosts. In docking stations, NCM enables aggregation alongside other peripherals, supporting large send offloads and tagging for enterprise connectivity. IoT gateways employ CDC subclasses like ECM or NCM to aggregate sensor data from multiple devices into packets over USB, facilitating processing in resource-constrained environments. The , configured as a USB gadget, uses CDC-ECM to emulate an Ethernet device, enabling headless networking and data tunneling for IoT prototypes. Post-2020 trends highlight CDC's role in , where USB modems using MBIM provide low-latency data offload for distributed processing, with market growth driven by adoption reaching projected values of over USD 50 billion by 2030. Compatibility with extends NCM capabilities to multi-gigabit speeds, supporting asymmetric tunneling up to 120 Gbps for advanced in edge and scenarios.

References

  1. [1]
    Class definitions for Communication Devices 1.2 - USB-IF
    May 28, 2025 · Class definitions for Communication Devices 1.2. 05/28/2025 Specification. Device Class Specification. CDC1.2_WMC1.1_012011_0.zip. 3.82 MB.
  2. [2]
    Defined Class Codes | USB-IF
    Base Class 0Ah (CDC-Data). This base class is defined for devices that conform to the Communications Device Class Specification found on the USB-IF website.
  3. [3]
    [PDF] Universal Serial Bus Class Definitions for Communication Devices
    Jan 19, 1999 · This version 1.1 of this class specification is intended for product design. Every attempt has been made to ensure a consistent and ...
  4. [4]
    USB Device Class Drivers Included in Windows - Microsoft Learn
    Jun 12, 2025 · The USB-IF defines those classes and their specifications. Each device class is identified by the IHV in device descriptors in the firmware, ...<|control11|><|separator|>
  5. [5]
    USB 2.0 Specification
    Jun 3, 2025 · The Original USB 2.0 specification released on April 27, 2000 · USB 2.0 Adopters Agreement · Errata to the USB 2.0 specification as of December 7, ...Missing: Communications | Show results with:Communications<|control11|><|separator|>
  6. [6]
    About USB-IF
    USB-IF is a non-profit supporting the advancement of USB technology, formed by companies that developed the USB specification.Missing: date | Show results with:date
  7. [7]
    [PDF] AN758: Implementing USB Communication Device Class (CDC) on ...
    ▫ A working knowledge of the C programming language. ▫ Familiarity with the USB 2.0 specification and terms and abbreviations defined by the USB specification.
  8. [8]
    The Evolution of USB (Universal Serial Bus) Standards - Copperpod IP
    Apr 29, 2021 · In the 1990s, office desktops were a tangled mess of serial, parallel, and proprietary cables. Universal Serial Bus (USB) changed all of ...
  9. [9]
    The Birth of USB devices and standards: A Brief History
    The first USB specification was developed in 1995 by a group of companies, including IBM, Microsoft, Compaq, and Intel. The primary goal was to create a ...
  10. [10]
  11. [11]
    Network Control Model Devices Specification v1.0 and errata and ...
    Nov 24, 2010 · Network Control Model Devices Specification v1.0 and errata and Adopters Agreement. 11/24/2010. Specification. Device Class Specification.Missing: 2005 | Show results with:2005
  12. [12]
    [PDF] Universal Serial Bus Communications Class Subclass ... - USB-IF
    Apr 3, 2025 · This subclass specification includes specifications for USB-connected external data network adaptors that model IEEE 802 family Layer 2 ...
  13. [13]
    Mobile Broadband Interface Model v1.0 Errata - USB-IF
    Mobile Broadband Interface Model v1.0 Errata -1 and Adopters Agreement 12/26/2012 Specification Device Class Specification
  14. [14]
    How to implement the USB Device CDC (VCOM) in STM3...
    Oct 26, 2023 · This article presents a tutorial on how to implement the USB Device CDC in the STM32 using the Azure USBX package.
  15. [15]
  16. [16]
    cdce(4)
    ### Summary of CDC ECM Details from cdce(4)
  17. [17]
    [PDF] AN00131: USB CDC-ECM Class for Ethernet over USB - XMOS
    Jul 1, 2025 · For Ethernet-style networking over USB, one of the following Subclass specifications is used: 1. Ethernet Control Model (ECM). 2. Ethernet ...
  18. [18]
    hathach/tinyusb: An open source cross-platform USB stack ... - GitHub
    TinyUSB is an open-source cross-platform USB Host/Device stack for embedded system, designed to be memory-safe with no dynamic allocation and thread-safe.
  19. [19]
    [PDF] USB Device Stack User Guide - Microchip Technology
    The USB Device Stack is a framework for developing USB devices, using function drivers and structured in layers, supporting different USB device classes.Missing: firmware | Show results with:firmware
  20. [20]
    [PDF] AN4879 - Introduction to USB hardware and PCB guidelines using ...
    Aug 10, 2016 · This application note gives an overview of the USB peripherals implemented on STM32 MCUs. It also provides hardware guidelines for PCB design, ...
  21. [21]
    [PDF] USB CDC Class as Virtual Serial Port - XMOS
    This application note shows how to create a USB device compliant to the standard USB Communications. Device Class (CDC) on an XMOS multicore microcontroller ...Missing: influenced ITU-
  22. [22]
    STM32 USB CDC Example | Communicate with PC without UART
    Why is USB CDC better than UART for PC communication? USB CDC provides faster data rates, does not require external hardware, and is recognized as a ...
  23. [23]
    Making USB Device With STM32 + TinyUSB - ejaaskel
    Aug 3, 2024 · Adding TinyUSB setup and device task functions ... The CDC Dual Ports example demonstrates a CDC class USB device that creates two serial ports.
  24. [24]
    [PDF] USB CDC-ECM Class for Ethernet over USB - XMOS
    For Ethernet-style networking over USB, one of the following Subclass specifications is used: 1. Ethernet Control Model (ECM). 2. Ethernet Emulation Model (EEM) ...
  25. [25]
    Compliance | USB-IF
    The USB-IF has instituted a Compliance Program that provides reasonable measures of acceptability. The Compliance Program uses multiple test specifications.Compliance Tools · USB-IF Compliance Update · USB4® Compliance
  26. [26]
    USB Communications Class Subclass Specifications for Network ...
    USB Communications Class Subclass Specifications for Network Control Model Devices v1.1. 05/30/2025. Device Class Specification.
  27. [27]
    raspberrypi/rpi-usb-gadget: Turn your Raspberry Pi into a ... - GitHub
    Turn your Raspberry Pi into a USB Ethernet gadget (CDC-ECM/RNDIS) for headless networking, Internet sharing, and remote development over a single USB cable.
  28. [28]
    USB Serial Driver (Usbser.sys) - Windows drivers - Microsoft Learn
    Jun 12, 2025 · Use the Microsoft-provided USB driver (Usbser.sys) for your communications and communications device class (CDC) control devices.Usbser.sys installation · Configure selective suspend...Missing: host | Show results with:host
  29. [29]
    Linux ACM driver v0.16 - The Linux Kernel documentation
    The drivers/usb/class/cdc-acm.c drivers works with USB modems and USB ISDN terminal adapters that conform to the Universal Serial Bus Communication Device ...
  30. [30]
    USB support - The Linux Kernel documentation
    Linux ACM driver v0.16 · Authorizing (or not) your USB devices to connect to the system · ChipIdea Highspeed Dual Role Controller Driver · DWC3 driver · EHCI driver ...
  31. [31]
    IOKit | Apple Developer Documentation
    Devices supported on macOS 11 and later require DriverKit. Use IOKit in your apps and services to discover and use devices. Topics ...IOKit Fundamentals · IOKit Functions · IOKit Constants · IOKit Data Types
  32. [32]
    CDC-NCM Class - emUSB-Device - SEGGER
    macOS has full support for CDC-NCM. Starting with Windows 10 since May 2019 (build 18362) no driver is needed, for old Windows versions a third party CDC-NCM ...
  33. [33]
    USB host overview | Connectivity - Android Developers
    May 23, 2024 · When your Android-powered device is in USB host mode, it acts as the USB host, powers the bus, and enumerates connected USB devices.
  34. [34]
    USB Host CDC - FreeRTOS
    Mar 21, 2012 · Hello all, I have a project that requires a TI Stellaris board to be a host connected to a USB hub with 4 devices connected to the hub also.USB Device CDC +FreeRTOSlwIPDemo_Rowley_ARM7 - USB CDC send problem - FreeRTOSMore results from www.freertos.org
  35. [35]
    libusb
    It is version-agnostic: All versions of the USB protocol, from 1.0 to 3.1 (latest), are supported. What platforms are supported? Linux, macOS, Windows ...Missing: CDC | Show results with:CDC
  36. [36]
    Greg Kroah-Hartman: [PATCH] USB: disable all RNDIS ... - LKML
    Nov 23, 2022 · The Microsoft RNDIS protocol is, as designed, insecure and vulnerable on any system that uses it with untrusted hosts or devices.
  37. [37]
  38. [38]
    USB-to-Serial Converters - Moxa
    Moxa's UPort USB-to-serial converters provide computers with high performance, industrial-grade connections for up to 16 serial devices over a single USB port.
  39. [39]
  40. [40]
    AN00124: USB CDC Class as Virtual Serial Port v3.1.0 - XMOS
    Jul 14, 2025 · This application note shows how to create a USB device compliant to the standard USB Communications Device Class (CDC) on an XMOS device.
  41. [41]
  42. [42]
    What is VCP communication, and why is it the right choice for you?
    The significant advantage of VCP technology is that it enables this universal communication while taking advantage of USB capabilities: immediate recognition ( ...Missing: CDC composites
  43. [43]
    How to achieve communication over 2 virtual ports USB CDC
    Jul 11, 2025 · One virtual COM port is dedicated to transmitting sensor data, while the other is reserved for debugging purposes. This approach simplifies the ...Missing: advantages plug- play
  44. [44]
    Multiple virtual COM ports (CDC ACM connections) via USB
    Feb 5, 2024 · The user wants to enable two virtual COM ports via USB, one for debug and one for software, but has trouble accessing the second port and ...Question about the USB CDC ACM Example - Nordic DevZoneQuestion about the USB CDC ACM Example - Nordic Q&AMore results from devzone.nordicsemi.comMissing: legacy | Show results with:legacy
  45. [45]
    PL2303GD USB CDC to Serial Bridge Controller | Prolific USA
    The PL2303GD is a USB-CDC to UART bridge controller, connecting serial devices to USB hosts. It has a USB 1.1 transceiver, 96MHz clock, and 1024 byte data ...Missing: ACM | Show results with:ACM
  46. [46]
    P1sec/QCSuper - GitHub
    In order to use --usb-modem <value> flag, the Qualcomm diagnostic port must be enabled on the corresponding phone, otherwise said the phone should have been USB ...Qcsuper · Installation · Usage Notice
  47. [47]
    [PDF] CDC EEM - USB-IF
    Dec 8, 2004 · This document is a USB specification for Ethernet Emulation Model devices, version 1.0, dated February 2, 2005.<|control11|><|separator|>
  48. [48]
  49. [49]
    iOS: a journey in the USB networking stack - Synacktiv
    Apr 30, 2024 · We quickly noticed that it uses the CDC-NCM protocol (Communications Device Class - Network Control Model, one of the few protocols used by the ...foreword on tethering · quick detour on iOS USB... · Back to these CDC-NCM...
  50. [50]
    [OpenWrt Wiki] Smartphone USB tethering
    Nov 1, 2025 · Connect the smartphone to the USB port of the router with the USB cable, and then enable USB Tethering from the Android settings. Turn on the ...
  51. [51]
    ThingPulse/esp32-pendrive-s3-wifi-dongle - GitHub
    Add BLE devices via USB-BTH, support scan, broadcast, connect and other functions. Support Host to communicate and control ESP32-S series devices via USB-CDC or ...
  52. [52]
    cdc_mbim - Driver for CDC MBIM Mobile Broadband modems
    MBIM allows multiplexing up to 256 IP sessions over a single USB data channel. The cdc_mbim driver models such IP sessions as 802.1q VLAN subdevices of the ...
  53. [53]
    [DOC] MBIM extensions for 5G.docx - Microsoft Download Center
    Interface specification. This document specifies extensions to Mobile Broadband Interface Model (MBIM) for 5th generation mobile network. Revision 1.17.<|separator|>
  54. [54]
    Snapdragon X24 LTE Modem - Qualcomm
    The Snapdragon X24 LTE modem offers the world's first commercial modem to achieve 2 Gbps download speeds, plus advanced features including 7x carrier ...Breaking The Multi-Gigabit... · Expanding The Gigabit... · Compare Related Products
  55. [55]
    [PDF] PSTN120.pdf - NXP Community
    Feb 9, 2007 · This is the Universal Serial Bus Communications Class Subclass Specification for PSTN Devices, Revision 1.2, dated February 9, 2007.
  56. [56]
    CDC - USB communications device class - RIOT Documentation
    USB CDC ACM line coding setup content. More... Macros. #define ... Abstract Control Model. #define, USB_CDC_SUBCLASS_TCM 0x03. Telephone Control Model ...
  57. [57]
    [PDF] Smart IoT Wireless Sensor Node using XMEGA® AU MCU and ...
    Hereafter, the LoRa sensor node works in USB CDC mode. In the LoRa Development Utility software, click on "Find Devices" option. If the gateway board is already.
  58. [58]
    5G Edge Computing Market Size | Industry Report, 2030
    The global 5G edge computing market size was estimated at USD 4743.2 million in 2024 and is projected to reach USD 51574.3 million by 2030, ...Missing: USB CDC USB4