Микроконтроллер NXP LPC с прошивкой USB-CDC определяется в системе как виртуальный COM-порт (VCOM), и именно сбой на этом этапе — устройство появляется в диспетчере как «Unknown Device» или порт не открывается терминалом — чаще всего останавливает отладку проекта. Проблема почти всегда лежит в одной из трёх областей: дескрипторы USB в прошивке, драйвер на стороне ПК или физическое подключение линий D+/D−.
В этой статье разберём, как работает USB VCOM на чипах семейства LPC (LPC11Uxx, LPC17xx, LPC54xxx и других), какие инструменты NXP предоставляет для реализации CDC-интерфейса, как проверить корректность определения порта в Windows и Linux и что делать, если порт появляется, но данные не передаются.
Что такое VCOM и как он реализован в LPC
VCOM (Virtual COM Port) — это программная эмуляция последовательного порта поверх интерфейса USB. Микроконтроллер регистрируется в операционной системе как устройство класса CDC (Communications Device Class), и ОС создаёт для него стандартный COM-порт, с которым можно работать через любой терминал — PuTTY, Tera Term, minicom.
Преимущество подхода в том, что не требуется отдельный преобразователь USB-UART наподобие FTDI или CH340: чип LPC с аппаратным USB-контроллером сам выполняет эту роль. Скорость обмена при этом не ограничена классическими значениями UART вроде 115200 — реальная пропускная способность определяется USB Full Speed (до 12 Мбит/с) или High Speed, если контроллер его поддерживает.
Со стороны прошивки VCOM реализуется через стек USB-устройства. Для LPC доступны два основных варианта:
- 📦 USB Device Stack в составе MCUXpresso SDK — актуальный вариант для современных семейств, включает пример usb_device_cdc_vcom.
- 📚 Библиотека LPCOpen / usbd_rom — для старших серий LPC11Uxx и LPC17xx, где часть USB-стека зашита в ROM чипа.
- 🔧 Сторонние стеки (например, TinyUSB) — популярны в open-source проектах и поддерживают ряд чипов NXP.
Аппаратные требования и распиновка
Для работы USB-интерфейса микроконтроллеру необходимы корректно подключённые линии D+ и D−, а также стабильное тактирование USB-блока. На многих семействах LPC тактовый сигнал USB формируется из внешнего кварца через PLL — если частота кварца на плате отличается от той, что задана в конфигурации проекта, USB работать не будет вообще, причём без каких-либо явных ошибок в коде.
Обратите внимание на питание линий данных. На части микросхем предусмотрен отдельный вывод питания USB-подсистемы — если он не запитан согласно даташиту конкретной модели, периферия физически не выйдет на связь. Точную схему подключения нужно сверять с reference manual именно вашей модели: распиновка и требования к питанию различаются между семействами.
⚠️ Внимание: на некоторых отладочных платах USB-разъём подключён к отладчику (например, Link2/LPC-Link2), а не к целевому микроконтроллеру. Перед поиском ошибки в прошивке убедитесь по схеме платы, что кабель подключён именно к USB-порту целевого LPC.💡
При разводке собственной платы держите линии D+ и D− короткими, одинаковой длины и без переходных отверстий рядом с разъёмом — это снижает риск проблем с целостностью сигнала ещё до этапа прошивки.