Библиотека LUFA (раннее название MyUSB) версия 101122
Управление интерфейсом USB

Defines

#define USB_STREAM_TIMEOUT_MS   100

Enumerations

enum  USB_Modes_t {
  USB_MODE_None = 0,
  USB_MODE_Device = 1,
  USB_MODE_Host = 2,
  USB_MODE_UID = 3
}

Functions

void USB_USBTask (void)
static bool USB_VBUS_GetStatus (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE
static void USB_Detach (void) ATTR_ALWAYS_INLINE
static void USB_Attach (void) ATTR_ALWAYS_INLINE
void USB_Init (const uint8_t Mode, const uint8_t Options)
void USB_ShutDown (void)
void USB_ResetInterface (void)

Variables

volatile bool USB_IsInitialized
USB_Request_Header_t USB_ControlRequest
volatile uint8_t USB_CurrentMode
volatile uint8_t USB_Options

Маски опций контроллера USB

#define USB_OPT_REG_DISABLED   (1 << 1)
#define USB_OPT_REG_ENABLED   (0 << 1)
#define USB_OPT_MANUAL_PLL   (1 << 2)
#define USB_OPT_AUTO_PLL   (0 << 2)

Маски типа конечной точки/потока (Endpoint/Pipe)

#define EP_TYPE_CONTROL   0x00
#define EP_TYPE_ISOCHRONOUS   0x01
#define EP_TYPE_BULK   0x02
#define EP_TYPE_INTERRUPT   0x03

Detailed Description

Функции, макросы, переменные, перечисления и типы, связанные с настройкой и управлением интерфейсом USB


Define Documentation

#define EP_TYPE_BULK   0x02

Маска для конечной точки (или потока) типа BULK.

Note:
См. Поддержка конечных точек и Поддержка канала для функций конечной точки/потока.
#define EP_TYPE_CONTROL   0x00

Маска для конечной точки (или потока) типа CONTROL.

Note:
См. Поддержка конечных точек и Поддержка канала для функций конечной точки/потока.
#define EP_TYPE_INTERRUPT   0x03

Маска для конечной точки (или потока) типа INTERRUPT.

Note:
См. Поддержка конечных точек и Поддержка канала для функций конечной точки/потока.
#define EP_TYPE_ISOCHRONOUS   0x01

Маска для конечной точки (или потока) типа ISOCHRONOUS.

Note:
См. Поддержка конечных точек и Поддержка канала для функций конечной точки/потока.
#define USB_OPT_AUTO_PLL   (0 << 2)

Маска опции автоматического управления PLL для USB_Init(). Указывает библиотеке, что библиотека должна взять на себя все управление AVR PLL (используемое для генерирования тактов высокой частоты, требуемых для контроллера USB), и гарантирует корректную частоту захвата для операций с USB.

#define USB_OPT_MANUAL_PLL   (1 << 2)

Маска опции ручного управления PLL для USB_Init(). Указывает библиотеке, что приложение пользователя берет на себя все управление AVR PLL (используемое для генерирования тактов высокой частоты, требуемых для контроллера USB) и гарантирует корректную частоту захвата для операций с USB.

#define USB_OPT_REG_DISABLED   (1 << 1)

Маска опции запрета регулятора для USB_Init(). Показывает, что внутренний регулятор портов данных 3.3V USB должен быть запрещен, и для ножек портов данных используется напряжение VCC микроконтроллера AVR.

Note:
См. даташит USB AVR для подробностей по внутреннему регулятору напряжения портов (pad regulator).
#define USB_OPT_REG_ENABLED   (0 << 1)

Маска опции разрешения регулятора для USB_Init(). Показывает, что внутренний регулятор портов данных 3.3V USB должен быть разрешен и регулировать напряжение ножек данных по стандарту USB.

Note:
См. даташит USB AVR для подробностей по внутреннему регулятору напряжения портов (pad regulator).
#define USB_STREAM_TIMEOUT_MS   100

Константа для максимального периода программного таймаута функций потока данных USB (и для управления, и стандартных) когда активен режим либо устройства, либо хоста. Если следующий пакет потока не принят или или не подтвержден в течение этого периода, то функция потока зарегистрирует ошибку.

Это значение может быть отменено в makefile проекта пользователя значением токена USB_STREAM_TIMEOUT_MS, и передано компилятору через переключатель -D.


Enumeration Type Documentation

Перечисление для возможных режимов контроллера USB, для инициализации через USB_Init() и индикации обратно для приложения пользователя через USB_CurrentMode.

Enumerator:
USB_MODE_None 

Показывает, что контроллер сейчас не инициализирован в любом из режимов USB.

USB_MODE_Device 

Показывает, что контроллер сейчас инициализирован в режиме устройства USB.

USB_MODE_Host 

Показывает, что контроллер сейчас инициализирован в режиме хоста USB.

USB_MODE_UID 

Показывает, что контроллер должен автоматически определять режим USB по контакту UID коннектора USB.


Function Documentation

static void USB_Attach ( void  ) [inline, static]

Подключение устройства к шине USB. Представляет наличие устройства для любого подключенного хоста USB, начиная процесс энумерации. Если хоста нет, то такое "подключение" устройства разрешает энумерацию, как только хост будет физически подключен к устройству.

Это также безусловно требуется для правильной работы в режиме хоста, чтобы разрешить подключение устройства к хосту. И это все несмотря на бит, размещенный в регистре режима устройства и несмотря на таблицу данных даташита, не упоминающую об этом требовании в режиме хоста.

static void USB_Detach ( void  ) [inline, static]

Отключение устройства от шины USB. Это дает эффект удаления устройства из любого подключенного хоста, прекращая все коммуникации USB. Если хоста нет, это предотвращает энумерацию устройства со стороны любого хоста при подключении, пока не будет вызвана USB_Attach().

void USB_Init ( const uint8_t  Mode,
const uint8_t  Options 
)

Главная функция для инициализации и запуска интерфейса USB. Как только интерфейс USB станет активным, он позволяет устройствам соединяться с хостом (в режиме работы устройства USB), или энумерацию для устройства в режиме хоста.

Поскольку библиотека USB в процессе энумерации полагается на прерывания для режимов устройства и хоста, пользователь должен разрешить глобальные прерывания перед вызовом или сразу после вызова этой функции. В режиме устройства прерывания должны быть разрешены в течение 500 мс после вызова этой функции, чтобы гарантировать для хоста отсутствие таймаута при энумерации устройства. В режиме хоста прерывания могут быть разрешены после вызова этой функции когда угодно, однако энумерация подключенного устройства не начнется, пока прерывания не будут разрешены.

Вызов этой функции, когда интерфейс USB уже инициализирован, приведет к полному сбросу интерфейса USB и повторной энумерации.

Parameters:
[in]ModeМаска, показывающая, в каком режиме должен быть инициализирован интерфес USB, значение из перечисления USB_Modes_t.
[in]OptionsМаска, показывающая опции, используемые при инициализации интерфеса USB, управляющие поведением интерфейса USB. Должна быть составлена из маски USB_OPT_REG_* для управления регулятором, маски USB_OPT_*_PLL для управления PLL и маски USB_DEVICE_OPT_* mask (когда разрешен режим устройства) для установки скорости режима устройства.
Note:
Для уменьшения расхода памяти FLASH, если библиотека нужна либо только для режима устройства, либо только для режима хоста, режим может быть установлен статически в makefile проекта, путем задания токена USB_DEVICE_ONLY (для режима устройства) или USB_HOST_ONLY (для режима хоста), и передачей его компилятору с помощью переключателя -D. Если режим задан статически, то этот параметр отсутствует в прототипе функции.

Для уменьшения расхода памяти FLASH в библиотеке, если нужны только фиксированные установки, опции можно установить статически тем же способом, как и режим (см. параметр Mode этой функции). Чтобы статически установить опции USB, задайте токен USE_STATIC_OPTIONS указанием подходящийх масок опций. Когда опции заданы статически, этот параметр не существует в прототипе функции.

Параметр режима не существует на устройствах, где возможен только один режим, как например для моделей USB AVR, которые могут аппаратно реализовать только режим устройства USB.
See also:
Device.h for the USB_DEVICE_OPT_* masks.
void USB_ResetInterface ( void  )

Сбрасывает уже инициализированный интерфейс. Это приведет к переэнумерации устройства, если оно уже подключено к хосту или переэнумерации всех подключенных устройств в режиме работы как хост.

void USB_ShutDown ( void  )

Выключает интерфейс USB. Выключается интерфейс после освобождения памяти всех буферов USB FIFO, конечных точек и потоков. Когда выключен, нельзя использовать функции USB, пока интерфейс не будет перезапущен функцией USB_Init().

void USB_USBTask ( void  )

Это главная задача поддержки USB. Драйвер USB требует постоянного запуска этой задачи, когда система USB активна (программа устройства подключена к хосту, или программа хоста работает с устройством) для поддержки коммуникаций USB. Эта задача может выполняться из RTOS, ISR быстрого таймера или главного цикла программы пользователя.

Задача USB должна вызываться не реже 30 мс в режиме устройства, или 1 мс в режиме хоста. Задача должна работать всегда, или (для минимизации расхода времени CPU):

  • В режиме устройства она может быть запрещена при начальном запуске, разрешена по запуску события EVENT_USB_Device_Connect() и запрещена снова по запуску события EVENT_USB_Device_Disconnect().

В режиме устройства (только в нем), конечная точка управления может быть обработана в прерывании, полностью на стороне библиотеки, путем задания токена INTERRUPT_CONTROL_ENDPOINT и передачи его компилятору через переключатель -D.

See also:
См. События USB для подробностей по событиям USB.
static bool USB_VBUS_GetStatus ( void  ) [inline, static]

Возвращает двоичное true, если сигнал VBUS в настоящий момент находится в состоянии high (другими словами, хост USB предоставил питание), иначе возвращает false.

Note:
Эта функция не доступна на некоторых моделях AVR, которые не поддерживают аппаратный мониторинг VBUS.

Variable Documentation

Структура, содержащая последний принятый управляющий запрос в режиме работы устройства USB (для использования в приложениях пользователя внутри события EVENT_USB_Device_ControlRequest(), или для заполнения запроса управления в режиме работы как хоста, перед вызовом USB_Host_SendControlRequest().

volatile uint8_t USB_CurrentMode

Показывает режим, в который инициализирован интерфейс USB, значение из перечисления USB_Modes_t.

Note:
Эта переменная должна быть обработана как только для чтения в пользовательском приложении, и никогда вручную не изменяться.

Когда контроллер инициализирован в режим автодетекта UID, эта переменная будет удерживать текущий выбранный режим USB (USB_MODE_Device или USB_MODE_Host). если контроллер зафиксирован в отдельном режиме (либо через опции времени компиляции USB_DEVICE_ONLY, либо USB_HOST_ONLY, либо по ограничениям в возможностях контроллера USB в зависимости от выбора модели AVR), эта величина будет вычислена как константа и никогда не будет вычислена как USB_MODE_None, даже когда интерфейс USB не инициализирован.
volatile bool USB_IsInitialized

Показывает, инициализирован ли в настоящий момент интерфейс USB, но необязательно подключен к хосту или устройству (например, если был запущен USB_Init()). Если false, то все другие глобальные переменные библиотеки, связанные с драйвером USB, недопустимы для использования.

Note:
Эта переменная должна быть обработана как только для чтения в пользовательском приложении, и никогда вручную не изменяться.
volatile uint8_t USB_Options

Показывает текущие опции USB, в которые инициализирован интерфейс USB вызовом USB_Init(). Это значение будет одной из масок USB_MODE_*, определенных в другом месте этого модуля.

Note:
Эта переменная должна быть обработана как только для чтения в пользовательском приложении, и никогда вручную не изменяться.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines