Skip to main content
SEGGER emUSB-Device stack enabling HID MSC CDC composite USB peripheral firmware on Cortex-M targets for Indian embedded product teams

emUSB-Device for Indian USB Peripheral Product Design: HID, MSC, CDC, Composite

GSAS Editorial · · 9 min read

Building a USB peripheral looks simple until you ship one. The bit that seems trivial on the datasheet, enumerate as a device, present a class, respond to transfers, turns into weeks of work once you hit real-world host behaviour across Windows, macOS, and Linux. Suspend and resume timing, remote wakeup, hub interaction, descriptor quirks, and the subtle differences between Windows 10 and Windows 11’s enumeration sequence all conspire to make “just roll your own USB stack” a poor decision for any Indian team that intends to ship a product on schedule. The pragmatic answer is a proven commercial stack, and SEGGER emUSB-Device is the one we recommend most often.

GSAS Micro Systems is the authorized Indian engineering partner for SEGGER Microcontroller GmbH. This guide walks through what emUSB-Device gives you, how it compares to rolling your own or using a vendor SDK stack, and the specific Indian product design patterns where it earns its place.

The Indian USB peripheral landscape

Indian product engineering teams build a wide variety of USB devices:

  • HID: barcode scanners, custom input devices, game controllers, medical parameter-configuration interfaces, maintenance dongles
  • MSC (mass storage): USB sticks, SD card readers, data loggers with bulk-download interfaces, firmware-update-as-drive paradigms
  • CDC (communications): USB-serial bridges for IoT products, instrumentation interfaces, CAN-USB bridges, debug consoles exposed to a host laptop
  • Audio Class 1.0 / 2.0: USB microphones, audio interfaces, voice-capture products
  • Video Class (UVC): USB cameras, inspection endoscopes, machine-vision sensors
  • Vendor-specific bulk-transfer: test and measurement instruments, custom protocol endpoints

The common thread is that every one of these products needs to enumerate reliably on every host OS the customer might plug it into, survive the long tail of USB quirks, and do it all without tying up the engineering team for months.

What emUSB-Device actually is

emUSB-Device is SEGGER’s USB device-side stack, the counterpart to emUSB-Host, which handles the other direction. It runs on Cortex-M, Cortex-A, and Cortex-R targets and includes the following class drivers out of the box:

  • HID: standard boot protocol and report-descriptor-based custom HID
  • MSC: with pluggable storage back-end (RAM disk, SD card via emFile, NAND via emFile, custom)
  • CDC: CDC-ACM for virtual COM port, CDC-ECM for Ethernet-over-USB
  • Audio Class 1.0 and 2.0: isochronous endpoints, full sample-rate and channel configuration
  • Video Class (UVC): isochronous video streaming with descriptor builders for common formats
  • Printer Class: for label printers and similar
  • MTP: media transfer protocol for exposing file collections to host
  • RNDIS: Microsoft’s Ethernet-over-USB for Windows hosts
  • Vendor-specific bulk transfer: for custom protocols where no standard class applies

Crucially, emUSB-Device supports composite devices: multiple class interfaces on a single physical USB device. This is the feature that makes the difference between “a product with a USB port” and “a product that presents exactly the interface the customer workflow needs.”

USB speed and target silicon

emUSB-Device supports the full USB speed hierarchy available on current Cortex-M silicon:

High-speed USB 2.0 (480 Mbps) is available on parts with an integrated USB-HS PHY, STM32H7, STM32U5, NXP i.MX RT, Nordic nRF5340, some Renesas RA variants, Microchip SAM E70 and V71. For Indian teams building data-logger or imaging products that need real bandwidth to the host, high-speed is the right choice and emUSB-Device exposes it without requiring the application to know which PHY is underneath.

Full-speed USB 1.1 (12 Mbps) is the common case on most STM32F0/F1/F3/L0/L4 parts, Nordic nRF52840, and the lower-end Cortex-M0/M0+ silicon that Indian teams use for cost-sensitive consumer IoT products. Full-speed is fine for HID, CDC, and most MSC workloads where the bottleneck is elsewhere.

Low-speed USB 1.1 (1.5 Mbps) is rarely used in new designs but emUSB-Device supports it for the edge cases.

