Интеграция USB в встроенные системы
Для интеграции USB в дизайн встроенной системы можно рассматривать два основных подхода: использование специализированной интегральной схемы (ASIC) или выбор микроконтроллера (MCU) с поддержкой USB на аппаратном уровне. Эти варианты имеют свои особенности, и выбор зависит от ряда факторов, таких как сложность проекта, требования к производительности, энергопотребление и стоимость разработки.
1. Использование специализированной интегральной схемы (ASIC)
ASIC представляет собой интегральную схему, специально разработанную для выполнения конкретной задачи, в данном случае — для обеспечения поддержки USB. Такие решения обычно обеспечивают высокую производительность, малое энергопотребление и минимальные задержки, так как они оптимизированы для обработки USB-сигналов.
Однако, использование ASIC подразумевает дополнительные затраты на разработку и производство, что может быть экономически невыгодным для малых серий продукции. Кроме того, проектирование ASIC требует значительного времени и инженерных ресурсов, особенно для обеспечения соответствия спецификациям USB, таким как поддержка разных скоростей (USB 1.1, USB 2.0, USB 3.0 и выше), электрические характеристики и протоколы обмена.
ASIC обычно используются в продуктах, где требуется высокая степень оптимизации или выпуск массовой партии, что оправдывает затраты на разработку. Например, в смартфонах или периферийных устройствах, где важно минимизировать размер и энергопотребление, ASIC с USB может стать лучшим выбором.
2. Использование микроконтроллера (MCU) с поддержкой USB
Микроконтроллеры с аппаратной поддержкой USB предлагают более гибкий и экономически эффективный вариант для интеграции USB во встроенные системы. Современные MCU часто оснащены встроенными USB-контроллерами, которые поддерживают различные уровни USB-протокола, такие как Full-Speed (12 Мбит/с), High-Speed (480 Мбит/с) или даже SuperSpeed (5 Гбит/с). Выбор MCU с поддержкой USB позволяет сократить время на разработку, так как многие микроконтроллеры поставляются с готовыми программными библиотеками для работы с USB, что упрощает процесс интеграции.
Одним из преимуществ использования MCU является возможность объединить несколько функций на одном чипе. Помимо поддержки USB, микроконтроллер может содержать модули для других интерфейсов (SPI, I2C, UART), а также включать процессорные ядра, память и периферийные устройства, что делает его универсальным решением для множества задач встроенных систем. Это также упрощает разработку небольших устройств, таких как портативные гаджеты, медицинские приборы, носимые устройства и т.д., где требуется USB-подключение для передачи данных или зарядки.
Добавление USB с помощью ASIC
Простой метод интеграции USB в систему — это использование ASIC, который управляет коммуникацией USB на внутреннем уровне и выводит необходимые данные и сигналы. Часто используется мост USB-UART, который обеспечивает относительно прозрачную передачу данных между USB-хостом и встроенной системой. Это обычно отображается как виртуальный COM-порт на хост-системе, что позволяет двусторонней связи через последовательный терминал. Многие ASIC также предлагают дополнительные функции, такие как USB-I2C, управление линиями ввода/вывода или аналоговое семплирование, что делает их простыми в использовании и интеграции в систему.
Однако есть ограничения. Универсальные ASIC могут быть ограничены, если требуется специфическая функция, которую они не поддерживают. Кроме того, использование ASIC добавляет дополнительные компоненты в спецификацию (BOM), что увеличивает как стоимость, так и необходимое место на печатной плате.
Добавление USB с помощью микроконтроллера
Когда необходимость в USB-коммуникации известна на ранних этапах проектирования, выбор микроконтроллера с встроенной поддержкой USB может быть более эффективным вариантом. Многие MCU, от энергоэффективных 8-битных до высокопроизводительных 32-битных устройств, поддерживают USB. Правильный выбор зависит от конкретного приложения.
Для более простых задач, таких как клавиатуры, мыши или преобразователи USB-UART, идеальными часто являются 8-битные MCU. Эти устройства компактны, энергоэффективны, недороги и поддерживают работу от +5 В. Для более сложных, требующих вычислительных ресурсов приложений может потребоваться 32-битный MCU, предлагающий более высокую производительность и больше памяти. Однако 32-битные MCU могут быть дороже и занимать больше места на плате, а также иметь более узкий диапазон рабочих напряжений.
Разработка USB-приложений с AVR DU
Среди доступных микроконтроллеров серия AVR DU выделяется для USB-приложений. Эта серия, являющаяся преемником XMEGA D, предлагает несколько улучшений, таких как отсутствие необходимости во внешнем кристалле, что снижает стоимость BOM. Кроме того, серия DU включает встроенный LDO-регулятор для питания USB-схем при работе MCU при напряжении 3,9 В и выше. Ещё одной уникальной функцией является Program and Debug Interface Disable (PDID), который блокирует устройство, предотвращая его дальнейшее программирование или доступ к нему.
Приложения для семейства AVR DU разрабатываются с использованием MPLAB Code Configurator (MCC), который помогает настраивать встроенные аппаратные периферийные устройства и генерировать API для них. MCC поставляется с библиотекой стека USB, которая поддерживает стандартные классы Communications Device Class (CDC) и Human Interface Devices (HID), такие как клавиатуры или мыши.
Пример 1: Приложение CDC — USB в SPI/I2C
Одним из примеров приложения является преобразование USB в SPI/I2C без необходимости в пользовательском драйвере. Это достигается за счёт того, что микроконтроллер идентифицируется как устройство класса CDC, которое поддерживается большинством операционных систем с помощью стандартных драйверов. Данные передаются в виде отформатированных команд (или "предложений") микроконтроллеру, который их анализирует и преобразует в операции на шине SPI или I2C. Микроконтроллер затем возвращает данные или сообщения об ошибках в зависимости от операции.
Для SPI формат команд включает такие идентификаторы, как "eeprom", "dac" или "usd", ссылаясь на компоненты, используемые в Curiosity Nano Explorer для этого приложения. Аналогичный процесс применяется для I2C, что позволяет быстро тестировать, например, чтение ID производителя с датчика температуры, такого как MCP9808.
Пример 2: Приложение HID — USB-клавиатура
Другим примером реализации USB является клавиатура с использованием класса HID. Стандартная клавиатура отправляет отчёты на хост-компьютер при нажатии или отпускании клавиш. Однако в этом примере нажатие одной кнопки может вызвать несколько вводов с клавиатуры, создавая макросы функций. Например, нажатие кнопки на AVR64DU32 Curiosity Nano отправляет отчёт с клавишами "AVR DU" на хост. Кроме того, светодиоды на плате показывают состояние функции Caps Lock на хосте.
Дальнейшая настройка возможна путём назначения различных клавиш на кнопки, подключённые через плату Click 2х2 с помощью адаптера Curiosity. Это позволяет создавать макросы, такие как CTRL+C (копировать), CTRL+V (вставить) или даже ALT+F4 (закрыть окно). Эти настройки легко найти на Github для заинтересованных пользователей.
Хотя USB является одним из самых сложных серийных протоколов связи, его широкое распространение делает его привлекательной функцией для встроенных систем. Разработчики могут либо интегрировать USB с помощью ASIC, добавляя сложности в спецификацию, либо выбрать микроконтроллер с поддержкой USB. Далее выбор между экономичным 8-битным MCU, таким как семейство AVR DU, или более мощным 32-битным устройством зависит от потребностей системы.
Подписаться на почтовую рассылку / Авторам сотрудничество