For USB Type-C and USB Power Delivery, those features live on the silicon’s dedicated Type-C/PD controller rather than inside emUSB-Device itself, but emUSB-Device pairs cleanly with the vendor’s Type-C stack on supported parts.

Why a commercial stack instead of rolling your own

Every engineer who has built a USB peripheral from scratch remembers the debugging week. The common failure modes are all subtle:

  • Enumeration timing. Windows enforces a strict timing window on the Set Address descriptor exchange, and a device that is a few milliseconds slow will fail to enumerate reliably on some Windows hosts while working fine on Linux.
  • Descriptor quirks. Certain Windows class drivers will reject otherwise-valid descriptors if a specific field is out of an expected range. The spec says one thing; the reference driver accepts a narrower subset.
  • Suspend/resume and remote wakeup. When the host suspends the bus, the device must enter low-power mode and remember enough state to respond to a wakeup. Getting this right across battery-powered products is non-trivial.
  • Hub interaction. Some USB hubs mangle specific transfer patterns, and a stack that is not tested against a wide range of hubs will ship bugs that only surface in the field.
  • Cross-OS interop. Windows, macOS, and Linux each have their own USB host-side behaviour, and a device that passes on two often fails on the third in some subtle way.

emUSB-Device is tested against multi-OS interop and against a range of real USB hosts. The team that ships the stack has spent years finding and fixing the quirks, and that body of fixes is what you are buying.

Indian use cases

Scenarios in this article are illustrative, common patterns Indian engineering teams encounter, not specific named customers.

Illustrative scenario, engineering. A typical Bengaluru-area data-logger product team is shipping a portable instrument that exposes two interfaces simultaneously: a CDC-ACM virtual COM port for real-time streaming of measurements to a host PC application, and an MSC mass-storage interface for bulk download of historical logs as files. The same cable, the same enumeration, one USB port on the product, two interfaces presented to the host. That is a composite device, and emUSB-Device makes it a configuration exercise rather than a research project.

Illustrative scenario, medical device. A typical Chennai-area medical device team is building a vital-signs monitor that exposes a custom HID interface to a hospital workstation application for parameter configuration and calibration. HID is the natural class choice because it avoids the need for a custom Windows driver, any host, any OS, can open an HID device without administrator privileges. The team pairs emUSB-Device with emSecure for firmware signing and SystemView for timing verification of the USB task against their safety budget.

A typical Pune-area automotive Tier-2 supplier is building a CAN-USB bridge that enumerates as a CDC-ACM virtual COM port. Diagnostic tools running on Windows and Linux workstations talk to it as if it were a serial port, which means the tool chain does not need custom Windows drivers or signed kernel modules, a real operational benefit for a product that will be deployed across many customer sites.

A typical Hyderabad-area industrial sensor OEM is shipping a USB Type-C interface on a maintenance-laptop dock. The dock presents a composite device with HID (for custom configuration), MSC (for firmware update as a drive), and CDC (for a debug console) all on one connection. Field engineers plug in a laptop, get three interfaces automatically, and can do configuration, update, and diagnostics without installing any vendor software.

Target silicon summary

Integration recommendation

For an Indian team starting a new USB peripheral product, the right starting point is to pick the silicon based on USB speed requirements first (do you need high-speed or is full-speed enough?), then port emUSB-Device onto the vendor BSP, choose the class driver set, and validate on a representative set of host PCs and host operating systems early, ideally within the first sprint, not at the end of the project. Pair emUSB-Device with emFile if MSC is in scope, emSecure if signed firmware update is required, and SystemView for timing verification of the USB task under load.

Further reading

Work with GSAS

GSAS Micro Systems is the authorized Indian engineering partner for SEGGER Microcontroller GmbH. We help product teams across Bengaluru, Hyderabad, Chennai, Pune, Mumbai, and Delhi NCR evaluate emUSB-Device for their specific silicon and class-driver requirements, plan composite-device architectures, and wire the USB stack into the larger SEGGER middleware set. Talk to our engineering team if you are scoping a new USB peripheral project or hitting enumeration issues on an existing one.

Also appears in:

Interested in SEGGER tools?

Talk to our application engineers for personalized tool recommendations.

Stay in the Loop

Get monthly compliance updates, product insights, and engineering best practices delivered to your inbox.